DPDK patches and discussions
 help / color / mirror / Atom feed
From: Nick Connolly <nick.connolly@mayadata.io>
To: Bruce Richardson <bruce.richardson@intel.com>,
	Ranjit Menon <ranjit.menon@intel.com>
Cc: dev@dpdk.org, dmitry.kozliuk@gmail.com,
	navasile@linux.microsoft.com, dmitrym@microsoft.com,
	pallavi.kadam@intel.com, stable@dpdk.org
Subject: Re: [dpdk-dev] [PATCH v3] build: fix symlink of drivers for Windows
Date: Thu, 27 May 2021 18:37:57 +0100	[thread overview]
Message-ID: <77be8951-5cc8-dd20-a084-9485ccceef28@mayadata.io> (raw)
In-Reply-To: <20210426100733.22478-1-nick.connolly@mayadata.io>

Hi Bruce,

Would you have some time to take a look at this?  It's a replacement for the
symlink-drivers-solibs.sh script for windows builds.

Thanks,
Nick

On 26/04/2021 11:07, Nick Connolly wrote:
> The symlink-drivers-solibs.sh script was disabled as part of 'install'
> for Windows because there is no support for shell scripts. However,
> this means that driver related DLLs are not present in the installed
> 'libdir' directory. Add a python script to perform the install and use
> it for Windows if the version of meson supports using an external
> program with add_install_script (>= 0.55.0).
>
> On Windows, symbolic links are somewhat problematic since the
> SeCreateSymbolicLinkPrivilege is required to be able to create them.
> In addition, different cross-compilation environments handle symbolic
> links differently, e.g. WSL, Msys2, Cygwin. Rather than trying to
> distinguish these scenarios, the python script will perform a file copy
> for any Windows specific names.
>
> On Windows, the shared library outputs have different names depending
> upon which toolset has been used to build them. The script currently
> handles Clang and GCC.
>
> On Linux the functionality is unchanged, but could be replaced with the
> python script once the required minimum version of meson is >= 0.55.0.
>
> Fixes: 5c7d86948764 ("build: fix install on Windows")
> Cc: stable@dpdk.org
>
> Signed-off-by: Nick Connolly <nick.connolly@mayadata.io>
> Tested-by: Narcisa Vasile <navasile@linux.microsoft.com>
> Acked-by: Narcisa Vasile <navasile@linux.microsoft.com>
> ---
> v3:
> * rebase
>
> v2:
> * 0.55.0 is required to use external program with add_install_script
>
>   buildtools/symlink-drivers-solibs.py | 49 ++++++++++++++++++++++++++++
>   config/meson.build                   |  4 +++
>   2 files changed, 53 insertions(+)
>   create mode 100644 buildtools/symlink-drivers-solibs.py
>
> diff --git a/buildtools/symlink-drivers-solibs.py b/buildtools/symlink-drivers-solibs.py
> new file mode 100644
> index 000000000..5627ddd9d
> --- /dev/null
> +++ b/buildtools/symlink-drivers-solibs.py
> @@ -0,0 +1,49 @@
> +#!/usr/bin/env python3
> +# SPDX-License-Identifier: BSD-3-Clause
> +# Copyright(c) 2021 Intel Corporation
> +
> +import os
> +import sys
> +import glob
> +import shutil
> +
> +# post-install script for meson/ninja builds to symlink the PMDs stored in
> +# $libdir/dpdk/pmds-*/ to $libdir. This is needed as some PMDs depend on
> +# others, e.g. PCI device PMDs depending on the PCI bus driver.
> +
> +# parameters to script are paths relative to install prefix:
> +# 1. directory for installed regular libs e.g. lib64
> +# 2. subdirectory of libdir where the pmds are
> +# 3. directory for installed regular binaries e.g. bin
> +
> +os.chdir(os.environ['MESON_INSTALL_DESTDIR_PREFIX'])
> +
> +lib_dir = sys.argv[1]
> +pmd_subdir = sys.argv[2]
> +bin_dir = sys.argv[3]
> +pmd_dir = os.path.join(lib_dir, pmd_subdir)
> +
> +# copy Windows PMDs to avoid any issues with symlinks since the
> +# build could be a cross-compilation under WSL, Msys or Cygnus.
> +# the filenames are dependent upon the specific toolchain in use.
> +
> +def copy_pmd_files(pattern, to_dir):
> +	for file in glob.glob(os.path.join(pmd_dir, pattern)):
> +		to = os.path.join(to_dir, os.path.basename(file))
> +		shutil.copy2(file, to)
> +		print(to + ' -> ' + file)
> +
> +copy_pmd_files('*rte_*.dll', bin_dir)
> +copy_pmd_files('*rte_*.pdb', bin_dir)
> +copy_pmd_files('*rte_*.lib', lib_dir)
> +copy_pmd_files('*rte_*.dll.a', lib_dir)
> +
> +# symlink shared objects
> +
> +os.chdir(lib_dir)
> +for file in glob.glob(os.path.join(pmd_subdir, 'librte_*.so*')):
> +	to = os.path.basename(file)
> +	if os.path.exists(to):
> +		os.remove(to)
> +	os.symlink(file, to)
> +	print(to + ' -> ' + file)
> diff --git a/config/meson.build b/config/meson.build
> index 017bb2efb..9e04c4c76 100644
> --- a/config/meson.build
> +++ b/config/meson.build
> @@ -59,6 +59,10 @@ eal_pmd_path = join_paths(get_option('prefix'), driver_install_path)
>   if not is_windows
>       meson.add_install_script('../buildtools/symlink-drivers-solibs.sh',
>               get_option('libdir'), pmd_subdir_opt)
> +elif meson.version().version_compare('>=0.55.0')
> +    # 0.55.0 is required to use external program with add_install_script
> +    meson.add_install_script(py3, '../buildtools/symlink-drivers-solibs.py',
> +            get_option('libdir'), pmd_subdir_opt, get_option('bindir'))
>   endif
>   
>   # init disable/enable driver lists that will be populated in different places


  reply	other threads:[~2021-05-27 17:38 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-01 12:27 [dpdk-dev] [PATCH] " Nick Connolly
2021-04-04  0:00 ` Dmitry Kozlyuk
2021-04-06 10:24   ` Nick Connolly
2021-04-10  8:01 ` [dpdk-dev] [PATCH v2] " Nick Connolly
2021-04-24  0:53   ` Narcisa Ana Maria Vasile
2021-04-26 10:07 ` [dpdk-dev] [PATCH v3] " Nick Connolly
2021-05-27 17:37   ` Nick Connolly [this message]
2021-05-28  8:19     ` Bruce Richardson
2021-05-28 10:50       ` Nick Connolly
2021-05-28  8:19   ` Bruce Richardson
2021-07-09 15:05     ` [dpdk-dev] [dpdk-stable] " Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=77be8951-5cc8-dd20-a084-9485ccceef28@mayadata.io \
    --to=nick.connolly@mayadata.io \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=dmitry.kozliuk@gmail.com \
    --cc=dmitrym@microsoft.com \
    --cc=navasile@linux.microsoft.com \
    --cc=pallavi.kadam@intel.com \
    --cc=ranjit.menon@intel.com \
    --cc=stable@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).