>Add Arm SoC configuration sets to Arm meson.build and add an arch >agnostic meson option, 'platform', to select from these SoC >configurations for meson native builds. This is preferable to >specifying a cross file when doing aarch64 -> aarch64 builds, since the >cross file specifies the toolchain as well. > >Signed-off-by: Juraj Linkeš <juraj.lin...@pantheon.tech> >Reviewed-by: Honnappa Nagarahalli <honnappa.nagaraha...@arm.com>
For octeontx/thunderx Tested-by: Pavan Nikhilesh <pbhagavat...@marvell.com> >--- > config/arm/arm64_armada_linux_gcc | 6 +- > config/arm/arm64_armv8_linux_clang_ubuntu1804 | 3 +- > config/arm/arm64_armv8_linux_gcc | 5 +- > config/arm/arm64_bluefield_linux_gcc | 6 +- > config/arm/arm64_dpaa_linux_gcc | 6 +- > config/arm/arm64_emag_linux_gcc | 5 +- > config/arm/arm64_graviton2_linux_gcc | 6 +- > config/arm/arm64_n1sdp_linux_gcc | 6 +- > config/arm/arm64_n2_linux_gcc | 6 +- > config/arm/arm64_octeontx2_linux_gcc | 6 +- > config/arm/arm64_stingray_linux_gcc | 6 +- > config/arm/arm64_thunderx2_linux_gcc | 5 +- > config/arm/arm64_thunderxt88_linux_gcc | 5 +- > config/arm/meson.build | 140 +++++++++++++++++- > .../linux_gsg/cross_build_dpdk_for_arm64.rst | 84 ++++------- > meson_options.txt | 2 + > 16 files changed, 179 insertions(+), 118 deletions(-) > >diff --git a/config/arm/arm64_armada_linux_gcc >b/config/arm/arm64_armada_linux_gcc >index 9958db6692..301418949b 100644 >--- a/config/arm/arm64_armada_linux_gcc >+++ b/config/arm/arm64_armada_linux_gcc >@@ -14,8 +14,4 @@ cpu = 'armv8-a' > endian = 'little' > > [properties] >-implementer_id = '0x56' >-part_number = '0xd08' >-max_lcores = 16 >-max_numa_nodes = 1 >-numa = false >+platform = 'armada' >diff --git a/config/arm/arm64_armv8_linux_clang_ubuntu1804 >b/config/arm/arm64_armv8_linux_clang_ubuntu1804 >index 57095c1304..db488d75f4 100644 >--- a/config/arm/arm64_armv8_linux_clang_ubuntu1804 >+++ b/config/arm/arm64_armv8_linux_clang_ubuntu1804 >@@ -14,7 +14,6 @@ cpu = 'armv8-a' > endian = 'little' > > [properties] >-implementer_id = 'generic' >-part_number = 'generic' >+platform = 'generic' > c_args = ['-target', 'aarch64-linux-gnu', '--sysroot', '/usr/aarch64-linux- >gnu'] > c_link_args = ['-target', 'aarch64-linux-gnu', '-fuse-ld=lld', '--gcc- >toolchain=/usr'] >diff --git a/config/arm/arm64_armv8_linux_gcc >b/config/arm/arm64_armv8_linux_gcc >index 5451a01da1..5391d35389 100644 >--- a/config/arm/arm64_armv8_linux_gcc >+++ b/config/arm/arm64_armv8_linux_gcc >@@ -14,7 +14,4 @@ endian = 'little' > > [properties] > # Generate binaries that are portable across all Armv8 machines >-implementer_id = 'generic' >-part_number = 'generic' >-max_lcores = 256 >-max_numa_nodes = 4 >+platform = 'generic' >diff --git a/config/arm/arm64_bluefield_linux_gcc >b/config/arm/arm64_bluefield_linux_gcc >index 6bef87fbd4..248a9f031a 100644 >--- a/config/arm/arm64_bluefield_linux_gcc >+++ b/config/arm/arm64_bluefield_linux_gcc >@@ -13,8 +13,4 @@ cpu = 'armv8-a' > endian = 'little' > > [properties] >-implementer_id = '0x41' >-part_number = '0xd08' >-max_lcores = 16 >-max_numa_nodes = 1 >-numa = false >+platform = 'bluefield' >diff --git a/config/arm/arm64_dpaa_linux_gcc >b/config/arm/arm64_dpaa_linux_gcc >index 37398c7628..e9d5fd31fc 100644 >--- a/config/arm/arm64_dpaa_linux_gcc >+++ b/config/arm/arm64_dpaa_linux_gcc >@@ -14,8 +14,4 @@ cpu = 'armv8-a' > endian = 'little' > > [properties] >-implementer_id = 'dpaa' >-part_number = '0xd08' >-max_lcores = 16 >-max_numa_nodes = 1 >-numa = false >+platform = 'dpaa' >diff --git a/config/arm/arm64_emag_linux_gcc >b/config/arm/arm64_emag_linux_gcc >index 7cbb055106..9cdd931180 100644 >--- a/config/arm/arm64_emag_linux_gcc >+++ b/config/arm/arm64_emag_linux_gcc >@@ -13,7 +13,4 @@ cpu = 'armv8-a' > endian = 'little' > > [properties] >-implementer_id = '0x50' >-part_number = '0x0' >-max_lcores = 32 >-max_numa_nodes = 1 >+platform = 'emag' >diff --git a/config/arm/arm64_graviton2_linux_gcc >b/config/arm/arm64_graviton2_linux_gcc >index edacb79497..8016fd236c 100644 >--- a/config/arm/arm64_graviton2_linux_gcc >+++ b/config/arm/arm64_graviton2_linux_gcc >@@ -13,8 +13,4 @@ cpu = 'armv8-a' > endian = 'little' > > [properties] >-implementer_id = '0x41' >-part_number = '0xd0c' >-max_lcores = 64 >-max_numa_nodes = 1 >-numa = false >+platform = 'graviton2' >diff --git a/config/arm/arm64_n1sdp_linux_gcc >b/config/arm/arm64_n1sdp_linux_gcc >index b00f2d1ef7..0df283e2f4 100644 >--- a/config/arm/arm64_n1sdp_linux_gcc >+++ b/config/arm/arm64_n1sdp_linux_gcc >@@ -13,8 +13,4 @@ cpu = 'armv8-a' > endian = 'little' > > [properties] >-implementer_id = '0x41' >-part_number = '0xd0c' >-max_lcores = 4 >-max_numa_nodes = 1 >-numa = false >+platform = 'n1sdp' >diff --git a/config/arm/arm64_n2_linux_gcc >b/config/arm/arm64_n2_linux_gcc >index 817b8ee28e..036aee2b0a 100644 >--- a/config/arm/arm64_n2_linux_gcc >+++ b/config/arm/arm64_n2_linux_gcc >@@ -13,8 +13,4 @@ cpu = 'armv8-a' > endian = 'little' > > [properties] >-implementer_id = '0x41' >-part_number = '0xd49' >-max_lcores = 64 >-max_numa_nodes = 1 >-numa = false >+platform = 'n2' >diff --git a/config/arm/arm64_octeontx2_linux_gcc >b/config/arm/arm64_octeontx2_linux_gcc >index 5937697098..9156ee5410 100644 >--- a/config/arm/arm64_octeontx2_linux_gcc >+++ b/config/arm/arm64_octeontx2_linux_gcc >@@ -13,8 +13,4 @@ cpu = 'armv8-a' > endian = 'little' > > [properties] >-implementer_id = '0x43' >-part_number = '0xb2' >-max_lcores = 36 >-max_numa_nodes = 1 >-numa = false >+platform = 'octeontx2' >diff --git a/config/arm/arm64_stingray_linux_gcc >b/config/arm/arm64_stingray_linux_gcc >index 6bef87fbd4..319a4a151d 100644 >--- a/config/arm/arm64_stingray_linux_gcc >+++ b/config/arm/arm64_stingray_linux_gcc >@@ -13,8 +13,4 @@ cpu = 'armv8-a' > endian = 'little' > > [properties] >-implementer_id = '0x41' >-part_number = '0xd08' >-max_lcores = 16 >-max_numa_nodes = 1 >-numa = false >+platform = 'stingray' >diff --git a/config/arm/arm64_thunderx2_linux_gcc >b/config/arm/arm64_thunderx2_linux_gcc >index c06dcdc2b3..69c71cbc82 100644 >--- a/config/arm/arm64_thunderx2_linux_gcc >+++ b/config/arm/arm64_thunderx2_linux_gcc >@@ -13,7 +13,4 @@ cpu = 'armv8-a' > endian = 'little' > > [properties] >-implementer_id = '0x43' >-part_number = '0xaf' >-max_lcores = 256 >-max_numa_nodes = 2 >+platform = 'thunderx2' >diff --git a/config/arm/arm64_thunderxt88_linux_gcc >b/config/arm/arm64_thunderxt88_linux_gcc >index 3ba1528e48..372097ba01 100644 >--- a/config/arm/arm64_thunderxt88_linux_gcc >+++ b/config/arm/arm64_thunderxt88_linux_gcc >@@ -13,7 +13,4 @@ cpu = 'armv8-a' > endian = 'little' > > [properties] >-implementer_id = '0x43' >-part_number = '0xa1' >-max_lcores = 96 >-max_numa_nodes = 1 >+platform = 'thunderxt88' >diff --git a/config/arm/meson.build b/config/arm/meson.build >index a241c45d13..6fcbbf2ebc 100644 >--- a/config/arm/meson.build >+++ b/config/arm/meson.build >@@ -25,7 +25,7 @@ flags_common = [ > ## Part numbers are specific to Arm implementers > # implementer specific aarch64 flags have middle priority > # (will overwrite common flags) >-# part number specific aarch64 flags have the highest priority >+# part number specific aarch64 flags have higher priority > # (will overwrite both common and implementer specific flags) > implementer_generic = { > 'description': 'Generic armv8', >@@ -192,6 +192,106 @@ implementers = { > 'dpaa': implementer_dpaa > } > >+# soc specific aarch64 flags have the highest priority >+# (will overwrite all other flags) >+soc_generic = { >+ 'description': 'Generic un-optimized build for all aarch64 >machines', >+ 'implementer': 'generic', >+ 'part_number': 'generic' >+} >+ >+soc_armada = { >+ 'description': 'Marvell ARMADA', >+ 'implementer': '0x56', >+ 'part_number': '0xd08', >+ 'numa': false >+} >+ >+soc_bluefield = { >+ 'description': 'NVIDIA BlueField', >+ 'implementer': '0x41', >+ 'part_number': '0xd08', >+ 'numa': false >+} >+ >+soc_dpaa = { >+ 'description': 'NXP DPAA', >+ 'implementer': 'dpaa', >+ 'part_number': '0xd08', >+ 'numa': false >+} >+ >+soc_emag = { >+ 'description': 'Ampere eMAG', >+ 'implementer': '0x50', >+ 'part_number': '0x0' >+} >+ >+soc_graviton2 = { >+ 'description': 'AWS Graviton2', >+ 'implementer': '0x41', >+ 'part_number': '0xd0c', >+ 'numa': false >+} >+ >+soc_n1sdp = { >+ 'description': 'Arm Neoverse N1SDP', >+ 'implementer': '0x41', >+ 'part_number': '0xd0c', >+ 'flags': [ >+ ['RTE_MAX_LCORE', 4] >+ ], >+ 'numa': false >+} >+ >+soc_n2 = { >+ 'description': 'Arm Neoverse N2', >+ 'implementer': '0x41', >+ 'part_number': '0xd49', >+ 'numa': false >+} >+ >+soc_octeontx2 = { >+ 'description': 'Marvell OCTEON TX2', >+ 'implementer': '0x43', >+ 'part_number': '0xb2', >+ 'numa': false >+} >+ >+soc_stingray = { >+ 'description': 'Broadcom Stingray', >+ 'implementer': '0x41', >+ 'part_number': '0xd08', >+ 'numa': false >+} >+ >+soc_thunderx2 = { >+ 'description': 'Marvell ThunderX2 T99', >+ 'implementer': '0x43', >+ 'part_number': '0xaf' >+} >+ >+soc_thunderxt88 = { >+ 'description': 'Marvell ThunderX T88', >+ 'implementer': '0x43', >+ 'part_number': '0xa1' >+} >+ >+socs = { >+ 'generic': soc_generic, >+ 'armada': soc_armada, >+ 'bluefield': soc_bluefield, >+ 'dpaa': soc_dpaa, >+ 'emag': soc_emag, >+ 'graviton2': soc_graviton2, >+ 'n1sdp': soc_n1sdp, >+ 'n2': soc_n2, >+ 'octeontx2': soc_octeontx2, >+ 'stingray': soc_stingray, >+ 'thunderx2': soc_thunderx2, >+ 'thunderxt88': soc_thunderxt88 >+} >+ > dpdk_conf.set('RTE_ARCH_ARM', 1) > dpdk_conf.set('RTE_FORCE_INTRINSICS', 1) > >@@ -203,11 +303,19 @@ if dpdk_conf.get('RTE_ARCH_32') > machine_args += '-mfpu=neon' > else > # aarch64 build >+ soc = get_option('platform') >+ soc_config = {} > if not meson.is_cross_build() > if machine == 'default' > # default build >+ if soc != '' >+ error('Building for a particular platform is >' + >+ 'unsupported with default build.') >+ endif > implementer_id = 'generic' > part_number = 'generic' >+ elif soc != '' >+ soc_config = socs.get(soc, {'not_supported': >true}) > else > # native build > # The script returns ['Implementer', 'Variant', >'Architecture', >@@ -225,8 +333,30 @@ else > endif > else > # cross build >- implementer_id = >meson.get_cross_property('implementer_id') >- part_number = >meson.get_cross_property('part_number') >+ soc = meson.get_cross_property('platform', '') >+ if soc == '' >+ error('Arm SoC must be specified in the cross >file.') >+ endif >+ soc_config = socs.get(soc, {'not_supported': true}) >+ endif >+ >+ soc_flags = [] >+ if soc_config.has_key('not_supported') >+ error('SoC @0@ not supported.'.format(soc)) >+ elif soc_config != {} >+ implementer_id = soc_config['implementer'] >+ implementer_config = implementers[implementer_id] >+ part_number = soc_config['part_number'] >+ soc_flags = soc_config.get('flags', []) >+ if not soc_config.get('numa', true) >+ has_libnuma = 0 >+ endif >+ if soc_config.has_key('disabled_drivers') >+ disabled_drivers += >soc_config['disabled_drivers'] >+ endif >+ if soc_config.has_key('enabled_drivers') >+ enabled_drivers += >soc_config['enabled_drivers'] >+ endif > endif > > if implementers.has_key(implementer_id) >@@ -252,8 +382,8 @@ else > '(-Dmachine=generic) build.') > endif > >- # use default flags with implementer flags >- dpdk_flags = flags_common + implementer_config['flags'] + >part_number_config.get('flags', []) >+ # add/overwrite flags in the proper order >+ dpdk_flags = flags_common + implementer_config['flags'] + >part_number_config.get('flags', []) + soc_flags > > # apply supported machine args > machine_args = [] # Clear previous machine args >diff --git a/doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst >b/doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst >index 1504dbfef0..fb01f3020c 100644 >--- a/doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst >+++ b/doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst >@@ -187,58 +187,32 @@ Use the following command to cross-compile >DPDK for the target machine:: > meson aarch64-build-clang --cross-file >config/arm/arm64_armv8_linux_clang_ubuntu1804 > ninja -C aarch64-build-clang > >-Supported cross-compilation targets >------------------------------------ >- >-If you wish to build for a target which is not among the current cross- >files, >-you may use various combinations of implementer/part number:: >- >- Supported implementers: >- 'generic': Generic armv8 >- '0x41': Arm >- '0x43': Cavium >- '0x50': Ampere Computing >- '0x56': Marvell ARMADA >- 'dpaa': NXP DPAA >- >- Supported part_numbers for generic: >- 'generic': valid for all armv8-a architectures (unoptimized portable >build) >- >- Supported part_numbers for 0x41, 0x56, dpaa: >- '0xd03': cortex-a53 >- '0xd04': cortex-a35 >- '0xd09': cortex-a73 >- '0xd0a': cortex-a75 >- '0xd0b': cortex-a76 >- '0xd0c': neoverse-n1 >- >- Supported part_numbers for 0x43: >- '0xa1': thunderxt88 >- '0xa2': thunderxt81 >- '0xa3': thunderxt83 >- '0xaf': thunderx2t99 >- '0xb2': octeontx2 >- >- Supported part_numbers for 0x50: >- '0x0': emag >- >-Other cross file options >------------------------- >- >-There are other options you may specify in a cross file to tailor the >build:: >- >- Supported extra configuration >- max_numa_nodes = n # will set RTE_MAX_NUMA_NODES >- max_lcores = n # will set RTE_MAX_LCORE >- >- numa = false # set to false to force building for a non-NUMA >system >- # if not set or set to true, the build system will build for a NUMA >- # system only if libnuma is installed >- >- disabled_drivers = ['bus/dpaa', 'crypto/*'] # add disabled drivers >- # valid values are dir/subdirs in the drivers directory >- # wildcards are allowed >- >- enabled_drivers = ['common/*', 'bus/*'] # build only these drivers >- # valid values are dir/subdirs in the drivers directory >- # wildcards are allowed >+Building for an aarch64 SoC on an aarch64 build machine >+------------------------------------------------------- >+ >+If you wish to build on an aarch64 build machine for a different aarch64 >SoC, >+you don't need a separate cross toolchain, just a different set of >+configuration options. To build for an aarch64 SoC, use the -Dplatform >meson >+option:: >+ >+ meson soc_build -Dplatform=<target_soc> >+ >+Substitute <target_soc> with one of the supported SoCs:: >+ >+ generic: Generic un-optimized build for all aarch64 machines. >+ armada: Marvell ARMADA >+ bluefield: NVIDIA BlueField >+ dpaa: NXP DPAA >+ emag: Ampere eMAG >+ graviton2: AWS Graviton2 >+ n1sdp: Arm Neoverse N1SDP >+ octeontx2: Marvell OCTEON TX2 >+ stingray: Broadcom Stingray >+ thunderx2: Marvell ThunderX2 T99 >+ thunderxt88: Marvell ThunderX T88 >+ >+These SoCs are also used in cross files, e.g.:: >+ >+ [properties] >+ # Generate binaries that are portable across all Armv8 machines >+ platform = 'generic' >diff --git a/meson_options.txt b/meson_options.txt >index d2d24a1424..d3d9e1ee51 100644 >--- a/meson_options.txt >+++ b/meson_options.txt >@@ -32,6 +32,8 @@ option('max_lcores', type: 'integer', value: 128, > description: 'maximum number of cores/threads supported by >EAL') > option('max_numa_nodes', type: 'integer', value: 32, > description: 'maximum number of NUMA nodes supported by >EAL') >+option('platform', type: 'string', value: '', >+ description: 'Use configuration for a particular platform (such as >an Arm SoC).') > option('enable_trace_fp', type: 'boolean', value: false, > description: 'enable fast path trace points.') > option('tests', type: 'boolean', value: true, >-- >2.20.1