Skip to content

Commit 5d6fde5

Browse files
authored
Merge pull request #3875 from martin-frbg/issue3874
Make SVE-enabled ARM64 targets in DYNAMIC_ARCH builds depend on a relatively recent compiler
2 parents 5a9cd87 + d4868ba commit 5d6fde5

4 files changed

Lines changed: 38 additions & 5 deletions

File tree

Makefile.system

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -284,8 +284,10 @@ GETARCH_FLAGS += -DHAVE_GAS=$(HAVE_GAS)
284284
# Generating Makefile.conf and config.h
285285
DUMMY := $(shell $(MAKE) -C $(TOPDIR) -f Makefile.prebuild CC="$(CC)" FC="$(FC)" HOSTCC="$(HOSTCC)" HOST_CFLAGS="$(GETARCH_FLAGS)" CFLAGS="$(CFLAGS)" BINARY=$(BINARY) USE_OPENMP=$(USE_OPENMP) DYNAMIC_ARCH=$(DYNAMIC_ARCH) TARGET_CORE=$(TARGET_CORE) ONLY_CBLAS=$(ONLY_CBLAS) TARGET=$(TARGET) all)
286286

287+
endif
288+
287289
ifndef TARGET_CORE
288-
include $(TOPDIR)/Makefile.conf
290+
-include $(TOPDIR)/Makefile.conf
289291
else
290292
HAVE_NEON=
291293
HAVE_VFP=
@@ -306,7 +308,6 @@ HAVE_FMA3=
306308
include $(TOPDIR)/Makefile_kernel.conf
307309
endif
308310

309-
endif
310311

311312
ifndef NUM_PARALLEL
312313
NUM_PARALLEL = 1
@@ -664,8 +665,10 @@ DYNAMIC_CORE += CORTEXA57
664665
DYNAMIC_CORE += CORTEXA72
665666
DYNAMIC_CORE += CORTEXA73
666667
DYNAMIC_CORE += NEOVERSEN1
668+
ifneq ($(NO_SVE), 1)
667669
DYNAMIC_CORE += NEOVERSEV1
668670
DYNAMIC_CORE += NEOVERSEN2
671+
endif
669672
DYNAMIC_CORE += CORTEXA55
670673
DYNAMIC_CORE += FALKOR
671674
DYNAMIC_CORE += THUNDERX
@@ -1382,6 +1385,10 @@ ifeq ($(NO_AVX512), 1)
13821385
CCOMMON_OPT += -DNO_AVX512
13831386
endif
13841387

1388+
ifeq ($(NO_SVE), 1)
1389+
CCOMMON_OPT += -DNO_SVE
1390+
endif
1391+
13851392
ifdef SMP
13861393
CCOMMON_OPT += -DSMP_SERVER
13871394

c_check

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,21 @@ if [ "$architecture" = "riscv64" ]; then
240240
rm -rf "$tmpd"
241241
fi
242242

243+
no_sve=0
244+
if [ "$architecture" = "arm64" ]; then
245+
tmpd=`mktemp -d`
246+
tmpf="$tmpd/a.c"
247+
printf "#include <arm_sve.h>\n\n int main(void){}\n">> "$tmpf"
248+
args=" -march=armv8-a+sve -c -o $tmpf.o $tmpf"
249+
no_sve=0
250+
{
251+
$compiler_name $flags $args >/dev/null 2>&1
252+
} || {
253+
no_sve=1
254+
}
255+
rm -rf "$tmpd"
256+
fi
257+
243258
c11_atomics=0
244259
case "$data" in
245260
*HAVE_C11*)
@@ -379,6 +394,7 @@ done
379394
printf "HAVE_MSA=1\n"
380395
printf "MSA_FLAGS=%s\n" "$msa_flags"
381396
}
397+
[ "$no_sve" -eq 1 ] && printf "NO_SVE=1\n"
382398
[ "$no_rv64gv" -eq 1 ] && printf "NO_RV64GV=1\n"
383399
[ "$no_avx512" -eq 1 ] && printf "NO_AVX512=1\n"
384400
[ "$no_avx2" -eq 1 ] && printf "NO_AVX2=1\n"

cmake/arch.cmake

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,12 @@ endif ()
4444

4545
if (DYNAMIC_ARCH)
4646
if (ARM64)
47-
set(DYNAMIC_CORE ARMV8 CORTEXA53 CORTEXA55 CORTEXA57 CORTEXA72 CORTEXA73 FALKOR THUNDERX THUNDERX2T99 TSV110 EMAG8180 NEOVERSEN1 NEOVERSEV1 NEOVERSEN2 THUNDERX3T110)
47+
set(DYNAMIC_CORE ARMV8 CORTEXA53 CORTEXA55 CORTEXA57 CORTEXA72 CORTEXA73 FALKOR THUNDERX THUNDERX2T99 TSV110 EMAG8180 NEOVERSEN1 THUNDERX3T110)
48+
if (${CMAKE_C_COMPILER_VERSION} VERSION_GREATER 9.99)
49+
set(DYNAMIC_CORE "${DYNAMIC_CORE} NEOVERSEV1 NEOVERSEN2")
50+
endif ()
4851
if (DYNAMIC_LIST)
49-
set(DYNAMIC_CORE ARMV8 ${DYNAMIC_LIST})
52+
set(DYNAMIC_CORE ARMV8 ${DYNAMIC_LIST})
5053
endif ()
5154
endif ()
5255

driver/others/dynamic_arm64.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,13 @@ extern gotoblas_t gotoblas_THUNDERX2T99;
125125
extern gotoblas_t gotoblas_TSV110;
126126
extern gotoblas_t gotoblas_EMAG8180;
127127
extern gotoblas_t gotoblas_NEOVERSEN1;
128+
#ifndef NO_SVE
128129
extern gotoblas_t gotoblas_NEOVERSEV1;
129130
extern gotoblas_t gotoblas_NEOVERSEN2;
131+
#else
132+
#define gotoblas_NEOVERSEV1 gotoblas_ARMV8
133+
#define gotoblas_NEOVERSEN2 gotoblas_ARMV8
134+
#endif
130135
extern gotoblas_t gotoblas_THUNDERX3T110;
131136
extern gotoblas_t gotoblas_CORTEXA55;
132137
#endif
@@ -237,7 +242,7 @@ static gotoblas_t *get_coretype(void) {
237242
p = (char *) NULL ;
238243
infile = fopen("/sys/devices/system/cpu/cpu0/regs/identification/midr_el1","r");
239244
if (!infile) return NULL;
240-
fgets(buffer, sizeof(buffer), infile);
245+
(void)fgets(buffer, sizeof(buffer), infile);
241246
midr_el1=strtoul(buffer,NULL,16);
242247
fclose(infile);
243248
#else
@@ -274,10 +279,12 @@ static gotoblas_t *get_coretype(void) {
274279
return &gotoblas_CORTEXA73;
275280
case 0xd0c: // Neoverse N1
276281
return &gotoblas_NEOVERSEN1;
282+
#ifndef NO_SVE
277283
case 0xd49:
278284
return &gotoblas_NEOVERSEN2;
279285
case 0xd40:
280286
return &gotoblas_NEOVERSEV1;
287+
#endif
281288
case 0xd05: // Cortex A55
282289
return &gotoblas_CORTEXA55;
283290
}

0 commit comments

Comments
 (0)