[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
> 

Reply via email to