[RFC,v1] config/arm: fix native machine args

Message ID 1612191313-7654-1-git-send-email-juraj.linkes@pantheon.tech (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers
Series [RFC,v1] config/arm: fix native machine args |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS

Commit Message

Juraj Linkeš Feb. 1, 2021, 2:55 p.m. UTC
  There are compiler issues when building with -mcpu=native with popular
compilers, such as GCC-8.4 and clang (which doesn't define
__ARM_FEATURE_ATOMIC). Fix this by always specifying the proper machine
args and never using the native flags.

Fixes: 78ac8eac7e8a ("config/arm: use native machine build arguments")
Cc: juraj.linkes@pantheon.tech

Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
---
 config/arm/meson.build | 10 +---------
 1 file changed, 1 insertion(+), 9 deletions(-)
  

Comments

Thomas Monjalon Feb. 1, 2021, 3:16 p.m. UTC | #1
01/02/2021 15:55, Juraj Linkeš:
> There are compiler issues when building with -mcpu=native with popular
> compilers, such as GCC-8.4 and clang (which doesn't define
> __ARM_FEATURE_ATOMIC).

What are the issues? Maybe worth pasting a log.

> Fix this by always specifying the proper machine
> args and never using the native flags.

The title says "fix" but it seems to be "remove".

[...]
> -native_machine_args = ['-mcpu=native']

This is the culprit?
Could you provide a "Fixes:" line?
  
Juraj Linkeš Feb. 2, 2021, 7:40 a.m. UTC | #2
> -----Original Message-----
> From: Thomas Monjalon <thomas@monjalon.net>
> Sent: Monday, February 1, 2021 4:16 PM
> To: Juraj Linkeš <juraj.linkes@pantheon.tech>
> Cc: bruce.richardson@intel.com; Ruifeng.Wang@arm.com;
> Honnappa.Nagarahalli@arm.com; jerinjacobk@gmail.com;
> ferruh.yigit@intel.com; dev@dpdk.org
> Subject: Re: [RFC PATCH v1] config/arm: fix native machine args
> 
> 01/02/2021 15:55, Juraj Linkeš:
> > There are compiler issues when building with -mcpu=native with popular
> > compilers, such as GCC-8.4 and clang (which doesn't define
> > __ARM_FEATURE_ATOMIC).
> 
> What are the issues? Maybe worth pasting a log.
> 

I can include this in the commit log from GCC-8.4 (the same thing works with GCC-10.2):
In file included from ../lib/librte_eal/arm/include/rte_vect.h:11,
                 from ../lib/librte_net/net_crc_neon.c:10:
../lib/librte_net/net_crc_neon.c: In function ‘crcr32_folding_round’:
/usr/lib/gcc/aarch64-linux-gnu/8/include/arm_neon.h:26094:1: error: inlining failed in call to always_inline ‘vmull_p64’: target specific option mismatch
 vmull_p64 (poly64_t a, poly64_t b)
 ^~~~~~~~~
../lib/librte_net/net_crc_neon.c:50:20: note: called from here
  uint64x2_t tmp1 = vreinterpretq_u64_p128(vmull_p64(
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    vgetq_lane_p64(vreinterpretq_p64_u64(fold), 0),
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    vgetq_lane_p64(vreinterpretq_p64_u64(precomp), 1)));
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

And for clang:
gcc -E -dM -mcpu="native" - < /dev/null | grep __ARM_FEATURE_ATOMICS
#define __ARM_FEATURE_ATOMICS 1 # gcc support
clang-9 -E -dM -mcpu="native" - < /dev/null | grep __ARM_FEATURE_ATOMICS
<no output> # clang no support

> > Fix this by always specifying the proper machine args and never using
> > the native flags.
> 
> The title says "fix" but it seems to be "remove".

Yes. The fix is to remove the usage of native flags and instead always use the part_number flags.

> 
> [...]
> > -native_machine_args = ['-mcpu=native']
> 
> This is the culprit?
> Could you provide a "Fixes:" line?

There already is one:
Fixes: 78ac8eac7e8a ("config/arm: use native machine build arguments")

> 
>
  

Patch

diff --git a/config/arm/meson.build b/config/arm/meson.build
index f207e5a288..f948768578 100644
--- a/config/arm/meson.build
+++ b/config/arm/meson.build
@@ -24,7 +24,6 @@  flags_common = [
 	['RTE_ARCH_ARM64', true],
 	['RTE_CACHE_LINE_SIZE', 128]
 ]
-native_machine_args = ['-mcpu=native']
 
 ## Part numbers are specific to Arm implementers
 # implementer specific aarch64 flags have middle priority
@@ -193,7 +192,6 @@  if dpdk_conf.get('RTE_ARCH_32')
 	machine_args += '-mfpu=neon'
 else
 	# aarch64 build
-	use_native_machine_args = false
 	if not meson.is_cross_build()
 		if machine == 'default'
 			# default build
@@ -213,7 +211,6 @@  else
 			else
 				error('Error when getting Arm Implementer ID and part number.')
 			endif
-			use_native_machine_args = true
 		endif
 	else
 		# cross build
@@ -249,12 +246,7 @@  else
 
 	# apply supported machine args
 	machine_args = [] # Clear previous machine args
-	if use_native_machine_args
-		candidate_machine_args = native_machine_args
-	else
-		candidate_machine_args = part_number_config['machine_args']
-	endif
-	foreach flag: candidate_machine_args
+	foreach flag: part_number_config['machine_args']
 		if cc.has_argument(flag)
 			machine_args += flag
 		endif