[v9,13/14] build: add Arm SoC meson option
Checks
Commit Message
Add Arm SoC configuration to Arm meson.build and add a meson option to
enable those options for 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@pantheon.tech>
---
config/arm/arm64_armada_linux_gcc | 6 +-
config/arm/arm64_armv8_linux_gcc | 5 +-
config/arm/arm64_bluefield_linux_gcc | 6 +-
config/arm/arm64_dpaa_linux_gcc | 5 +-
config/arm/arm64_emag_linux_gcc | 5 +-
config/arm/arm64_graviton2_linux_gcc | 6 +-
config/arm/arm64_n1sdp_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 | 129 +++++++++++++++++-
.../linux_gsg/cross_build_dpdk_for_arm64.rst | 80 ++++-------
meson_options.txt | 2 +
14 files changed, 166 insertions(+), 106 deletions(-)
Comments
<snip>
>
> Add Arm SoC configuration to Arm meson.build and add a meson option to
> enable those options for 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@pantheon.tech>
Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> ---
> config/arm/arm64_armada_linux_gcc | 6 +-
> config/arm/arm64_armv8_linux_gcc | 5 +-
> config/arm/arm64_bluefield_linux_gcc | 6 +-
> config/arm/arm64_dpaa_linux_gcc | 5 +-
> config/arm/arm64_emag_linux_gcc | 5 +-
> config/arm/arm64_graviton2_linux_gcc | 6 +-
> config/arm/arm64_n1sdp_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 | 129 +++++++++++++++++-
> .../linux_gsg/cross_build_dpdk_for_arm64.rst | 80 ++++-------
> meson_options.txt | 2 +
> 14 files changed, 166 insertions(+), 106 deletions(-)
>
> diff --git a/config/arm/arm64_armada_linux_gcc
> b/config/arm/arm64_armada_linux_gcc
> index f5403f0a6..7cc40d1f4 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'
> -max_lcores = 16
> -max_numa_nodes = 1
> -numa = false
> -disabled_drivers = ['bus/dpaa', 'bus/fslmc', 'common/dpaax']
> +soc = 'armada'
> diff --git a/config/arm/arm64_armv8_linux_gcc
> b/config/arm/arm64_armv8_linux_gcc
> index 5451a01da..64d44ead8 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
> +soc = 'generic'
> diff --git a/config/arm/arm64_bluefield_linux_gcc
> b/config/arm/arm64_bluefield_linux_gcc
> index 6bef87fbd..7b1fae8b9 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
> +soc = 'bluefield'
> diff --git a/config/arm/arm64_dpaa_linux_gcc
> b/config/arm/arm64_dpaa_linux_gcc index 3458b9d7b..e52188842 100644
> --- a/config/arm/arm64_dpaa_linux_gcc
> +++ b/config/arm/arm64_dpaa_linux_gcc
> @@ -14,7 +14,4 @@ cpu = 'armv8-a'
> endian = 'little'
>
> [properties]
> -implementer_id = 'dpaa'
> -max_lcores = 16
> -max_numa_nodes = 1
> -numa = false
> +soc = 'dpaa'
> diff --git a/config/arm/arm64_emag_linux_gcc
> b/config/arm/arm64_emag_linux_gcc index 7cbb05510..6c24b4bca 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
> +soc = 'emag'
> diff --git a/config/arm/arm64_graviton2_linux_gcc
> b/config/arm/arm64_graviton2_linux_gcc
> index cfe239797..bae35d6be 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]
> -implementor_id = '0x41'
> -implementor_pn = '0xd0c'
> -max_lcores = 64
> -max_numa_nodes = 1
> -numa = false
> +soc = 'graviton2'
> diff --git a/config/arm/arm64_n1sdp_linux_gcc
> b/config/arm/arm64_n1sdp_linux_gcc
> index b00f2d1ef..249ff4738 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
> +soc = 'n1sdp'
> diff --git a/config/arm/arm64_octeontx2_linux_gcc
> b/config/arm/arm64_octeontx2_linux_gcc
> index 593769709..063018e8f 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
> +soc = 'octeontx2'
> diff --git a/config/arm/arm64_stingray_linux_gcc
> b/config/arm/arm64_stingray_linux_gcc
> index 6bef87fbd..1209a8c0b 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
> +soc = 'stingray'
> diff --git a/config/arm/arm64_thunderx2_linux_gcc
> b/config/arm/arm64_thunderx2_linux_gcc
> index c06dcdc2b..348650712 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
> +soc = 'thunderx2'
> diff --git a/config/arm/arm64_thunderxt88_linux_gcc
> b/config/arm/arm64_thunderxt88_linux_gcc
> index 3ba1528e4..d31d0c6d8 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
> +soc = 'thunderxt88'
> diff --git a/config/arm/meson.build b/config/arm/meson.build index
> a2584b1fb..d991f9954 100644
> --- a/config/arm/meson.build
> +++ b/config/arm/meson.build
> @@ -30,7 +30,7 @@ native_machine_args = ['-march=native', '-
> mtune=native'] ## 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',
> @@ -180,6 +180,99 @@ 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,
> + 'disabled_drivers': ['bus/dpaa', 'bus/fslmc', 'common/dpaax'] }
> +
> +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_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,
> + '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)
>
> @@ -192,11 +285,18 @@ if dpdk_conf.get('RTE_ARCH_32') else
> # aarch64 build
> use_native_machine_args = false
> + arm_soc = get_option('arm_soc')
> + soc_config = {}
> if not meson.is_cross_build()
> if machine == 'generic'
> # generic build
> + if arm_soc != ''
> + error('Arm SoC is unsupported with generic
> build.')
> + endif
> implementer_id = 'generic'
> part_number = 'generic'
> + elif arm_soc != ''
> + soc_config = socs.get(arm_soc, {'not_supported':
> true})
> else
> # native build
> # The script returns ['Implementer', 'Variant',
> 'Architecture', @@ -215,8 +315,27 @@ else
> endif
> else
> # cross build
> - implementer_id =
> meson.get_cross_property('implementer_id')
> - part_number = meson.get_cross_property('part_number')
> + arm_soc = meson.get_cross_property('soc', '')
> + if arm_soc == ''
> + error('Arm SoC must be specified in the cross file.')
> + endif
> + soc_config = socs.get(arm_soc, {'not_supported': true})
> + endif
> +
> + soc_flags = []
> + if soc_config.has_key('not_supported')
> + error('SoC @0@ not supported.'.format(arm_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
> endif
>
> if implementers.has_key(implementer_id)
> @@ -242,8 +361,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 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 063661ebf..83bdb78bf 100644
> --- a/doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst
> +++ b/doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst
> @@ -100,54 +100,32 @@ command::
> meson arm64-build --cross-file config/arm/arm64_armv8_linux_gcc
> ninja -C arm64-build
>
> -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
> -
> - disabled_drivers = ['bus/dpaa', 'crypto'] # add disabled drivers
> - # valid values are directories (optionally with their subdirs)
> - # in the drivers directory
> -
> - 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
> +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 -Darm_soc meson
> +option::
> +
> + meson soc_build -Darm_soc=<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
> + soc = 'generic'
> diff --git a/meson_options.txt b/meson_options.txt index
> 0c9adb1bb..7563a139e 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -1,5 +1,7 @@
> # Please keep these options sorted alphabetically.
>
> +option('arm_soc', type: 'string', value: '',
> + description: 'Specify if you want to build for a particular aarch64
> +Arm SoC when building on an aarch64 machine.')
> option('armv8_crypto_dir', type: 'string', value: '',
> description: 'path to the armv8_crypto library installation directory')
> option('disable_drivers', type: 'string', value: '',
> --
> 2.20.1
@@ -14,8 +14,4 @@ cpu = 'armv8-a'
endian = 'little'
[properties]
-implementer_id = '0x56'
-max_lcores = 16
-max_numa_nodes = 1
-numa = false
-disabled_drivers = ['bus/dpaa', 'bus/fslmc', 'common/dpaax']
+soc = 'armada'
@@ -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
+soc = 'generic'
@@ -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
+soc = 'bluefield'
@@ -14,7 +14,4 @@ cpu = 'armv8-a'
endian = 'little'
[properties]
-implementer_id = 'dpaa'
-max_lcores = 16
-max_numa_nodes = 1
-numa = false
+soc = 'dpaa'
@@ -13,7 +13,4 @@ cpu = 'armv8-a'
endian = 'little'
[properties]
-implementer_id = '0x50'
-part_number = '0x0'
-max_lcores = 32
-max_numa_nodes = 1
+soc = 'emag'
@@ -13,8 +13,4 @@ cpu = 'armv8-a'
endian = 'little'
[properties]
-implementor_id = '0x41'
-implementor_pn = '0xd0c'
-max_lcores = 64
-max_numa_nodes = 1
-numa = false
+soc = 'graviton2'
@@ -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
+soc = 'n1sdp'
@@ -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
+soc = 'octeontx2'
@@ -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
+soc = 'stingray'
@@ -13,7 +13,4 @@ cpu = 'armv8-a'
endian = 'little'
[properties]
-implementer_id = '0x43'
-part_number = '0xaf'
-max_lcores = 256
-max_numa_nodes = 2
+soc = 'thunderx2'
@@ -13,7 +13,4 @@ cpu = 'armv8-a'
endian = 'little'
[properties]
-implementer_id = '0x43'
-part_number = '0xa1'
-max_lcores = 96
-max_numa_nodes = 1
+soc = 'thunderxt88'
@@ -30,7 +30,7 @@ native_machine_args = ['-march=native', '-mtune=native']
## 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',
@@ -180,6 +180,99 @@ 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,
+ 'disabled_drivers': ['bus/dpaa', 'bus/fslmc', 'common/dpaax']
+}
+
+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_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,
+ '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)
@@ -192,11 +285,18 @@ if dpdk_conf.get('RTE_ARCH_32')
else
# aarch64 build
use_native_machine_args = false
+ arm_soc = get_option('arm_soc')
+ soc_config = {}
if not meson.is_cross_build()
if machine == 'generic'
# generic build
+ if arm_soc != ''
+ error('Arm SoC is unsupported with generic build.')
+ endif
implementer_id = 'generic'
part_number = 'generic'
+ elif arm_soc != ''
+ soc_config = socs.get(arm_soc, {'not_supported': true})
else
# native build
# The script returns ['Implementer', 'Variant', 'Architecture',
@@ -215,8 +315,27 @@ else
endif
else
# cross build
- implementer_id = meson.get_cross_property('implementer_id')
- part_number = meson.get_cross_property('part_number')
+ arm_soc = meson.get_cross_property('soc', '')
+ if arm_soc == ''
+ error('Arm SoC must be specified in the cross file.')
+ endif
+ soc_config = socs.get(arm_soc, {'not_supported': true})
+ endif
+
+ soc_flags = []
+ if soc_config.has_key('not_supported')
+ error('SoC @0@ not supported.'.format(arm_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
endif
if implementers.has_key(implementer_id)
@@ -242,8 +361,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 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
@@ -100,54 +100,32 @@ command::
meson arm64-build --cross-file config/arm/arm64_armv8_linux_gcc
ninja -C arm64-build
-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
-
- disabled_drivers = ['bus/dpaa', 'crypto'] # add disabled drivers
- # valid values are directories (optionally with their subdirs)
- # in the drivers directory
-
- 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
+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 -Darm_soc meson
+option::
+
+ meson soc_build -Darm_soc=<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
+ soc = 'generic'
@@ -1,5 +1,7 @@
# Please keep these options sorted alphabetically.
+option('arm_soc', type: 'string', value: '',
+ description: 'Specify if you want to build for a particular aarch64 Arm SoC when building on an aarch64 machine.')
option('armv8_crypto_dir', type: 'string', value: '',
description: 'path to the armv8_crypto library installation directory')
option('disable_drivers', type: 'string', value: '',