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 DEC16A04B5; Thu, 10 Sep 2020 16:21:47 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id BA3F71C0D4; Thu, 10 Sep 2020 16:21:33 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by dpdk.org (Postfix) with ESMTP id 2BC401C0CE for ; Thu, 10 Sep 2020 16:21:32 +0200 (CEST) IronPort-SDR: mGE+lAvalR4cmNIzvhQaaymNsWqrMNT3Gdz5J0roYmw3j+n/KlIb4dtLd/onEuLBos/5ev/Y+j NB1kNlTEqDBQ== X-IronPort-AV: E=McAfee;i="6000,8403,9739"; a="138054699" X-IronPort-AV: E=Sophos;i="5.76,413,1592895600"; d="scan'208";a="138054699" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Sep 2020 07:21:31 -0700 IronPort-SDR: qLDQzMj9vfjU1RTeLiBQswDN0DrwRc1ie26iJZBQS8SLKMPC0/iX/gBOAA6EPabeL/NGrWrTQL VkCTcDytrrhQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,413,1592895600"; d="scan'208";a="329346317" Received: from silpixa00400466.ir.intel.com ([10.237.213.195]) by fmsmga004.fm.intel.com with ESMTP; 10 Sep 2020 07:21:29 -0700 From: Conor Walsh To: dev@dpdk.org Cc: david.marchand@redhat.com, ray.kinsella@intel.com, nhorman@tuxdriver.com, aconole@redhat.com, maicolgabriel@hotmail.com, thomas@monjalon.net, bruce.richardson@intel.com, Conor Walsh Date: Thu, 10 Sep 2020 14:21:19 +0000 Message-Id: <20200910142121.3995680-3-conor.walsh@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200910142121.3995680-1-conor.walsh@intel.com> References: <20200910140116.3995345-1-conor.walsh@intel.com> <20200910142121.3995680-1-conor.walsh@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH v2 2/4] devtools: add generation of compressed abi dump archives 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" This patch adds a script that generates a compressed archive containing .dump files which can be used to perform ABI breakage checking for the build specified in the parameters. Invoke using "./gen-abi-tarball.py -t -a [-cf ]" - : dpdk tag e.g. "v20.11" - : required architecture e.g. "arm" or "x86_64" - : configuration file for cross compiling for another system, this flag is not required. e.g. "config/arm/arm64_armv8_linux_gcc" E.g. "./gen-abi-tarball.py -t latest -a x86_64" If a compiler is not specified using the CC environmental variable then the script will default to using gcc. Using these parameters the script will produce a .tar.gz archive containing .dump files required to do ABI breakage checking Signed-off-by: Conor Walsh --- devtools/gen-abi-tarball.py | 125 ++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100755 devtools/gen-abi-tarball.py diff --git a/devtools/gen-abi-tarball.py b/devtools/gen-abi-tarball.py new file mode 100755 index 000000000..2104b4ee6 --- /dev/null +++ b/devtools/gen-abi-tarball.py @@ -0,0 +1,125 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2020 Intel Corporation + +import sys +import os +import argparse + +# Get command line arguments +parser = argparse.ArgumentParser(usage='\rThis script is intended to generate ABI dump tarballs\n'+ + 'Supported environmental variables\n'+ + '\t- CC: The required compiler will be determined using this environmental variable.\n') +parser.add_argument('-t', '--tag', type=str, dest='tag', help='DPDK tag e.g. latest or v20.11') +parser.add_argument('-cf', '--cross-file', type=str, dest='crosscompile', help='Set the location of a cross compile config') +parser.add_argument('-a', '--arch', type=str, dest='arch', help='Arch arm or x86_64') +args = parser.parse_args() + +# Get the DPDK tag if not supplied set as latest +if args.tag: + user_tag = args.tag +else: + user_tag = 'latest' + print('No tag supplied defaulting to latest') + +# Get the cross-compile option +if args.crosscompile: + cross_comp = args.crosscompile + if not args.arch: + print('ERROR Arch must be set using -a when using cross compile') + exit() + cross_comp = os.path.abspath(cross_comp) + cross_comp_meson = '--cross-file '+cross_comp +else: + cross_comp = '' + cross_comp_meson = '' + +# Get the required system architecture if not supplied set as x86_64 +if args.arch: + arch = args.arch +else: + arch = os.popen('uname -m').read().strip() + print('No system architecture supplied defaulting to '+arch) + +tag = '' +# If the user did not supply tag or wants latest then get latest tag +if user_tag == 'latest': + # Get latest quarterly build tag from git repo + tag = os.popen('git ls-remote --tags http://dpdk.org/git/dpdk | grep -v "rc\|{}" | tail -n 1 | sed "s/.*\///"').read().strip() +else: + tag = user_tag + # If the user supplied tag is not in the DPDK repo then fail + tag_check = int(os.popen('git ls-remote http://dpdk.org/git/dpdk refs/tags/'+tag+' | wc -l').read().strip()) + if tag_check != 1: + print('ERROR supplied tag does not exist in DPDK repo') + exit() + +# Get the specified compiler from system +comp_env = 'CC' +if comp_env in os.environ: + comp = os.environ[comp_env] + comp_default = '' +else: + print('No compiler specified, defaulting to gcc') + comp = 'gcc' + comp_default = 'CC=gcc' + +# Print the configuration to the user +print('\nSelected Build: '+tag+', Compiler: '+comp+', Architecture: '+arch+', Cross Compile: '+cross_comp) + +# Store the base directory script is working from +baseDir = os.getcwd() +# Store devtools dir +devtoolsDir = os.path.abspath(os.path.dirname(os.path.realpath(sys.argv[0]))) + +# Create directory for DPDK git repo and build +try: + os.mkdir('dump_dpdk') +except OSError as error: + print('ERROR The dump_dpdk directory could not be created, ensure it does not exist before start') + exit() +os.chdir('dump_dpdk') +# Clone DPDK and switch to specified tag +print('Cloning '+tag+' from DPDK git') +os.popen('git clone --quiet http://dpdk.org/git/dpdk >/dev/null').read() +os.chdir('dpdk') +os.popen('git checkout --quiet '+tag+' >/dev/null').read() + +# Create build folder with meson and set debug build and cross compile (if needed) +print('Configuring Meson') +os.popen(comp_default+' meson dumpbuild '+cross_comp_meson+' >/dev/null').read() +os.chdir('dumpbuild') +os.popen('meson configure -Dbuildtype=debug >/dev/null').read() +print('Building DPDK . . .') +#Build DPDK with ninja +os.popen('ninja >/dev/null').read() +gccDir = os.getcwd() + +# Create directory for abi dump files +dumpDir = os.path.join(baseDir,tag+'-'+comp+'-'+arch+'-abi_dump') +try: + os.mkdir(dumpDir) +except OSError as error: + print('ERROR The '+dumpDir+' directory could not be created') + os.popen('rm -rf '+os.path.join(baseDir,'dump_dpdk')).read() + exit() + +# Create dump files and output to dump directory +print('Generating ABI dump files') +genabiout = os.popen(os.path.join(devtoolsDir,'gen-abi.sh')+' '+gccDir).read() +os.popen('cp dump/* '+dumpDir).read() + +# Compress the dump directory +print('Creating Tarball of dump files') +os.chdir(baseDir) +origSize = os.popen('du -sh '+dumpDir+' | sed "s/\s.*$//"').read() +os.popen('tar -czf '+dumpDir.split('/')[-1]+'.tar.gz '+dumpDir.split('/')[-1]+' >/dev/null').read() +newSize = os.popen('du -sh '+dumpDir+'.tar.gz | sed "s/\s.*$//"').read() + +# Remove all temporary directories +print('Cleaning up temporary directories') +os.popen('rm -rf '+dumpDir).read() +os.popen('rm -rf '+os.path.join(baseDir,'dump_dpdk')).read() + +#Print output of the script to the user +print('\nDump of DPDK ABI '+tag+' is available in '+dumpDir.split('/')[-1]+'.tar.gz (Original Size: '+origSize.strip()+', Compressed Size:'+newSize.strip()+')\n') -- 2.25.1