From patchwork Sat Apr 10 08:01:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nick Connolly X-Patchwork-Id: 91006 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7375DA0547; Sat, 10 Apr 2021 10:02:41 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id F00741411C2; Sat, 10 Apr 2021 10:02:40 +0200 (CEST) Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) by mails.dpdk.org (Postfix) with ESMTP id 171571411AD for ; Sat, 10 Apr 2021 10:02:38 +0200 (CEST) Received: by mail-wr1-f52.google.com with SMTP id x7so7721595wrw.10 for ; Sat, 10 Apr 2021 01:02:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mayadata-io.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BeKPvGHjJFoqzjivamln4n8KWpBluDYtVNyCQLYIio4=; b=xYguUuQ2ZpnvB/tSB4v+BZ+//N5vk7yUyj/Q2GVpBmJaVH7AA80VMJVz2++G1ntzYR 7B/w7uvDCJk/0ysFP1tnBurmTtaKRtf8BOidcJ5Ni9UOuJbvtk80d1vzPNMGbV/a3SRf gdrcMdvsWcO+O/jnRhDwXL6Rcz5wpVpqKDvVg3hmUm7zMbZhWVZDufIbvx+xyYEBB7E5 aSxkdopAgsygwvYyYExwZA7EMYxFbyogAsYTlnLh3EMWXeNmv5Q96TV5RVtSy1J+gawZ Tgfuz5i56OJ0X1Dr8lDXC/DM6JlT+se5Wcs9MT5qJ8F6Ugx5IZbGIK+PMONHlSEWrT/8 t0Vw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BeKPvGHjJFoqzjivamln4n8KWpBluDYtVNyCQLYIio4=; b=jwj92M8yBdqmau3TjguJRroUM8V35/bX8kBwkybQ/0PF3pJVLRzK+XbMGXELXDhwcn QVzMde+/vistQ7pjJ0AVbHCHfLmHvlTqIobY5fkXyVeskOwIV50/5b3LUK9W/9reVnQa /rjSaiRLR2m8WLJguqSm5NjuJtZUjCfOkMbYRiSIXlFR50MlTB+YxKgul37ounHw8YHA vwWGQC8jLKBWgl4Bds6vNjr4DhIdc1qMpTOjwApXnkW9I4bR3Wuo5P8RyXM5dVOpXYyp t/KWntMRFhKCCoaFC6UGacoff8x4zezqBbDbJcWKLpde7BcASvj4WJN/hhfY9swPIjVp GxOA== X-Gm-Message-State: AOAM530V9BeSyowVgDKONzgkM90NvxeccbiRfPfJsPq2JAaJdWR6Af0R WsZ75/56HbE8gEtM0huoG0c4jw== X-Google-Smtp-Source: ABdhPJyYOX8Sq7xQYsH+f4O5KXW0gvtzGY6r9FPdoLsndIspFkhE6j/izhkPZy4oZN2hG6gvYxbsrg== X-Received: by 2002:a5d:4010:: with SMTP id n16mr21733307wrp.125.1618041758456; Sat, 10 Apr 2021 01:02:38 -0700 (PDT) Received: from FENIX.localdomain (cpc98320-croy25-2-0-cust77.19-2.cable.virginm.net. [80.235.134.78]) by smtp.gmail.com with ESMTPSA id c8sm8940515wrd.55.2021.04.10.01.02.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 10 Apr 2021 01:02:38 -0700 (PDT) From: Nick Connolly To: Bruce Richardson , Nick Connolly , Ranjit Menon Cc: dev@dpdk.org, dmitry.kozliuk@gmail.com, navasile@linux.microsoft.com, dmitrym@microsoft.com, pallavi.kadam@intel.com, stable@dpdk.org Date: Sat, 10 Apr 2021 09:01:43 +0100 Message-Id: <20210410080143.21279-1-nick.connolly@mayadata.io> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210401122723.23082-1-nick.connolly@mayadata.io> References: <20210401122723.23082-1-nick.connolly@mayadata.io> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v2] build: fix symlink of drivers for Windows X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 Tested-by: Narcisa Vasile Acked-by: Narcisa Vasile --- 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 66a2edcc4..d0a54b02a 100644 --- a/config/meson.build +++ b/config/meson.build @@ -61,6 +61,10 @@ 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 # set the machine type and cflags for it