[v7,1/3] config/arm: avoid mcpu and march conflicts
Checks
Commit Message
From: Pavan Nikhilesh <pbhagavatula@marvell.com>
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, discard part number march when
mcpu is available and is supported by the compiler.
Example:
march = armv9-a
mcpu = neoverse-n2
mcpu supported, march supported
machine_args = ['-mcpu=neoverse-n2']
mcpu supported, march not supported
machine_args = ['-mcpu=neoverse-n2']
mcpu not supported, march supported
machine_args = ['-march=armv9-a']
mcpu not supported, march not supported
machine_args = ['-march=armv8.6-a']
Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
Reviewed-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
---
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.
v4 Changes:
- Discard march when mcpu is supported.
v5 Changes:
- Consolidate mcpu and march checks. (Juraj Linkes)
- Fix unintentionally skipping fallback march (Juraj Linkes)
v6 Changes:
- Remove compiler support check when march is forced. (Juraj Linkes)
- Simplify fallback march configuration.
v7 Changes:
- Rebase on master.
config/arm/meson.build | 119 +++++++++++++++++++++++++----------------
1 file changed, 72 insertions(+), 47 deletions(-)
--
2.25.1
Comments
Recheck-request: iol-unit-amd64-testing
> -----Original Message-----
> From: pbhagavatula@marvell.com <pbhagavatula@marvell.com>
> Sent: Wednesday, March 6, 2024 9:20 PM
> To: Jerin Jacob <jerinj@marvell.com>; juraj.linkes@pantheon.tech;
> nd@arm.com; wathsala.vithanage@arm.com; Ruifeng Wang
> <ruifeng.wang@arm.com>; Bruce Richardson <bruce.richardson@intel.com>
> Cc: dev@dpdk.org; Pavan Nikhilesh Bhagavatula
> <pbhagavatula@marvell.com>
> Subject: [PATCH v7 1/3] config/arm: avoid mcpu and march conflicts
>
> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>
> 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, discard part number march when
> mcpu is available and is supported by the compiler.
>
> Example:
> march = armv9-a
> mcpu = neoverse-n2
>
> mcpu supported, march supported
> machine_args = ['-mcpu=neoverse-n2']
>
> mcpu supported, march not supported
> machine_args = ['-mcpu=neoverse-n2']
>
> mcpu not supported, march supported
> machine_args = ['-march=armv9-a']
>
> mcpu not supported, march not supported
> machine_args = ['-march=armv8.6-a']
>
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> Reviewed-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
> ---
> 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.
> v4 Changes:
> - Discard march when mcpu is supported.
> v5 Changes:
> - Consolidate mcpu and march checks. (Juraj Linkes)
> - Fix unintentionally skipping fallback march (Juraj Linkes)
> v6 Changes:
> - Remove compiler support check when march is forced. (Juraj Linkes)
> - Simplify fallback march configuration.
> v7 Changes:
> - Rebase on master.
>
> config/arm/meson.build | 119 +++++++++++++++++++++++++---------------
> -
> 1 file changed, 72 insertions(+), 47 deletions(-)
>
> diff --git a/config/arm/meson.build b/config/arm/meson.build
> index dc31fe3d78..472a30f83a 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],
> @@ -102,8 +103,9 @@ part_number_config_arm = {
> ]
> },
> '0xd4f': {
> + 'march' : 'armv9-a',
> + 'mcpu' : 'neoverse-v2',
> 'march_features': ['sve2'],
> - 'compiler_options': ['-mcpu=neoverse-v2'],
> 'flags': [
> ['RTE_MACHINE', '"neoverse-v2"'],
> ['RTE_ARM_FEATURE_ATOMICS', true],
> @@ -137,21 +139,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', 'crypto'],
> + '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],
> @@ -163,7 +167,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],
> @@ -186,7 +190,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],
> @@ -196,7 +200,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],
> @@ -216,7 +220,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],
> @@ -258,14 +262,14 @@ implementer_ionic = {
> ],
> 'part_number_config': {
> '0xc1': {
> - 'compiler_options': ['-mcpu=cortex-a72'],
> + 'mcpu' : 'cortex-a72',
> 'flags': [
> ['RTE_MAX_LCORE', 4],
> ['RTE_LIBRTE_IONIC_PMD_BARRIER_ERRATA', true],
> ]
> },
> '0xc2': {
> - 'compiler_options': ['-mcpu=cortex-a72'],
> + 'mcpu' : 'cortex-a72',
> 'flags': [
> ['RTE_MAX_LCORE', 16],
> ['RTE_LIBRTE_IONIC_PMD_BARRIER_ERRATA', true],
> @@ -782,13 +786,35 @@ if update_flags
>
> machine_args = [] # Clear previous machine args
>
> - # probe supported archs and their features
> + 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']
> + endif
> +
> + candidate_mcpu = ''
> candidate_march = ''
> - if part_number_config.has_key('march')
> +
> + if (part_number_config.has_key('mcpu') and
> + cc.has_argument('-mcpu=' + part_number_config['mcpu']))
> + candidate_mcpu = '-mcpu=' + part_number_config['mcpu']
> + foreach feature: march_features
> + if cc.has_argument('+'.join([candidate_mcpu, feature]))
> + candidate_mcpu = '+'.join([candidate_mcpu, feature])
> + else
> + warning('The compiler does not support feature @0@'
> + .format(feature))
> + endif
> + endforeach
> + machine_args += candidate_mcpu
> + elif part_number_config.has_key('march')
> + # probe supported archs and their features
> if part_number_config.get('force_march', false)
> candidate_march = part_number_config['march']
> else
> - supported_marchs = ['armv8.6-a', 'armv8.5-a', 'armv8.4-a', 'armv8.3-
> a',
> + supported_marchs = ['armv9-a', 'armv8.6-a', 'armv8.5-a', 'armv8.4-a',
> 'armv8.3-a',
> 'armv8.2-a', 'armv8.1-a', 'armv8-a']
> check_compiler_support = false
> foreach supported_march: supported_marchs
> @@ -804,32 +830,31 @@ 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 != ''
> + candidate_march = '-march=' + candidate_march
> + 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
> - 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
> +
> + if candidate_mcpu == '' and candidate_march == ''
> + error('No suitable ARM march/mcpu version found.')
> endif
>
> # apply supported compiler options
> --
> 2.25.1
@@ -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],
@@ -102,8 +103,9 @@ part_number_config_arm = {
]
},
'0xd4f': {
+ 'march' : 'armv9-a',
+ 'mcpu' : 'neoverse-v2',
'march_features': ['sve2'],
- 'compiler_options': ['-mcpu=neoverse-v2'],
'flags': [
['RTE_MACHINE', '"neoverse-v2"'],
['RTE_ARM_FEATURE_ATOMICS', true],
@@ -137,21 +139,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', 'crypto'],
+ '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],
@@ -163,7 +167,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],
@@ -186,7 +190,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],
@@ -196,7 +200,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],
@@ -216,7 +220,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],
@@ -258,14 +262,14 @@ implementer_ionic = {
],
'part_number_config': {
'0xc1': {
- 'compiler_options': ['-mcpu=cortex-a72'],
+ 'mcpu' : 'cortex-a72',
'flags': [
['RTE_MAX_LCORE', 4],
['RTE_LIBRTE_IONIC_PMD_BARRIER_ERRATA', true],
]
},
'0xc2': {
- 'compiler_options': ['-mcpu=cortex-a72'],
+ 'mcpu' : 'cortex-a72',
'flags': [
['RTE_MAX_LCORE', 16],
['RTE_LIBRTE_IONIC_PMD_BARRIER_ERRATA', true],
@@ -782,13 +786,35 @@ if update_flags
machine_args = [] # Clear previous machine args
- # probe supported archs and their features
+ 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']
+ endif
+
+ candidate_mcpu = ''
candidate_march = ''
- if part_number_config.has_key('march')
+
+ if (part_number_config.has_key('mcpu') and
+ cc.has_argument('-mcpu=' + part_number_config['mcpu']))
+ candidate_mcpu = '-mcpu=' + part_number_config['mcpu']
+ foreach feature: march_features
+ if cc.has_argument('+'.join([candidate_mcpu, feature]))
+ candidate_mcpu = '+'.join([candidate_mcpu, feature])
+ else
+ warning('The compiler does not support feature @0@'
+ .format(feature))
+ endif
+ endforeach
+ machine_args += candidate_mcpu
+ elif part_number_config.has_key('march')
+ # probe supported archs and their features
if part_number_config.get('force_march', false)
candidate_march = part_number_config['march']
else
- supported_marchs = ['armv8.6-a', 'armv8.5-a', 'armv8.4-a', 'armv8.3-a',
+ supported_marchs = ['armv9-a', 'armv8.6-a', 'armv8.5-a', 'armv8.4-a', 'armv8.3-a',
'armv8.2-a', 'armv8.1-a', 'armv8-a']
check_compiler_support = false
foreach supported_march: supported_marchs
@@ -804,32 +830,31 @@ 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 != ''
+ candidate_march = '-march=' + candidate_march
+ 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
- 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
+
+ if candidate_mcpu == '' and candidate_march == ''
+ error('No suitable ARM march/mcpu version found.')
endif
# apply supported compiler options