Skip to content

Commit

Permalink
net/hns3: fix Arm SVE build with GCC 8.3
Browse files Browse the repository at this point in the history
[ upstream commit 699fa1d ]

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: 8c25b02 ("net/hns3: fix enabling SVE Rx/Tx")
Fixes: 952ebac ("net/hns3: support SVE Rx")

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
Acked-by: Ruifeng Wang <ruifeng.wang@arm.com>
  • Loading branch information
fengchengwen authored and bluca committed Jul 12, 2021
1 parent 09108e8 commit 4b81426
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 2 deletions.
2 changes: 1 addition & 1 deletion drivers/net/hns3/hns3_rxtx.c
Original file line number Diff line number Diff line change
Expand Up @@ -2561,7 +2561,7 @@ hns3_get_default_vec_support(void)
static bool
hns3_check_sve_support(void)
{
#if defined(RTE_ARCH_ARM64) && defined(__ARM_FEATURE_SVE)
#if defined(RTE_HAS_SVE_ACLE)
if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_SVE))
return true;
#endif
Expand Down
20 changes: 19 additions & 1 deletion drivers/net/hns3/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,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

0 comments on commit 4b81426

Please sign in to comment.