From 5aa9189d745ff0c3de925992ada88a277957215e Mon Sep 17 00:00:00 2001 From: Chengwen Feng Date: Mon, 28 Jun 2021 10:57:50 +0800 Subject: [PATCH] config/arm: fix SVE build with GCC 8.3 If the target machine has SVE feature (e.g. "-march=armv8.2-a+sve'), and the compiler is gcc-8.3, it will produce this error: In file included from lib/eal/common/eal_common_options.c:38: lib/eal/arm/include/rte_vect.h:13:10: fatal error: arm_sve.h: No such file or directory #include ^~~~~~~~~~~ The root cause is that gcc-8.3 supports SVE (the macro __ARM_FEATURE_SVE was 1), but it doesn't support SVE ACLE [1]. The solution: a) Detect compiler whether support SVE ACLE, if support then define RTE_HAS_SVE_ACLE macro. b) Use the RTE_HAS_SVE_ACLE macro to include SVE header file. [1] ACLE: Arm C Language Extensions, the SVE ACLE header file is , user should include it when writing ACLE SVE code. Fixes: 67b68824a82d ("lpm/arm: support SVE") Cc: stable@dpdk.org Signed-off-by: Chengwen Feng Acked-by: Ruifeng Wang Signed-off-by: Thomas Monjalon --- config/arm/meson.build | 3 +++ lib/eal/arm/include/rte_vect.h | 2 +- lib/lpm/rte_lpm.h | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/config/arm/meson.build b/config/arm/meson.build index 34ad95c2e6..14987c634a 100644 --- a/config/arm/meson.build +++ b/config/arm/meson.build @@ -524,6 +524,9 @@ endif if cc.get_define('__ARM_FEATURE_SVE', args: machine_args) != '' compile_time_cpuflags += ['RTE_CPUFLAG_SVE'] + if (cc.check_header('arm_sve.h')) + dpdk_conf.set('RTE_HAS_SVE_ACLE', 1) + endif endif if cc.get_define('__ARM_FEATURE_CRC32', args: machine_args) != '' diff --git a/lib/eal/arm/include/rte_vect.h b/lib/eal/arm/include/rte_vect.h index 093e9122ae..4b705bac5f 100644 --- a/lib/eal/arm/include/rte_vect.h +++ b/lib/eal/arm/include/rte_vect.h @@ -9,7 +9,7 @@ #include "generic/rte_vect.h" #include "rte_debug.h" #include "arm_neon.h" -#ifdef __ARM_FEATURE_SVE +#ifdef RTE_HAS_SVE_ACLE #include #endif diff --git a/lib/lpm/rte_lpm.h b/lib/lpm/rte_lpm.h index 28b57683bb..5eb14c1748 100644 --- a/lib/lpm/rte_lpm.h +++ b/lib/lpm/rte_lpm.h @@ -402,7 +402,7 @@ rte_lpm_lookupx4(const struct rte_lpm *lpm, xmm_t ip, uint32_t hop[4], uint32_t defv); #if defined(RTE_ARCH_ARM) -#ifdef __ARM_FEATURE_SVE +#ifdef RTE_HAS_SVE_ACLE #include "rte_lpm_sve.h" #else #include "rte_lpm_neon.h" -- 2.20.1