config/arm: isolate generic build
authorJuraj Linkeš <juraj.linkes@pantheon.tech>
Fri, 15 Jan 2021 13:26:04 +0000 (14:26 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Mon, 18 Jan 2021 21:41:05 +0000 (22:41 +0100)
Use generic configuration for the only build where it makes sense - the
generic build. For other builds, if we don't know either of implementer
ID or part number, the build is not supported.
Add part numbers to cross files where fallback to generic configuration
is assumed.

Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Acked-by: Jerin Jacob <jerinj@marvell.com>
Tested-by: Jerin Jacob <jerinj@marvell.com>
Tested-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
Tested-by: Vimal Chungath <vcchunga@amazon.com>
Tested-by: Dharmik Thakkar <dharmik.thakkar@arm.com>
config/arm/arm64_armada_linux_gcc
config/arm/arm64_dpaa_linux_gcc
config/arm/arm64_emag_linux_gcc
config/arm/arm64_thunderx_linux_gcc [deleted file]
config/arm/arm64_thunderxt88_linux_gcc [new file with mode: 0644]
config/arm/meson.build
doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst

index 52c5f44..143a3c9 100644 (file)
@@ -15,3 +15,4 @@ endian = 'little'
 
 [properties]
 implementer_id = '0x56'
+part_number = '0xd08'
index 573ae7e..c3c8a1e 100644 (file)
@@ -15,3 +15,4 @@ endian = 'little'
 
 [properties]
 implementer_id = 'dpaa'
+part_number = '0xd08'
index 24f3d53..c675954 100644 (file)
@@ -14,3 +14,4 @@ endian = 'little'
 
 [properties]
 implementer_id = '0x50'
+part_number = '0x0'
diff --git a/config/arm/arm64_thunderx_linux_gcc b/config/arm/arm64_thunderx_linux_gcc
deleted file mode 100644 (file)
index 6707644..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-[binaries]
-c = 'aarch64-linux-gnu-gcc'
-cpp = 'aarch64-linux-gnu-cpp'
-ar = 'aarch64-linux-gnu-gcc-ar'
-strip = 'aarch64-linux-gnu-strip'
-pkgconfig = 'aarch64-linux-gnu-pkg-config'
-pcap-config = ''
-
-[host_machine]
-system = 'linux'
-cpu_family = 'aarch64'
-cpu = 'armv8-a'
-endian = 'little'
-
-[properties]
-implementer_id = '0x43'
diff --git a/config/arm/arm64_thunderxt88_linux_gcc b/config/arm/arm64_thunderxt88_linux_gcc
new file mode 100644 (file)
index 0000000..7589662
--- /dev/null
@@ -0,0 +1,17 @@
+[binaries]
+c = 'aarch64-linux-gnu-gcc'
+cpp = 'aarch64-linux-gnu-cpp'
+ar = 'aarch64-linux-gnu-gcc-ar'
+strip = 'aarch64-linux-gnu-strip'
+pkgconfig = 'aarch64-linux-gnu-pkg-config'
+pcap-config = ''
+
+[host_machine]
+system = 'linux'
+cpu_family = 'aarch64'
+cpu = 'armv8-a'
+endian = 'little'
+
+[properties]
+implementer_id = '0x43'
+part_number = '0xa1'
index 39cf98c..be92630 100644 (file)
@@ -46,8 +46,6 @@ implementer_generic = {
 }
 
 part_number_config_arm = {
-       'generic': {'machine_args':  ['-march=armv8-a+crc',
-                                     '-moutline-atomics']},
        'native': {'machine_args':  ['-march=native']},
        '0xd03': {'machine_args':  ['-mcpu=cortex-a53']},
        '0xd04': {'machine_args':  ['-mcpu=cortex-a35']},
@@ -103,8 +101,6 @@ implementer_cavium = {
                ['RTE_MAX_NUMA_NODES', 2]
        ],
        'part_number_config': {
-               'generic': {'machine_args': ['-march=armv8-a+crc+crypto',
-                                            '-mcpu=thunderx']},
                'native': {'machine_args': ['-march=native']},
                '0xa1': {
                        'machine_args': ['-mcpu=thunderxt88'],
@@ -154,8 +150,8 @@ implementer_ampere = {
                ['RTE_MAX_NUMA_NODES', 1]
        ],
        'part_number_config': {
-               'generic': {'machine_args':  ['-march=armv8-a+crc+crypto',
-                                             '-mtune=emag']},
+               '0x0': {'machine_args':  ['-march=armv8-a+crc+crypto',
+                                         '-mtune=emag']},
                'native': {'machine_args':  ['-march=native']}
        }
 }
@@ -205,10 +201,9 @@ if dpdk_conf.get('RTE_ARCH_32')
        machine_args += '-mfpu=neon'
 else
        # aarch64 build
-       implementer_id = 'generic'
        if machine == 'default' and not meson.is_cross_build()
                # default build
-               implementer_config = implementer['generic']
+               implementer_id = 'generic'
                part_number = 'generic'
        elif not meson.is_cross_build()
                # native build
@@ -221,21 +216,24 @@ else
                        cmd_output = cmd.stdout().to_lower().strip().split(' ')
                        implementer_id = cmd_output[0]
                        part_number = cmd_output[3]
-               endif
-               # Set to generic if variable is not found
-               implementer_config = implementers.get(implementer_id, ['generic'])
-               if implementer_config[0] == 'generic'
-                       implementer_config = implementer['generic']
-                       part_number = 'generic'
+               else
+                       error('Error when getting Arm Implementer ID and part number.')
                endif
                if arm_force_native_march == true
                        part_number = 'native'
                endif
        else
                # cross build
-               implementer_id = meson.get_cross_property('implementer_id', 'generic')
-               part_number = meson.get_cross_property('part_number', 'generic')
-               implementer_config = implementers.get(implementer_id)
+               implementer_id = meson.get_cross_property('implementer_id')
+               part_number = meson.get_cross_property('part_number')
+       endif
+
+       if implementers.has_key(implementer_id)
+               implementer_config = implementers[implementer_id]
+       else
+               error('Unsupported Arm implementer: @0@. '.format(implementer_id) +
+                     'Please add support for it or use the generic ' +
+                     '(-Dmachine=generic) build.')
        endif
 
        message('Arm implementer: ' + implementer_config['description'])
@@ -245,15 +243,12 @@ else
        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))
+               # unknown part number
+               error('Unsupported part number @0@ of implementer @1@. '
+                     .format(part_number, implementer_id) +
+                     'Please add support for it or use the generic ' +
+                     '(-Dmachine=generic) build.')
        endif
 
        # use default flags with implementer flags
index 9725988..6a883b0 100644 (file)
@@ -114,8 +114,10 @@ you may use various combinations of implementer/part number::
       '0x56':    Marvell ARMADA
       'dpaa':    NXP DPAA
 
-   Supported part_numbers for generic, 0x41, 0x56, dpaa:
-      'generic': valid for all armv8-a architectures (default value)
+   Supported part_numbers for generic:
+      'generic': valid for all armv8-a architectures (unoptimized portable build)
+
+   Supported part_numbers for 0x41, 0x56, dpaa:
       '0xd03':   cortex-a53
       '0xd04':   cortex-a35
       '0xd09':   cortex-a73
@@ -124,7 +126,6 @@ you may use various combinations of implementer/part number::
       '0xd0c':   neoverse-n1
 
    Supported part_numbers for 0x43:
-      'generic': valid for all Cavium builds
       '0xa1':    thunderxt88
       '0xa2':    thunderxt81
       '0xa3':    thunderxt83
@@ -132,4 +133,4 @@ you may use various combinations of implementer/part number::
       '0xb2':    octeontx2
 
    Supported part_numbers for 0x50:
-      'generic': valid for all Ampere builds
+      '0x0':     emag