From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6E796A0524; Sun, 13 Dec 2020 00:35:54 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 5B484C996; Sun, 13 Dec 2020 00:35:04 +0100 (CET) Received: from mail-lf1-f44.google.com (mail-lf1-f44.google.com [209.85.167.44]) by dpdk.org (Postfix) with ESMTP id 4B6B1C970 for ; Sun, 13 Dec 2020 00:35:01 +0100 (CET) Received: by mail-lf1-f44.google.com with SMTP id o17so17994698lfg.4 for ; Sat, 12 Dec 2020 15:35:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=PjsvFvoABiYseZIi32qiAhKd2MgNiqsJjiNS1U6BBv0=; b=F8Et0GVouFH8ZyqtWiOXU8ehToMqHG/sJvoZ4OYtiDRl7Ijd1QT3OI8KQtRjnkMItF bXa3aPbjgq7mPrzI3PgC9v409xJ6rHDh31JqG5kdzLept5PDh9O4Tjr9bU6vAHjoGA50 ARn5pknoNeaVE6JgIkMkecm1qcWy+Z37HwYejdC+XI+8WY2o/eSz9q90FoFuEurI/Kh7 59zEMK8PR1e1mSXzG86QYSDckpdnVQkCiNcqoiM4eUAwvjnZ5IrWO0H/DcISuk7RbECu 7g7JhePvejx5QPT/EVMjbw/mAVf1FbNErQ/XPVMzlh/EWwaxtB+7VILAKfUCyVpxhgCQ D/CA== 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=PjsvFvoABiYseZIi32qiAhKd2MgNiqsJjiNS1U6BBv0=; b=LEOyXxiWfDJyEM/WDDs2xelFkGPA5tQBhHfp2GNJghlFa9taielSE61zzGnKQsysT9 0iX0j9jSTAPuO0BgqRxHgelkPzuNiEPBhmSluEQBecxunTzpu2wUCdUvC9eYYPHnj5JA atK3oV9A7cVIqU7OcUffiAZ2AGm2HG5U8hbNjU3dc2Qro7cWY+Krv/gl9TUmiUcpzf2V ylqSJUk+bNR5iNB0I5er9KSR/ez37/xXVxzFZC+KZK5/CPltUKWReX/yV4ZwpC+fx/fP vtnKyHByEAxZxErKm9wtkyOVVl5gnE6TU5xTKpFQYw9nwM8045Sruwvkx8DY/f7zlqJm rwKw== X-Gm-Message-State: AOAM533apIwtUg5k04tLYpoyEwHlL2/HzfkeTpZ9ni6NUiPrCDM5pjsd rA/rvZwcOaPEIe0jbiiZ1SJP9hipC0jQ0YCR X-Google-Smtp-Source: ABdhPJzGKwzSoMQo5/8UOmncIeatenuPsQbDetFfppNRcFY2GpuBJRlqi1G2pzY2bvqTV823GPqeJQ== X-Received: by 2002:a19:54c:: with SMTP id 73mr7162196lff.551.1607816099561; Sat, 12 Dec 2020 15:34:59 -0800 (PST) Received: from localhost.localdomain (broadband-37-110-65-23.ip.moscow.rt.ru. [37.110.65.23]) by smtp.gmail.com with ESMTPSA id b22sm1517930lfp.233.2020.12.12.15.34.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 12 Dec 2020 15:34:59 -0800 (PST) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: Narcisa Ana Maria Vasile , Pallavi Kadam , Dmitry Malloy , Dmitry Kozlyuk , Bruce Richardson , Neil Horman Date: Sun, 13 Dec 2020 02:34:46 +0300 Message-Id: <20201212233447.23154-4-dmitry.kozliuk@gmail.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201212233447.23154-1-dmitry.kozliuk@gmail.com> References: <20201212233447.23154-1-dmitry.kozliuk@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH 3/4] buildtools: support object file extraction for Windows X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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" clang archiver tool is llvm-ar on Windows and ar on other platforms. MinGW always uses ar. Replace shell script (Unix-only) that calls ar with a Python script (OS-independent) that calls an appropriate archiver tool selected at configuration time. Move the logic not to generate empty sources into pmdinfogen. Signed-off-by: Dmitry Kozlyuk --- Stdin and stdout are not longer used for input and output. Code to handle that could be removed, but maybe it's useful for someone. buildtools/gen-pmdinfo-cfile.py | 19 +++++++++++++++++++ buildtools/gen-pmdinfo-cfile.sh | 14 -------------- buildtools/meson.build | 10 ++++++++-- buildtools/pmdinfogen.py | 7 +++++++ 4 files changed, 34 insertions(+), 16 deletions(-) create mode 100644 buildtools/gen-pmdinfo-cfile.py delete mode 100755 buildtools/gen-pmdinfo-cfile.sh diff --git a/buildtools/gen-pmdinfo-cfile.py b/buildtools/gen-pmdinfo-cfile.py new file mode 100644 index 000000000..f1f289ffe --- /dev/null +++ b/buildtools/gen-pmdinfo-cfile.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: BSD-3-Clause +# Copyright (c) 2020 Dmitry Kozlyuk + +import os +import subprocess +import sys +import tempfile + +_, ar, archive, output, *pmdinfogen = sys.argv +with tempfile.TemporaryDirectory() as temp: + proc = subprocess.run( + # Don't use "ar p", because its output is corrupted on Windows. + [ar, "xv", os.path.abspath(archive)], capture_output=True, check=True, cwd=temp + ) + lines = proc.stdout.decode().splitlines() + names = [line[len("x - ") :] for line in lines] + paths = [os.path.join(temp, name) for name in names] + subprocess.run(pmdinfogen + paths + [output], check=True) diff --git a/buildtools/gen-pmdinfo-cfile.sh b/buildtools/gen-pmdinfo-cfile.sh deleted file mode 100755 index 109ee461e..000000000 --- a/buildtools/gen-pmdinfo-cfile.sh +++ /dev/null @@ -1,14 +0,0 @@ -#! /bin/sh -# SPDX-License-Identifier: BSD-3-Clause -# Copyright(c) 2017 Intel Corporation - -arfile=$1 -output=$2 -shift 2 -pmdinfogen=$* - -# The generated file must not be empty if compiled in pedantic mode -echo 'static __attribute__((unused)) const char *generator = "'$0'";' > $output -for ofile in `ar t $arfile` ; do - ar p $arfile $ofile | $pmdinfogen - - >> $output -done diff --git a/buildtools/meson.build b/buildtools/meson.build index 23cefd4be..0a2e91a7b 100644 --- a/buildtools/meson.build +++ b/buildtools/meson.build @@ -2,7 +2,6 @@ # Copyright(c) 2017-2019 Intel Corporation pkgconf = find_program('pkg-config', 'pkgconf', required: false) -pmdinfo = find_program('gen-pmdinfo-cfile.sh') list_dir_globs = find_program('list-dir-globs.py') check_symbols = find_program('check-symbols.sh') ldflags_ibverbs_static = find_program('options-ibverbs-static.sh') @@ -18,11 +17,18 @@ endif map_to_win_cmd = py3 + files('map_to_win.py') sphinx_wrapper = py3 + files('call-sphinx-build.py') -# select object file format +# select library and object file format +pmdinfo = py3 + files('gen-pmdinfo-cfile.py') pmdinfogen = py3 + files('pmdinfogen.py') if host_machine.system() == 'windows' + if cc.get_id() == 'gcc' + pmdinfo += 'ar' + else + pmdinfo += 'llvm-ar' + endif pmdinfogen += 'coff' else + pmdinfo += 'ar' pmdinfogen += 'elf' endif diff --git a/buildtools/pmdinfogen.py b/buildtools/pmdinfogen.py index 3209510eb..56f5f488c 100755 --- a/buildtools/pmdinfogen.py +++ b/buildtools/pmdinfogen.py @@ -230,12 +230,19 @@ def open_output(path): return open(path, "w") +def write_header(output): + output.write( + "static __attribute__((unused)) const char *generator = \"%s\";\n" % sys.argv[0] + ) + + def main(): args = parse_args() if args.input.count('-') > 1: raise Exception("'-' input cannot be used multiple times") output = open_output(args.output) + write_header(output) for path in args.input: image = load_image(args.format, path) drivers = load_drivers(image) -- 2.29.2