[snip]
>> + >> + # probe supported marchs and their features >> + candidate_march = '' >> + if part_number_config.has_key('march') >> + supported_marchs = ['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 >> + if supported_march == part_number_config['march'] >> + # start checking from this version downwards >> + check_compiler_support = true >> + endif >> + if (check_compiler_support and >> + cc.has_argument('-march=' + supported_march)) >> + candidate_march = supported_march >> + # highest supported march version found >> + break >> + endif I think breaking it down into two steps is more intuitive. step1: find the march version which target config. If not find then error exit. step2: start checking from step1's version. >> + endforeach >> + if candidate_march == '' >> + error('No suitable armv8 march version found.') >> + else There no need use else, because meson will halt when execute error. >> + 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)) >> + endif >> + candidate_march = '-march=' + candidate_march >> endif >> - endforeach >> + if part_number_config.has_key('march_features') >> + feature_unsupported = false >> + foreach feature: part_number_config['march_features'] >> + if cc.has_argument('+'.join([candidate_march, feature])) >> + candidate_march = '+'.join([candidate_march, feature]) >> + else >> + feature_unsupported = true >> + endif >> + endforeach >> + if feature_unsupported >> + warning('Configuration march features are ' + >> + '@0@, but the compiler supports only @1@.' >> + .format(part_number_config['march_features'], >> + candidate_march)) the march_feature is some like 'crc sve', but candidate_march is '-march=armv8.2a+crc'. These two displays may be a little weird because later one has -march=armv8.2 prefix. I think it's better move warning to place which feature_unsupported was set true. >> + endif >> + endif >> + machine_args += candidate_march >> + endif >> + >> + # apply supported compiler options >> + if part_number_config.has_key('compiler_options') >> + foreach flag: part_number_config['compiler_options'] >> + if cc.has_argument(flag) Is it possible that -mcpu= conflicts with -march ? >> + machine_args += flag >> + else >> + warning('Configuration compiler option ' + >> + '@0@ isn\'t supported.'.format(flag)) >> + endif >> + endforeach >> + endif >> >> # apply flags >> foreach flag: dpdk_flags >> -- >> 2.20.1 >