<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.lin...@pantheon.tech> Reviewed-by: Honnappa Nagarahalli <honnappa.nagaraha...@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