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 D340CA04E7; Mon, 2 Nov 2020 14:23:36 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 44B3FC91A; Mon, 2 Nov 2020 14:21:39 +0100 (CET) Received: from lb.pantheon.sk (lb.pantheon.sk [46.229.239.20]) by dpdk.org (Postfix) with ESMTP id 69F88C8DA for ; Mon, 2 Nov 2020 14:21:32 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by lb.pantheon.sk (Postfix) with ESMTP id 4F1EBB6B61; Mon, 2 Nov 2020 14:21:30 +0100 (CET) X-Virus-Scanned: amavisd-new at siecit.sk Received: from lb.pantheon.sk ([127.0.0.1]) by localhost (lb.pantheon.sk [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id QmkMwg9buttV; Mon, 2 Nov 2020 14:21:29 +0100 (CET) Received: from service-node1.lab.pantheon.local (unknown [46.229.239.141]) by lb.pantheon.sk (Postfix) with ESMTP id 7303AB6B67; Mon, 2 Nov 2020 14:21:25 +0100 (CET) From: =?UTF-8?q?Juraj=20Linke=C5=A1?= To: bruce.richardson@intel.com, Ruifeng.Wang@arm.com, Honnappa.Nagarahalli@arm.com, Phil.Yang@arm.com, vcchunga@amazon.com, Dharmik.Thakkar@arm.com, jerinjacobk@gmail.com, hemant.agrawal@nxp.com Cc: dev@dpdk.org, =?UTF-8?q?Juraj=20Linke=C5=A1?= Date: Mon, 2 Nov 2020 14:21:14 +0100 Message-Id: <1604323278-18039-8-git-send-email-juraj.linkes@pantheon.tech> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1604323278-18039-1-git-send-email-juraj.linkes@pantheon.tech> References: <1603893845-5736-1-git-send-email-juraj.linkes@pantheon.tech> <1604323278-18039-1-git-send-email-juraj.linkes@pantheon.tech> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH v6 07/11] build: streamline Arm build setup and machine args 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" Modify the Arm build system so it satisfies the following: * Use predefined configuration values and predefined machine args the generic portable build. * Use configuration values based on MIDR and native machine args for native builds. * Use configuration values and machine args based on MIDR implementer ID and part number specified in cross files for cross builds. Require these to be specified. Signed-off-by: Juraj Linkeš --- config/arm/arm64_armada_linux_gcc | 1 + config/arm/arm64_dpaa_linux_gcc | 1 + config/arm/arm64_emag_linux_gcc | 1 + config/arm/arm64_thunderx_linux_gcc | 1 + config/arm/meson.build | 158 +++++++++++++--------------- 5 files changed, 80 insertions(+), 82 deletions(-) diff --git a/config/arm/arm64_armada_linux_gcc b/config/arm/arm64_armada_linux_gcc index 52c5f4476..52214f2d8 100644 --- a/config/arm/arm64_armada_linux_gcc +++ b/config/arm/arm64_armada_linux_gcc @@ -15,3 +15,4 @@ endian = 'little' [properties] implementer_id = '0x56' +part_number = 'generic' diff --git a/config/arm/arm64_dpaa_linux_gcc b/config/arm/arm64_dpaa_linux_gcc index 573ae7e42..29f1581de 100644 --- a/config/arm/arm64_dpaa_linux_gcc +++ b/config/arm/arm64_dpaa_linux_gcc @@ -15,3 +15,4 @@ endian = 'little' [properties] implementer_id = 'dpaa' +part_number = 'generic' diff --git a/config/arm/arm64_emag_linux_gcc b/config/arm/arm64_emag_linux_gcc index 24f3d533e..14ecf9a12 100644 --- a/config/arm/arm64_emag_linux_gcc +++ b/config/arm/arm64_emag_linux_gcc @@ -14,3 +14,4 @@ endian = 'little' [properties] implementer_id = '0x50' +part_number = 'generic' diff --git a/config/arm/arm64_thunderx_linux_gcc b/config/arm/arm64_thunderx_linux_gcc index 670764437..6fa29886d 100644 --- a/config/arm/arm64_thunderx_linux_gcc +++ b/config/arm/arm64_thunderx_linux_gcc @@ -14,3 +14,4 @@ endian = 'little' [properties] implementer_id = '0x43' +part_number = 'generic' diff --git a/config/arm/meson.build b/config/arm/meson.build index 8dc946761..4cb5274b1 100644 --- a/config/arm/meson.build +++ b/config/arm/meson.build @@ -3,8 +3,6 @@ # Copyright(c) 2017 Cavium, Inc # Copyright(c) 2020 PANTHEON.tech s.r.o. -arm_force_native_march = false - # common flags to all aarch64 builds, with lowest priority flags_common_default = [ # Accelarate rte_memcpy. Be sure to run unit test (memcpy_perf_autotest) @@ -28,6 +26,8 @@ flags_common_default = [ ['RTE_ARCH_ARM64', true], ['RTE_CACHE_LINE_SIZE', 128] ] +generic_machine_args = ['-march=armv8-a+crc', '-moutline-atomics'] +native_machine_args = ['-march=native', '-mtune=native'] # implementer specific aarch64 flags, with middle priority # (will overwrite common flags) @@ -101,47 +101,46 @@ flags_part_number_octeontx2 = [ ] # arm config (implementer 0x41) is the default config -part_number_config_arm = { - 'generic': [['-march=armv8-a+crc', '-moutline-atomics']], - 'native': [['-march=native']], - '0xd03': [['-mcpu=cortex-a53']], - '0xd04': [['-mcpu=cortex-a35']], - '0xd07': [['-mcpu=cortex-a57']], - '0xd08': [['-mcpu=cortex-a72']], - '0xd09': [['-mcpu=cortex-a73']], - '0xd0a': [['-mcpu=cortex-a75']], - '0xd0b': [['-mcpu=cortex-a76']], - '0xd0c': [['-march=armv8.2-a+crc+crypto', '-mcpu=neoverse-n1'], flags_part_number_n1generic] -} -part_number_config_cavium = { - 'generic': [['-march=armv8-a+crc+crypto', '-mcpu=thunderx']], - 'native': [['-march=native']], - '0xa1': [['-mcpu=thunderxt88'], flags_part_number_thunderx], - '0xa2': [['-mcpu=thunderxt81'], flags_part_number_thunderx], - '0xa3': [['-mcpu=thunderxt83'], flags_part_number_thunderx], - '0xaf': [['-march=armv8.1-a+crc+crypto','-mcpu=thunderx2t99'], flags_part_number_thunderx2], - '0xb2': [['-march=armv8.2-a+crc+crypto+lse','-mcpu=octeontx2'], flags_part_number_octeontx2] +part_number_machine_args = { + '0xd03': ['-mcpu=cortex-a53'], + '0xd04': ['-mcpu=cortex-a35'], + '0xd07': ['-mcpu=cortex-a57'], + '0xd08': ['-mcpu=cortex-a72'], + '0xd09': ['-mcpu=cortex-a73'], + '0xd0a': ['-mcpu=cortex-a75'], + '0xd0b': ['-mcpu=cortex-a76'], + '0xd0c': ['-march=armv8.2-a+crc+crypto', '-mcpu=neoverse-n1'], + '0xa1': ['-mcpu=thunderxt88'], + '0xa2': ['-mcpu=thunderxt81'], + '0xa3': ['-mcpu=thunderxt83'], + '0xaf': ['-march=armv8.1-a+crc+crypto','-mcpu=thunderx2t99'], + '0xb2': ['-march=armv8.2-a+crc+crypto+lse','-mcpu=octeontx2'] } -part_number_config_emag = { - 'generic': [['-march=armv8-a+crc+crypto', '-mtune=emag']], - 'native': [['-march=native']] + +part_number_flags = { + '0xd0c': flags_part_number_n1generic, + '0xa1': flags_part_number_thunderx, + '0xa2': flags_part_number_thunderx, + '0xa3': flags_part_number_thunderx, + '0xaf': flags_part_number_thunderx2, + '0xb2': flags_part_number_octeontx2 } ## Arm implementer ID (MIDR in Arm Architecture Reference Manual) -implementer_generic = ['Generic armv8', flags_implementer_generic, part_number_config_arm] -implementer_0x41 = ['Arm', flags_implementer_arm, part_number_config_arm] -implementer_0x42 = ['Broadcom', flags_implementer_generic, part_number_config_arm] -implementer_0x43 = ['Cavium', flags_implementer_cavium, part_number_config_cavium] -implementer_0x44 = ['DEC', flags_implementer_generic, part_number_config_arm] -implementer_0x49 = ['Infineon', flags_implementer_generic, part_number_config_arm] -implementer_0x4d = ['Motorola', flags_implementer_generic, part_number_config_arm] -implementer_0x4e = ['NVIDIA', flags_implementer_generic, part_number_config_arm] -implementer_0x50 = ['Ampere Computing', flags_implementer_emag, part_number_config_emag] -implementer_0x51 = ['Qualcomm', flags_implementer_generic, part_number_config_arm] -implementer_0x53 = ['Samsung', flags_implementer_generic, part_number_config_arm] -implementer_0x56 = ['Marvell ARMADA', flags_implementer_armada, part_number_config_arm] -implementer_0x69 = ['Intel', flags_implementer_generic, part_number_config_arm] -implementer_dpaa = ['NXP DPAA', flags_implementer_dpaa, part_number_config_arm] +implementer_generic = ['Generic armv8', flags_implementer_generic] +implementer_0x41 = ['Arm', flags_implementer_arm] +implementer_0x42 = ['Broadcom', flags_implementer_generic] +implementer_0x43 = ['Cavium', flags_implementer_cavium] +implementer_0x44 = ['DEC', flags_implementer_generic] +implementer_0x49 = ['Infineon', flags_implementer_generic] +implementer_0x4d = ['Motorola', flags_implementer_generic] +implementer_0x4e = ['NVIDIA', flags_implementer_generic] +implementer_0x50 = ['Ampere Computing', flags_implementer_emag] +implementer_0x51 = ['Qualcomm', flags_implementer_generic] +implementer_0x53 = ['Samsung', flags_implementer_generic] +implementer_0x56 = ['Marvell ARMADA', flags_implementer_armada] +implementer_0x69 = ['Intel', flags_implementer_generic] +implementer_dpaa = ['NXP DPAA', flags_implementer_dpaa] dpdk_conf.set('RTE_ARCH_ARM', 1) dpdk_conf.set('RTE_FORCE_INTRINSICS', 1) @@ -154,69 +153,64 @@ if dpdk_conf.get('RTE_ARCH_32') machine_args += '-mfpu=neon' else # aarch64 build - implementer_id = 'generic' - if machine == 'generic' and not meson.is_cross_build() - implementer_config = implementer_generic - part_number = 'generic' - elif not meson.is_cross_build() - # The script returns ['Implementer', 'Variant', 'Architecture', - # 'Primary Part number', 'Revision'] - detect_vendor = find_program(join_paths( - meson.current_source_dir(), 'armv8_machine.py')) - cmd = run_command(detect_vendor.path()) - if cmd.returncode() == 0 - cmd_output = cmd.stdout().to_lower().strip().split(' ') - implementer_id = cmd_output[0] - part_number = cmd_output[3] - endif - # Set to generic if variable is not found - implementer_config = get_variable('implementer_' + implementer_id, ['generic']) - if implementer_config[0] == 'generic' + if not meson.is_cross_build() + if machine == 'generic' + # generic native build implementer_config = implementer_generic part_number = 'generic' - endif - if arm_force_native_march == true - part_number = 'native' + target_machine_args = generic_machine_args + else + # native build + # The script returns ['Implementer', 'Variant', 'Architecture', + # 'Primary Part number', 'Revision'] + detect_vendor = find_program(join_paths( + meson.current_source_dir(), 'armv8_machine.py')) + cmd = run_command(detect_vendor.path()) + if cmd.returncode() == 0 + cmd_output = cmd.stdout().to_lower().strip().split(' ') + implementer_id = cmd_output[0] + part_number = cmd_output[3] + else + error('Failed to get Arm MIDR information.') + endif + # Set to generic if implementer is not found + implementer_config = get_variable('implementer_' + implementer_id, implementer_generic) + target_machine_args = native_machine_args endif else - implementer_id = meson.get_cross_property('implementer_id', 'generic') - part_number = meson.get_cross_property('part_number', 'generic') + # cross build + implementer_id = meson.get_cross_property('implementer_id', '') + if implementer_id == '' + error('Arm implementer ID must be specified in the cross file.') + endif implementer_config = get_variable('implementer_' + implementer_id) + part_number = meson.get_cross_property('part_number', '') + if part_number == '' + error('Arm part number must be specified in the cross file.') + elif part_number == 'generic' + target_machine_args = generic_machine_args + else + target_machine_args = part_number_machine_args[part_number] + endif endif message('Arm implementer: ' + implementer_config[0]) message('Arm part number: ' + part_number) - part_number_config = implementer_config[2] - if part_number_config.has_key(part_number) - # use the specified part_number machine args if found - part_number_config = part_number_config[part_number] - elif not meson.is_cross_build() - # default to generic machine args if part_number is not found - # and not forcing native machine args - # but don't default in cross-builds; if part_number is specified - # incorrectly in a cross-file, it needs to be fixed there - part_number_config = part_number_config['generic'] - else - # doing cross build and part number is not in part_number_config - error('Cross build part number 0@0 not found.'.format(part_number)) - endif - - # use default flags with implementer flags dpdk_flags = flags_common_default + implementer_config[1] - if part_number_config.length() > 1 - # add extra flags from the part number - dpdk_flags += part_number_config[1] + if part_number_flags.has_key(part_number) + dpdk_flags += part_number_flags[part_number] endif # apply supported machine args machine_args = [] # Clear previous machine args - foreach flag: part_number_config[0] + foreach flag: target_machine_args if cc.has_argument(flag) machine_args += flag endif endforeach + # use default flags with implementer flags and part number flags # apply flags foreach flag: dpdk_flags if flag.length() > 0 -- 2.20.1