[v7,1/2] config/arm: select most suitable -march for kunpeng soc
Checks
Commit Message
Currently, the soc_kunpeng930 declares '-march=armv8.2-a+crypto+sve',
but some compiler doesn't recognize the march because it doesn't
support sve.
To solve this bug we use the following scheme:
1. Define 'march_base' tuple which defines support march, it should
arrange from lower to higher.
e.g. 'march_base': ['-march=armv8.1-a', '-march=armv8.2-a']
2. Define 'march_feature' tuple which defines support feature.
e.g. 'march_feature': ['crypto', 'sve']
Note: If user defined 'march_feature', it also needs to define a valid
'march_base' because 'march_feature' depends on 'march_base' when
checking validity.
3. Select the most suitable march+feature combination based on
'march_base' and 'march_feature' tuples.
4. Use the selected march+feature combination as the default
machine_args.
Fixes: 7cf32a22b240 ("config/arm: add Hisilicon kunpeng")
Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
config/arm/meson.build | 31 +++++++++++++++++++++++++++++--
1 file changed, 29 insertions(+), 2 deletions(-)
@@ -158,7 +158,9 @@ implementer_hisilicon = {
]
},
'0xd02': {
- 'machine_args': ['-march=armv8.2-a+crypto+sve'],
+ 'march_base': ['-march=armv8.2-a'],
+ 'march_feature': ['crypto', 'sve'],
+ 'machine_args': [],
'flags': [
['RTE_MACHINE', '"Kunpeng 930"'],
['RTE_ARM_FEATURE_ATOMICS', true],
@@ -449,8 +451,33 @@ else
# add/overwrite flags in the proper order
dpdk_flags = flags_common + implementer_config['flags'] + part_number_config.get('flags', []) + soc_flags
+ # select the most suitable march+feature combination
+ machine_march = []
+ if part_number_config.has_key('march_base')
+ tmp_machine_march = ''
+ march_valid = false
+ foreach march: part_number_config['march_base']
+ if cc.has_argument(march)
+ tmp_machine_march = march # Set the higher supported march as possible
+ march_valid = true
+ endif
+ endforeach
+ # select feature only when march valid
+ if march_valid and part_number_config.has_key('march_feature')
+ foreach feature: part_number_config['march_feature']
+ tmp_feature = tmp_machine_march + '+' + feature
+ if cc.has_argument(tmp_feature)
+ tmp_machine_march = tmp_feature # Set the more supported feature as possible
+ endif
+ endforeach
+ endif
+ if march_valid
+ machine_march = [tmp_machine_march]
+ endif
+ endif
+
# apply supported machine args
- machine_args = [] # Clear previous machine args
+ machine_args = machine_march # Init with machine march which set above
foreach flag: part_number_config['machine_args']
if cc.has_argument(flag)
machine_args += flag