Hi Pavan, > The compiler options march and mtune are a subset of mcpu and will lead to > conflicts if improper march is chosen for a given mcpu. > To avoid conflicts, force part number march when mcpu is available and is > supported by the compiler.
Why would one force the march specified in the part number when mcpu for that part number is also available and supported by the compiler? > > Example: > march = armv9-a > mcpu = neoverse-n2 > > mcpu supported, march supported > machine_args = ['-mcpu=neoverse-n2', '-march=armv9-a'] -march restricts the compiler to baseline architecture of the -mcpu. For instance, Neoverse-n1's baseline architecture is armv8.2-a, but it has some extensions from armv8.3-a, armv8.4-a, and armv8.5-a. By setting -march to armv8.2-a the compiler will strictly omit extensions from 8.3, 8.4 and 8.5 resulting in a suboptimal outcome. > > mcpu supported, march not supported > machine_args = ['-mcpu=neoverse-n2'] This will result in the best outcome. > > mcpu not supported, march supported > machine_args = ['-march=armv9-a'] This too may result in a suboptimal outcome as optimization space is limited to the given march (not using extensions from later architectures when available). > > mcpu not supported, march not supported > machine_args = ['-march=armv8.6-a'] Compiler knows nothing about the target CPU or the architecture. I think it's better to exit the build process with an error. > > Signed-off-by: Pavan Nikhilesh <pbhagavat...@marvell.com> > --- > v2 Changes: > - Cleanup march inconsistencies. (Juraj Linkes) > - Unify fallback march selection. (Juraj Linkes) > - Tag along ARM WFE patch. > v3 Changes: > - Fix missing 'fallback_march' key check. > > config/arm/meson.build | 108 +++++++++++++++++++++++++--------------- > - > 1 file changed, 66 insertions(+), 42 deletions(-) > > diff --git a/config/arm/meson.build b/config/arm/meson.build index > 36f21d22599a..ba859bd060b5 100644 > --- a/config/arm/meson.build > +++ b/config/arm/meson.build > @@ -58,18 +58,18 @@ implementer_generic = { } > > part_number_config_arm = { > - '0xd03': {'compiler_options': ['-mcpu=cortex-a53']}, > - '0xd04': {'compiler_options': ['-mcpu=cortex-a35']}, > - '0xd05': {'compiler_options': ['-mcpu=cortex-a55']}, > - '0xd07': {'compiler_options': ['-mcpu=cortex-a57']}, > - '0xd08': {'compiler_options': ['-mcpu=cortex-a72']}, > - '0xd09': {'compiler_options': ['-mcpu=cortex-a73']}, > - '0xd0a': {'compiler_options': ['-mcpu=cortex-a75']}, > - '0xd0b': {'compiler_options': ['-mcpu=cortex-a76']}, > + '0xd03': {'mcpu': 'cortex-a53'}, > + '0xd04': {'mcpu': 'cortex-a35'}, > + '0xd05': {'mcpu': 'cortex-a55'}, > + '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', > 'march_features': ['crypto', 'rcpc'], > - 'compiler_options': ['-mcpu=neoverse-n1'], > + 'mcpu': 'neoverse-n1', > 'flags': [ > ['RTE_MACHINE', '"neoverse-n1"'], > ['RTE_ARM_FEATURE_ATOMICS', true], @@ -81,7 +81,7 @@ > part_number_config_arm = { > '0xd40': { > 'march': 'armv8.4-a', > 'march_features': ['sve'], > - 'compiler_options': ['-mcpu=neoverse-v1'], > + 'mcpu': 'neoverse-v1', > 'flags': [ > ['RTE_MACHINE', '"neoverse-v1"'], > ['RTE_ARM_FEATURE_ATOMICS', true], @@ -92,8 +92,9 @@ > part_number_config_arm = { > 'march': 'armv8.4-a', > }, > '0xd49': { > + 'march': 'armv9-a', > 'march_features': ['sve2'], > - 'compiler_options': ['-mcpu=neoverse-n2'], > + 'mcpu': 'neoverse-n2', > 'flags': [ > ['RTE_MACHINE', '"neoverse-n2"'], > ['RTE_ARM_FEATURE_ATOMICS', true], @@ -127,21 +128,23 @@ > implementer_cavium = { > ], > 'part_number_config': { > '0xa1': { > - 'compiler_options': ['-mcpu=thunderxt88'], > + 'mcpu': 'thunderxt88', > 'flags': flags_part_number_thunderx > }, > '0xa2': { > - 'compiler_options': ['-mcpu=thunderxt81'], > + 'mcpu': 'thunderxt81', > 'flags': flags_part_number_thunderx > }, > '0xa3': { > - 'compiler_options': ['-march=armv8-a+crc', '-mcpu=thunderxt83'], > + 'march': 'armv8-a', > + 'march_features': ['crc'], > + 'mcpu': 'thunderxt83', > 'flags': flags_part_number_thunderx > }, > '0xaf': { > 'march': 'armv8.1-a', > 'march_features': ['crc', 'crypto'], > - 'compiler_options': ['-mcpu=thunderx2t99'], > + 'mcpu': 'thunderx2t99', > 'flags': [ > ['RTE_MACHINE', '"thunderx2"'], > ['RTE_ARM_FEATURE_ATOMICS', true], @@ -153,7 +156,7 @@ > implementer_cavium = { > '0xb2': { > 'march': 'armv8.2-a', > 'march_features': ['crc', 'crypto', 'lse'], > - 'compiler_options': ['-mcpu=octeontx2'], > + 'mcpu': 'octeontx2', > 'flags': [ > ['RTE_MACHINE', '"cn9k"'], > ['RTE_ARM_FEATURE_ATOMICS', true], @@ -176,7 +179,7 @@ > implementer_ampere = { > '0x0': { > 'march': 'armv8-a', > 'march_features': ['crc', 'crypto'], > - 'compiler_options': ['-mtune=emag'], > + 'mcpu': 'emag', > 'flags': [ > ['RTE_MACHINE', '"eMAG"'], > ['RTE_MAX_LCORE', 32], > @@ -186,7 +189,7 @@ implementer_ampere = { > '0xac3': { > 'march': 'armv8.6-a', > 'march_features': ['crc', 'crypto'], > - 'compiler_options': ['-mcpu=ampere1'], > + 'mcpu': 'ampere1', > 'flags': [ > ['RTE_MACHINE', '"AmpereOne"'], > ['RTE_MAX_LCORE', 320], @@ -206,7 +209,7 @@ > implementer_hisilicon = { > '0xd01': { > 'march': 'armv8.2-a', > 'march_features': ['crypto'], > - 'compiler_options': ['-mtune=tsv110'], > + 'mcpu': 'tsv110', > 'flags': [ > ['RTE_MACHINE', '"Kunpeng 920"'], > ['RTE_ARM_FEATURE_ATOMICS', true], @@ -695,11 +698,21 @@ if > update_flags > > machine_args = [] # Clear previous machine args > > + candidate_mcpu = '' > + if part_number_config.has_key('mcpu') > + mcpu = part_number_config['mcpu'] > + if (cc.has_argument('-mcpu=' + mcpu)) > + candidate_mcpu = mcpu > + endif > + endif > + > # probe supported archs and their features > candidate_march = '' > if part_number_config.has_key('march') > - if part_number_config.get('force_march', false) > - candidate_march = part_number_config['march'] > + if part_number_config.get('force_march', false) or candidate_mcpu != > '' > + if cc.has_argument('-march=' + part_number_config['march']) > + candidate_march = part_number_config['march'] > + endif > else > supported_marchs = ['armv8.6-a', 'armv8.5-a', 'armv8.4-a', > 'armv8.3- > a', > 'armv8.2-a', 'armv8.1-a', 'armv8-a'] @@ > -717,32 +730,43 > @@ if update_flags > endif > endforeach > endif > - if candidate_march == '' > - error('No suitable armv8 march version found.') > - endif > + > if candidate_march != part_number_config['march'] > - warning('Configuration march version is ' + > - '@0@, but the compiler supports only @1@.' > - .format(part_number_config['march'], candidate_march)) > + warning('Configuration march version is @0@, not supported.' > + .format(part_number_config['march'])) > + if candidate_march != '' > + warning('Using march version @0@.'.format(candidate_march)) > + endif > endif > - candidate_march = '-march=' + candidate_march > > - march_features = [] > - if part_number_config.has_key('march_features') > - march_features += part_number_config['march_features'] > - endif > - if soc_config.has_key('extra_march_features') > - march_features += soc_config['extra_march_features'] > + if candidate_march == '' and candidate_mcpu == '' > + error('No suitable ARM march/mcpu version found.') > endif > - foreach feature: march_features > - if cc.has_argument('+'.join([candidate_march, feature])) > - candidate_march = '+'.join([candidate_march, feature]) > - else > - warning('The compiler does not support feature @0@' > - .format(feature)) > + > + if candidate_march != '' > + candidate_march = '-march=' + candidate_march > + march_features = [] > + if part_number_config.has_key('march_features') > + march_features += part_number_config['march_features'] > endif > - endforeach > - machine_args += candidate_march > + if soc_config.has_key('extra_march_features') > + march_features += soc_config['extra_march_features'] > + endif > + foreach feature: march_features > + if cc.has_argument('+'.join([candidate_march, feature])) > + candidate_march = '+'.join([candidate_march, feature]) > + else > + warning('The compiler does not support feature @0@' > + .format(feature)) > + endif > + endforeach > + machine_args += candidate_march > + endif > + endif > + > + if candidate_mcpu != '' > + candidate_mcpu = '-mcpu=' + candidate_mcpu > + machine_args += candidate_mcpu > endif > > # apply supported compiler options > -- > 2.43.0