| @@ -295,6 +295,7 @@ endif | |||
| ifeq ($(C_COMPILER), GCC) | |||
| GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4) | |||
| GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4) | |||
| GCCVERSIONEQ5 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` = 5) | |||
| GCCVERSIONGT5 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 5) | |||
| GCCVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 7) | |||
| GCCVERSIONGTEQ9 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 9) | |||
| @@ -593,35 +594,33 @@ endif | |||
| ifeq ($(ARCH), zarch) | |||
| DYNAMIC_CORE = ZARCH_GENERIC | |||
| # if the compiler accepts -march=arch11 or -march=z13 and can compile a file | |||
| # with z13-specific inline assembly, then we can include support for Z13. | |||
| # note: -march=z13 is equivalent to -march=arch11 yet some compiler releases | |||
| # only support one or the other. | |||
| # note: LLVM version 6.x supported -march=z13 yet could not handle vector | |||
| # registers in inline assembly, so the check for supporting the -march flag is | |||
| # not enough. | |||
| ZARCH_TEST_COMPILE=-c $(TOPDIR)/kernel/zarch/damin_z13.c -I$(TOPDIR) -o /dev/null > /dev/null 2> /dev/null | |||
| ZARCH_CC_SUPPORTS_ARCH11=$(shell $(CC) -march=arch11 $(ZARCH_TEST_COMPILE) && echo 1) | |||
| ZARCH_CC_SUPPORTS_Z13=$(shell $(CC) -march=z13 $(ZARCH_TEST_COMPILE) && echo 1) | |||
| ifeq ($(or $(ZARCH_CC_SUPPORTS_ARCH11), $(ZARCH_CC_SUPPORTS_Z13)), 1) | |||
| # Z13 is supported since gcc-5.2, gcc-6, and in RHEL 7.3 and newer | |||
| ifeq ($(GCCVERSIONGT5), 1) | |||
| ZARCH_SUPPORT_Z13 := 1 | |||
| else ifeq ($(GCCVERSIONEQ5), 1) | |||
| ifeq ($(GCCMINORVERSIONGTEQ2), 1) | |||
| ZARCH_SUPPORT_Z13 := 1 | |||
| endif | |||
| endif | |||
| ifeq ($(wildcard /etc/redhat-release), /etc/redhat-release) | |||
| ifeq ($(shell source /etc/os-release ; expr $$VERSION_ID \>= "7.3"), 1) | |||
| ZARCH_SUPPORT_Z13 := 1 | |||
| endif | |||
| endif | |||
| ifeq ($(ZARCH_SUPPORT_Z13), 1) | |||
| DYNAMIC_CORE += Z13 | |||
| CCOMMON_OPT += -DDYN_Z13 | |||
| else | |||
| $(info OpenBLAS: Not building Z13 kernels because the compiler $(CC) does not support it) | |||
| $(info OpenBLAS: Not building Z13 kernels because gcc is older than 5.2 or 6.x) | |||
| endif | |||
| # as above for z13, check for -march=arch12 and z14 support in the compiler. | |||
| ZARCH_CC_SUPPORTS_ARCH12=$(shell $(CC) -march=arch12 $(ZARCH_TEST_COMPILE) && echo 1) | |||
| ZARCH_CC_SUPPORTS_Z14=$(shell $(CC) -march=z14 $(ZARCH_TEST_COMPILE) && echo 1) | |||
| ifeq ($(or $(ZARCH_CC_SUPPORTS_ARCH12), $(ZARCH_CC_SUPPORTS_Z14)), 1) | |||
| ifeq ($(GCCVERSIONGTEQ7), 1) | |||
| DYNAMIC_CORE += Z14 | |||
| CCOMMON_OPT += -DDYN_Z14 | |||
| else | |||
| $(info OpenBLAS: Not building Z14 kernels because the compiler $(CC) does not support it) | |||
| $(info OpenBLAS: Not building Z14 kernels because gcc is older than 7.x) | |||
| endif | |||
| endif | |||
| endif # ARCH zarch | |||
| ifeq ($(ARCH), power) | |||
| DYNAMIC_CORE = POWER6 | |||
| @@ -1223,6 +1222,18 @@ endif | |||
| ifeq ($(BUILD_HALF), 1) | |||
| CCOMMON_OPT += -DBUILD_HALF | |||
| endif | |||
| ifeq ($(BUILD_SINGLE), 1) | |||
| CCOMMON_OPT += -DBUILD_SINGLE | |||
| endif | |||
| ifeq ($(BUILD_DOUBLE), 1) | |||
| CCOMMON_OPT += -DBUILD_DOUBLE | |||
| endif | |||
| ifeq ($(BUILD_COMPLEX), 1) | |||
| CCOMMON_OPT += -DBUILD_COMPLEX | |||
| endif | |||
| ifeq ($(BUILD_COMPLEX16), 1) | |||
| CCOMMON_OPT += -DBUILD_COMPLEX16 | |||
| endif | |||
| CCOMMON_OPT += -DVERSION=\"$(VERSION)\" | |||