Thread (17 messages) 17 messages, 5 authors, 2021-09-16

Re: [dpdk-dev] [PATCH v3] config/arm: split march cfg into arch and features

From: fengchengwen <hidden>
Date: 2021-07-16 03:42:30

[snip]
quoted
+
+    # 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.
quoted
+        endforeach
+        if candidate_march == ''
+            error('No suitable armv8 march version found.')
+        else
There no need use else, because meson will halt when execute error.
quoted
+            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.
quoted
+            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 ?
quoted
+                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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help