[dpdk-dev] [EXT] [PATCH v18 2/3] build: add 'platform' meson option and Arm SoC config
Pavan Nikhilesh Bhagavatula
pbhagavatula at marvell.com
Fri Apr 9 10:06:33 CEST 2021
>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.linkes at pantheon.tech>
>Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli at arm.com>
For octeontx/thunderx
Tested-by: Pavan Nikhilesh <pbhagavatula at 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
More information about the dev
mailing list