1*cd27047dSNick Connolly#!/usr/bin/env python3 2*cd27047dSNick Connolly# SPDX-License-Identifier: BSD-3-Clause 3*cd27047dSNick Connolly# Copyright(c) 2021 Intel Corporation 4*cd27047dSNick Connolly 5*cd27047dSNick Connollyimport os 6*cd27047dSNick Connollyimport sys 7*cd27047dSNick Connollyimport glob 8*cd27047dSNick Connollyimport shutil 9*cd27047dSNick Connolly 10*cd27047dSNick Connolly# post-install script for meson/ninja builds to symlink the PMDs stored in 11*cd27047dSNick Connolly# $libdir/dpdk/pmds-*/ to $libdir. This is needed as some PMDs depend on 12*cd27047dSNick Connolly# others, e.g. PCI device PMDs depending on the PCI bus driver. 13*cd27047dSNick Connolly 14*cd27047dSNick Connolly# parameters to script are paths relative to install prefix: 15*cd27047dSNick Connolly# 1. directory for installed regular libs e.g. lib64 16*cd27047dSNick Connolly# 2. subdirectory of libdir where the PMDs are 17*cd27047dSNick Connolly# 3. directory for installed regular binaries e.g. bin 18*cd27047dSNick Connolly 19*cd27047dSNick Connollyos.chdir(os.environ['MESON_INSTALL_DESTDIR_PREFIX']) 20*cd27047dSNick Connolly 21*cd27047dSNick Connollylib_dir = sys.argv[1] 22*cd27047dSNick Connollypmd_subdir = sys.argv[2] 23*cd27047dSNick Connollybin_dir = sys.argv[3] 24*cd27047dSNick Connollypmd_dir = os.path.join(lib_dir, pmd_subdir) 25*cd27047dSNick Connolly 26*cd27047dSNick Connolly# copy Windows PMDs to avoid any issues with symlinks since the 27*cd27047dSNick Connolly# build could be a cross-compilation under WSL, Msys or Cygnus. 28*cd27047dSNick Connolly# the filenames are dependent upon the specific toolchain in use. 29*cd27047dSNick Connolly 30*cd27047dSNick Connollydef copy_pmd_files(pattern, to_dir): 31*cd27047dSNick Connolly for file in glob.glob(os.path.join(pmd_dir, pattern)): 32*cd27047dSNick Connolly to = os.path.join(to_dir, os.path.basename(file)) 33*cd27047dSNick Connolly shutil.copy2(file, to) 34*cd27047dSNick Connolly print(to + ' -> ' + file) 35*cd27047dSNick Connolly 36*cd27047dSNick Connollycopy_pmd_files('*rte_*.dll', bin_dir) 37*cd27047dSNick Connollycopy_pmd_files('*rte_*.pdb', bin_dir) 38*cd27047dSNick Connollycopy_pmd_files('*rte_*.lib', lib_dir) 39*cd27047dSNick Connollycopy_pmd_files('*rte_*.dll.a', lib_dir) 40*cd27047dSNick Connolly 41*cd27047dSNick Connolly# symlink shared objects 42*cd27047dSNick Connolly 43*cd27047dSNick Connollyos.chdir(lib_dir) 44*cd27047dSNick Connollyfor file in glob.glob(os.path.join(pmd_subdir, 'librte_*.so*')): 45*cd27047dSNick Connolly to = os.path.basename(file) 46*cd27047dSNick Connolly if os.path.exists(to): 47*cd27047dSNick Connolly os.remove(to) 48*cd27047dSNick Connolly os.symlink(file, to) 49*cd27047dSNick Connolly print(to + ' -> ' + file) 50