Skip to content

Commit 75d440c

Browse files
committed
s390x/DYNAMIC_ARCH: fixup broken merge and reapply simplification
An unrelated commit and merge inadvertently reverted our recent two changes for simplifying DYNAMIC_ARCH on s390x. Simply reapply the changes. Simplify detection of which kernels we can compile on s390x. Instead of decoding the gcc version in a complicated manner, just check if CC supports a given -march=archXY flag. Together with the next patch, we thereby gain support for builds with LLVM/clang with DYNAMIC_ARCH=1. To enable builds with DYNAMIC_ARCH with older compiler releases, the Makefile and drivers/other/dynamic_arch.c need a common view of the architecture support built into the library. We follow the notation from x86 when used with DYNAMIC_LIST, where defines DYN_<ARCH NAME> denote support for a given generation to be built in. Since there are far fewer architecture generations in OpenBLAS for s390x, that does not bloat command lines too much. Closes: #2842 Fixes: ba64437 ("Copy BUILD_ options available to the compiler flags" Signed-off-by: Marius Hillenbrand <mhillen@linux.ibm.com>
1 parent 4c10a16 commit 75d440c

File tree

1 file changed

+22
-21
lines changed

1 file changed

+22
-21
lines changed

Makefile.system

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,6 @@ endif
295295
ifeq ($(C_COMPILER), GCC)
296296
GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
297297
GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4)
298-
GCCVERSIONEQ5 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` = 5)
299298
GCCVERSIONGT5 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 5)
300299
GCCVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 7)
301300
GCCVERSIONGTEQ9 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 9)
@@ -594,34 +593,36 @@ endif
594593
ifeq ($(ARCH), zarch)
595594
DYNAMIC_CORE = ZARCH_GENERIC
596595

597-
# Z13 is supported since gcc-5.2, gcc-6, and in RHEL 7.3 and newer
598-
ifeq ($(GCCVERSIONGT5), 1)
599-
ZARCH_SUPPORT_Z13 := 1
600-
else ifeq ($(GCCVERSIONEQ5), 1)
601-
ifeq ($(GCCMINORVERSIONGTEQ2), 1)
602-
ZARCH_SUPPORT_Z13 := 1
603-
endif
604-
endif
605-
606-
ifeq ($(wildcard /etc/redhat-release), /etc/redhat-release)
607-
ifeq ($(shell source /etc/os-release ; expr $$VERSION_ID \>= "7.3"), 1)
608-
ZARCH_SUPPORT_Z13 := 1
609-
endif
610-
endif
611-
612-
ifeq ($(ZARCH_SUPPORT_Z13), 1)
596+
# if the compiler accepts -march=arch11 or -march=z13 and can compile a file
597+
# with z13-specific inline assembly, then we can include support for Z13.
598+
# note: -march=z13 is equivalent to -march=arch11 yet some compiler releases
599+
# only support one or the other.
600+
# note: LLVM version 6.x supported -march=z13 yet could not handle vector
601+
# registers in inline assembly, so the check for supporting the -march flag is
602+
# not enough.
603+
ZARCH_TEST_COMPILE=-c $(TOPDIR)/kernel/zarch/damin_z13.c -I$(TOPDIR) -o /dev/null > /dev/null 2> /dev/null
604+
ZARCH_CC_SUPPORTS_ARCH11=$(shell $(CC) -march=arch11 $(ZARCH_TEST_COMPILE) && echo 1)
605+
ZARCH_CC_SUPPORTS_Z13=$(shell $(CC) -march=z13 $(ZARCH_TEST_COMPILE) && echo 1)
606+
607+
ifeq ($(or $(ZARCH_CC_SUPPORTS_ARCH11), $(ZARCH_CC_SUPPORTS_Z13)), 1)
613608
DYNAMIC_CORE += Z13
609+
CCOMMON_OPT += -DDYN_Z13
614610
else
615-
$(info OpenBLAS: Not building Z13 kernels because gcc is older than 5.2 or 6.x)
611+
$(info OpenBLAS: Not building Z13 kernels because the compiler $(CC) does not support it)
616612
endif
617613

618-
ifeq ($(GCCVERSIONGTEQ7), 1)
614+
# as above for z13, check for -march=arch12 and z14 support in the compiler.
615+
ZARCH_CC_SUPPORTS_ARCH12=$(shell $(CC) -march=arch12 $(ZARCH_TEST_COMPILE) && echo 1)
616+
ZARCH_CC_SUPPORTS_Z14=$(shell $(CC) -march=z14 $(ZARCH_TEST_COMPILE) && echo 1)
617+
ifeq ($(or $(ZARCH_CC_SUPPORTS_ARCH12), $(ZARCH_CC_SUPPORTS_Z14)), 1)
619618
DYNAMIC_CORE += Z14
619+
CCOMMON_OPT += -DDYN_Z14
620620
else
621-
$(info OpenBLAS: Not building Z14 kernels because gcc is older than 7.x)
622-
endif
621+
$(info OpenBLAS: Not building Z14 kernels because the compiler $(CC) does not support it)
623622
endif
624623

624+
endif # ARCH zarch
625+
625626
ifeq ($(ARCH), power)
626627
DYNAMIC_CORE = POWER6
627628
DYNAMIC_CORE += POWER8

0 commit comments

Comments
 (0)