Use dictionary lookup instead of iterating over all elements in the
list. Fallback to generic part number if the discovered part number is
unknown.

Signed-off-by: Juraj Linkeš <juraj.lin...@pantheon.tech>
---
 config/arm/meson.build | 85 ++++++++++++++++++++++++------------------
 1 file changed, 48 insertions(+), 37 deletions(-)

diff --git a/config/arm/meson.build b/config/arm/meson.build
index 133a0d7fd..2f89cb2a8 100644
--- a/config/arm/meson.build
+++ b/config/arm/meson.build
@@ -101,31 +101,31 @@ flags_octeontx2_extra = [
 ]
 
 # arm config (implementer 0x41) is the default config
-part_number_config_default = [
-       ['generic', ['-march=armv8-a+crc', '-moutline-atomics']],
-       ['native', ['-march=native']],
-       ['0xd03', ['-mcpu=cortex-a53']],
-       ['0xd04', ['-mcpu=cortex-a35']],
-       ['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+crc+crypto', '-mcpu=neoverse-n1'], 
flags_n1sdp_extra]
-]
-part_number_config_cavium = [
-       ['generic', ['-march=armv8-a+crc+crypto','-mcpu=thunderx']],
-       ['native', ['-march=native']],
-       ['0xa1', ['-mcpu=thunderxt88'], flags_thunderx_extra],
-       ['0xa2', ['-mcpu=thunderxt81'], flags_thunderx_extra],
-       ['0xa3', ['-mcpu=thunderxt83'], flags_thunderx_extra],
-       ['0xaf', ['-march=armv8.1-a+crc+crypto','-mcpu=thunderx2t99'], 
flags_thunderx2_extra],
-       ['0xb2', ['-march=armv8.2-a+crc+crypto+lse','-mcpu=octeontx2'], 
flags_octeontx2_extra]
-]
-part_number_config_emag = [
-       ['generic', ['-march=armv8-a+crc+crypto', '-mtune=emag']],
-       ['native', ['-march=native']]
-]
+part_number_config_default = {
+       'generic': [['-march=armv8-a+crc', '-moutline-atomics']],
+       'native': [['-march=native']],
+       '0xd03': [['-mcpu=cortex-a53']],
+       '0xd04': [['-mcpu=cortex-a35']],
+       '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+crc+crypto', '-mcpu=neoverse-n1'], 
flags_n1sdp_extra]
+}
+part_number_config_cavium = {
+       'generic': [['-march=armv8-a+crc+crypto', '-mcpu=thunderx']],
+       'native': [['-march=native']],
+       '0xa1': [['-mcpu=thunderxt88'], flags_thunderx_extra],
+       '0xa2': [['-mcpu=thunderxt81'], flags_thunderx_extra],
+       '0xa3': [['-mcpu=thunderxt83'], flags_thunderx_extra],
+       '0xaf': [['-march=armv8.1-a+crc+crypto','-mcpu=thunderx2t99'], 
flags_thunderx2_extra],
+       '0xb2': [['-march=armv8.2-a+crc+crypto+lse','-mcpu=octeontx2'], 
flags_octeontx2_extra],
+}
+part_number_config_emag = {
+       'generic': [['-march=armv8-a+crc+crypto', '-mtune=emag']],
+       'native': [['-march=native']]
+}
 
 ## Arm implementer ID (ARM DDI 0487C.a, Section G7.2.106, Page G7-5321)
 implementer_generic = ['Generic armv8', flags_generic, 
part_number_config_default]
@@ -189,22 +189,33 @@ else
        message('Arm implementer: ' + implementer_config[0])
        message('Arm part number: ' + part_number)
 
+       part_number_config = implementer_config[2]
+       if part_number_config.has_key(part_number)
+               # use the specified part_number machine args if found
+               part_number_config = part_number_config[part_number]
+       elif not meson.is_cross_build()
+               # default to generic machine args if part_number is not found
+               # and not forcing native machine args
+               # but don't default in cross-builds; if part_number is specified
+               # incorrectly in a cross-file, it needs to be fixed there
+               part_number_config = part_number_config['generic']
+       else
+               # doing cross build and part number is not in part_number_config
+               error('Cross build part number 0@0 not 
found.'.format(part_number))
+       endif
+
        # use default flags with implementer flags
        dpdk_flags = flags_common_default + implementer_config[1]
+       if part_number_config.length() > 1
+               # add extra flags from the part number
+               dpdk_flags += part_number_config[1]
+       endif
 
+       # apply supported machine args
        machine_args = [] # Clear previous machine args
-       foreach marg: implementer_config[2]
-               if marg[0] == part_number
-                       # apply supported machine args
-                       foreach flag: marg[1]
-                               if cc.has_argument(flag)
-                                       machine_args += flag
-                               endif
-                       endforeach
-                       if marg.length() > 2
-                               # add extra flags for the part
-                               dpdk_flags += marg[2]
-                       endif
+       foreach flag: part_number_config[0]
+               if cc.has_argument(flag)
+                       machine_args += flag
                endif
        endforeach
 
-- 
2.20.1

Reply via email to