From: Chengwen Feng Date: Mon, 28 Jun 2021 02:57:51 +0000 (+0800) Subject: net/hns3: fix Arm SVE build with GCC 8.3 X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=699fa1d40eeabe086d4491a0b4edd7a0a19e6aa7;p=dpdk.git net/hns3: fix Arm SVE build with GCC 8.3 If the target machine has SVE feature (e.g. '-march=armv8.2-a+sve'), and compiler is gcc-8.3, it will fail, the error is arm_sve.h: no such file or directory. The solution: a. If RTE_HAS_SVE_ACLE defined (it means the minimum instruction set support SVE ACLE) then compiles it. b. Else if the compiler support SVE ACLE then compiles it. c. Otherwise don't compile it. Fixes: 8c25b02b082a ("net/hns3: fix enabling SVE Rx/Tx") Fixes: 952ebacce4f2 ("net/hns3: support SVE Rx") Cc: stable@dpdk.org Signed-off-by: Chengwen Feng Acked-by: Ruifeng Wang --- diff --git a/drivers/net/hns3/hns3_rxtx.c b/drivers/net/hns3/hns3_rxtx.c index cb9eccf9fa..a86e105fbc 100644 --- a/drivers/net/hns3/hns3_rxtx.c +++ b/drivers/net/hns3/hns3_rxtx.c @@ -2811,7 +2811,7 @@ hns3_get_default_vec_support(void) static bool hns3_get_sve_support(void) { -#if defined(RTE_ARCH_ARM64) && defined(__ARM_FEATURE_SVE) +#if defined(RTE_HAS_SVE_ACLE) if (rte_vect_get_max_simd_bitwidth() < RTE_VECT_SIMD_256) return false; if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_SVE)) diff --git a/drivers/net/hns3/meson.build b/drivers/net/hns3/meson.build index 53c7df7daf..a99e0dbb74 100644 --- a/drivers/net/hns3/meson.build +++ b/drivers/net/hns3/meson.build @@ -35,7 +35,25 @@ deps += ['hash'] if arch_subdir == 'arm' and dpdk_conf.get('RTE_ARCH_64') sources += files('hns3_rxtx_vec.c') - if cc.get_define('__ARM_FEATURE_SVE', args: machine_args) != '' + + # compile SVE when: + # a. support SVE in minimum instruction set baseline + # b. it's not minimum instruction set, but compiler support + if dpdk_conf.has('RTE_HAS_SVE_ACLE') sources += files('hns3_rxtx_vec_sve.c') + elif cc.has_argument('-march=armv8.2-a+sve') and cc.check_header('arm_sve.h') + cflags += ['-DRTE_HAS_SVE_ACLE=1'] + sve_cflags = [] + foreach flag: cflags + if not (flag.startswith('-march=') or flag.startswith('-mcpu=') or flag.startswith('-mtune=')) + sve_cflags += flag + endif + endforeach + hns3_sve_lib = static_library('hns3_sve_lib', + 'hns3_rxtx_vec_sve.c', + dependencies: [static_rte_ethdev], + include_directories: includes, + c_args: [sve_cflags, '-march=armv8.2-a+sve']) + objs += hns3_sve_lib.extract_objects('hns3_rxtx_vec_sve.c') endif endif