# # Include user definition # # TO suppress recursive includes INCLUDED = 1 ifndef TOPDIR TOPDIR = . endif # we need to use the host system's architecture for getarch compile options even especially when cross-compiling HOSTARCH := $(shell uname -m) ifeq ($(HOSTARCH), amd64) HOSTARCH=x86_64 endif # Catch conflicting usage of ARCH in some BSD environments ifeq ($(ARCH), amd64) override ARCH=x86_64 else ifeq ($(ARCH), powerpc64) override ARCH=power else ifeq ($(ARCH), powerpc64le) override ARCH=power else ifeq ($(ARCH), powerpc) override ARCH=power else ifeq ($(ARCH), i386) override ARCH=x86 else ifeq ($(ARCH), armv6) override ARCH=arm else ifeq ($(ARCH), armv7) override ARCH=arm else ifeq ($(ARCH), aarch64) override ARCH=arm64 else ifeq ($(ARCH), mipsel) override ARCH=mips else ifeq ($(ARCH), mips64el) override ARCH=mips64 else ifeq ($(ARCH), zarch) override ARCH=zarch endif NETLIB_LAPACK_DIR = $(TOPDIR)/lapack-netlib # Default C compiler # - Only set if not specified on the command line or inherited from the environment. # - CC is an implicit variable so neither '?=' or 'ifndef' can be used. # http://stackoverflow.com/questions/4029274/mingw-and-make-variables # - Default value is 'cc' which is not always a valid command (e.g. MinGW). ifeq ($(origin CC),default) # Check if $(CC) refers to a valid command and set the value to gcc if not ifneq ($(findstring cmd.exe,$(SHELL)),) ifeq ($(shell where $(CC) 2>NUL),) CC = gcc endif else # POSIX-ish ifeq ($(shell command -v $(CC) 2>/dev/null),) ifeq ($(shell uname -s),Darwin) CC = clang # EXTRALIB += -Wl,-no_compact_unwind else CC = gcc endif # Darwin endif # CC exists endif # Shell is sane endif # CC is set to default # Default Fortran compiler (FC) is selected by f_check. ifndef MAKEFILE_RULE include $(TOPDIR)/Makefile.rule else include $(TOPDIR)/$(MAKEFILE_RULE) endif # # Beginning of system configuration # ifneq ($(BUILD_SINGLE),1) ifneq ($(BUILD_DOUBLE),1) ifneq ($(BUILD_COMPLEX),1) ifneq ($(BUILD_COMPLEX16),1) override BUILD_SINGLE=1 override BUILD_DOUBLE=1 override BUILD_COMPLEX=1 override BUILD_COMPLEX16=1 endif endif endif endif ifndef HOSTCC HOSTCC = $(CC) endif ifdef TARGET GETARCH_FLAGS := -DFORCE_$(TARGET) GETARCH_FLAGS += -DUSER_TARGET ifeq ($(TARGET), GENERIC) ifeq ($(DYNAMIC_ARCH), 1) override NO_EXPRECISION=1 export NO_EXPRECISION endif endif endif # Force fallbacks for 32bit ifeq ($(BINARY), 32) ifeq ($(TARGET), HASWELL) GETARCH_FLAGS := -DFORCE_NEHALEM endif ifeq ($(TARGET), SKYLAKEX) GETARCH_FLAGS := -DFORCE_NEHALEM endif ifeq ($(TARGET), COOPERLAKE) GETARCH_FLAGS := -DFORCE_NEHALEM endif ifeq ($(TARGET), SAPPHIRERAPIDS) GETARCH_FLAGS := -DFORCE_NEHALEM endif ifeq ($(TARGET), SANDYBRIDGE) GETARCH_FLAGS := -DFORCE_NEHALEM endif ifeq ($(TARGET), BULLDOZER) GETARCH_FLAGS := -DFORCE_BARCELONA endif ifeq ($(TARGET), PILEDRIVER) GETARCH_FLAGS := -DFORCE_BARCELONA endif ifeq ($(TARGET), STEAMROLLER) GETARCH_FLAGS := -DFORCE_BARCELONA endif ifeq ($(TARGET), EXCAVATOR) GETARCH_FLAGS := -DFORCE_BARCELONA endif ifeq ($(TARGET), ZEN) GETARCH_FLAGS := -DFORCE_BARCELONA endif ifeq ($(TARGET), ARMV8) GETARCH_FLAGS := -DFORCE_ARMV7 endif ifeq ($(TARGET), POWER8) GETARCH_FLAGS := -DFORCE_POWER6 endif ifeq ($(TARGET), POWER9) GETARCH_FLAGS := -DFORCE_POWER6 endif ifeq ($(TARGET), POWER10) GETARCH_FLAGS := -DFORCE_POWER6 endif endif #TARGET_CORE will override TARGET which is used in DYNAMIC_ARCH=1. # ifdef TARGET_CORE GETARCH_FLAGS := -DFORCE_$(TARGET_CORE) endif # Force fallbacks for 32bit ifeq ($(BINARY), 32) ifeq ($(TARGET_CORE), HASWELL) GETARCH_FLAGS := -DFORCE_NEHALEM endif ifeq ($(TARGET_CORE), SKYLAKEX) GETARCH_FLAGS := -DFORCE_NEHALEM endif ifeq ($(TARGET_CORE), COOPERLAKE) GETARCH_FLAGS := -DFORCE_NEHALEM endif ifeq ($(TARGET_CORE), SAPPHIRERAPIDS) GETARCH_FLAGS := -DFORCE_NEHALEM endif ifeq ($(TARGET_CORE), SANDYBRIDGE) GETARCH_FLAGS := -DFORCE_NEHALEM endif ifeq ($(TARGET_CORE), BULLDOZER) GETARCH_FLAGS := -DFORCE_BARCELONA endif ifeq ($(TARGET_CORE), PILEDRIVER) GETARCH_FLAGS := -DFORCE_BARCELONA endif ifeq ($(TARGET_CORE), STEAMROLLER) GETARCH_FLAGS := -DFORCE_BARCELONA endif ifeq ($(TARGET_CORE), EXCAVATOR) GETARCH_FLAGS := -DFORCE_BARCELONA endif ifeq ($(TARGET_CORE), ZEN) GETARCH_FLAGS := -DFORCE_BARCELONA endif endif # On x86_64 build getarch with march=native unless the compiler is PGI. This is required to detect AVX512 support in getarch. ifeq ($(HOSTARCH), x86_64) ifeq ($(findstring pgcc,$(HOSTCC))$(findstring nvc,$(HOSTCC)),) GETARCH_FLAGS += -march=native endif endif ifdef INTERFACE64 ifneq ($(INTERFACE64), 0) GETARCH_FLAGS += -DUSE64BITINT endif endif ifndef GEMM_MULTITHREAD_THRESHOLD GEMM_MULTITHREAD_THRESHOLD=4 endif GETARCH_FLAGS += -DGEMM_MULTITHREAD_THRESHOLD=$(GEMM_MULTITHREAD_THRESHOLD) ifeq ($(NO_AVX), 1) GETARCH_FLAGS += -DNO_AVX endif ifeq ($(BINARY), 32) GETARCH_FLAGS += -DNO_AVX -DNO_AVX2 -DNO_AVX512 NO_AVX512 = 1 endif ifeq ($(NO_AVX2), 1) GETARCH_FLAGS += -DNO_AVX2 endif ifeq ($(NO_AVX512), 1) GETARCH_FLAGS += -DNO_AVX512 endif ifeq ($(DEBUG), 1) GETARCH_FLAGS += -g endif ifeq ($(QUIET_MAKE), 1) MAKE += -s endif ifndef NO_PARALLEL_MAKE NO_PARALLEL_MAKE=0 endif GETARCH_FLAGS += -DNO_PARALLEL_MAKE=$(NO_PARALLEL_MAKE) ifdef MAKE_NB_JOBS GETARCH_FLAGS += -DMAKE_NB_JOBS=$(MAKE_NB_JOBS) endif ifeq ($(HOSTCC), loongcc) GETARCH_FLAGS += -static endif #if don't use Fortran, it will only compile CBLAS. ifeq ($(ONLY_CBLAS), 1) NO_LAPACK = 1 else ONLY_CBLAS = 0 endif #For small matrix optimization ifeq ($(ARCH), x86_64) SMALL_MATRIX_OPT = 1 else ifeq ($(ARCH), power) SMALL_MATRIX_OPT = 1 BUILD_BFLOAT16 = 1 endif ifeq ($(SMALL_MATRIX_OPT), 1) CCOMMON_OPT += -DSMALL_MATRIX_OPT endif # This operation is expensive, so execution should be once. ifndef GOTOBLAS_MAKEFILE export GOTOBLAS_MAKEFILE = 1 # Determine if the assembler is GNU Assembler HAVE_GAS := $(shell $(AS) -v < /dev/null 2>&1 | grep GNU 2>&1 >/dev/null ; echo $$?) GETARCH_FLAGS += -DHAVE_GAS=$(HAVE_GAS) # Generating Makefile.conf and config.h 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) ifndef TARGET_CORE include $(TOPDIR)/Makefile.conf else HAVE_NEON= HAVE_VFP= HAVE_VFPV3= HAVE_VFPV4= HAVE_MMX= HAVE_SSE= HAVE_SSE2= HAVE_SSE3= HAVE_SSSE3= HAVE_SSE4_1= HAVE_SSE4_2= HAVE_SSE4A= HAVE_SSE5= HAVE_AVX= HAVE_AVX2= HAVE_FMA3= include $(TOPDIR)/Makefile_kernel.conf endif endif ifndef NUM_PARALLEL NUM_PARALLEL = 1 endif ifndef NUM_THREADS NUM_THREADS = $(NUM_CORES) endif ifeq ($(NUM_THREADS), 1) override USE_THREAD = 0 override USE_OPENMP = 0 endif ifdef USE_THREAD ifeq ($(USE_THREAD), 0) SMP = else SMP = 1 endif else ifeq ($(NUM_THREADS), 1) SMP = else SMP = 1 endif endif ifeq ($(SMP), 1) USE_LOCKING = endif ifndef NEED_PIC NEED_PIC = 1 endif ARFLAGS = CPP = $(COMPILER) -E AR ?= $(CROSS_SUFFIX)ar AS ?= $(CROSS_SUFFIX)as LD ?= $(CROSS_SUFFIX)ld RANLIB ?= $(CROSS_SUFFIX)ranlib NM = $(CROSS_SUFFIX)nm DLLWRAP = $(CROSS_SUFFIX)dllwrap OBJCOPY = $(CROSS_SUFFIX)objcopy OBJCONV = $(CROSS_SUFFIX)objconv # When fortran support was either not detected or actively deselected, only build BLAS. ifeq ($(NOFORTRAN), 1) C_LAPACK = 1 override FEXTRALIB = endif ifeq ($(C_COMPILER), GCC) GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4) GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4) GCCVERSIONGT5 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 5) GCCVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 7) GCCVERSIONGTEQ8 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 8) GCCVERSIONGTEQ9 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 9) GCCVERSIONGTEQ11 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 11) GCCVERSIONGTEQ10 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 10) # Note that the behavior of -dumpversion is compile-time-configurable for # gcc-7.x and newer. Use -dumpfullversion there ifeq ($(GCCVERSIONGTEQ7),1) GCCDUMPVERSION_PARAM := -dumpfullversion else GCCDUMPVERSION_PARAM := -dumpversion endif GCCMINORVERSIONGTEQ1 := $(shell expr `$(CC) $(GCCDUMPVERSION_PARAM) | cut -f2 -d.` \>= 1) GCCMINORVERSIONGTEQ2 := $(shell expr `$(CC) $(GCCDUMPVERSION_PARAM) | cut -f2 -d.` \>= 2) GCCMINORVERSIONGTEQ4 := $(shell expr `$(CC) $(GCCDUMPVERSION_PARAM) | cut -f2 -d.` \>= 4) GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) $(GCCDUMPVERSION_PARAM) | cut -f2 -d.` \>= 7) endif # # OS dependent settings # ifeq ($(OSNAME), Darwin) ifndef MACOSX_DEPLOYMENT_TARGET ifeq ($(ARCH), arm64) export MACOSX_DEPLOYMENT_TARGET=11.0 else export MACOSX_DEPLOYMENT_TARGET=10.8 endif endif MD5SUM = md5 -r endif ifneq (,$(findstring $(OSNAME), FreeBSD OpenBSD DragonFly)) MD5SUM = md5 -r endif ifeq ($(OSNAME), NetBSD) MD5SUM = md5 -n endif ifeq ($(OSNAME), Linux) EXTRALIB += -lm NO_EXPRECISION = 1 endif ifeq ($(OSNAME), Android) EXTRALIB += -lm endif ifeq ($(OSNAME), AIX) EXTRALIB += -lm endif ifeq ($(OSNAME), FreeBSD) ifeq ($(ARCH), $(filter $(ARCH),arm arm64)) EXTRALIB += -lm endif endif ifeq ($(OSNAME), WINNT) NEED_PIC = 0 NO_EXPRECISION = 1 EXTRALIB += -defaultlib:advapi32 SUFFIX = obj PSUFFIX = pobj LIBSUFFIX = a ifeq ($(C_COMPILER), CLANG) CCOMMON_OPT += -DMS_ABI endif #Version tests for supporting specific features (MS_ABI, POWER9 intrinsics) ifeq ($(GCCVERSIONGT4), 1) # GCC Major version > 4 # It is compatible with MSVC ABI. CCOMMON_OPT += -DMS_ABI endif ifeq ($(GCCVERSIONGTEQ4), 1) ifeq ($(GCCMINORVERSIONGTEQ7), 1) # GCC Version >=4.7 # It is compatible with MSVC ABI. CCOMMON_OPT += -DMS_ABI endif endif # Ensure the correct stack alignment on Win32 # http://permalink.gmane.org/gmane.comp.lib.openblas.general/97 ifeq ($(ARCH), x86) CCOMMON_OPT += -mincoming-stack-boundary=2 FCOMMON_OPT += -mincoming-stack-boundary=2 endif endif ifeq ($(OSNAME), Interix) NEED_PIC = 0 NO_EXPRECISION = 1 INTERIX_TOOL_DIR = /opt/gcc.3.3/i586-pc-interix3/bin endif ifeq ($(OSNAME), CYGWIN_NT) NEED_PIC = 0 NO_EXPRECISION = 1 OS_CYGWIN_NT = 1 endif ifneq ($(OSNAME), WINNT) ifneq ($(OSNAME), CYGWIN_NT) ifneq ($(OSNAME), Interix) ifneq ($(OSNAME), Android) ifdef SMP EXTRALIB += -lpthread endif endif endif endif endif # ifeq logical or ifeq ($(OSNAME), $(filter $(OSNAME),WINNT CYGWIN_NT Interix)) OS_WINDOWS=1 endif ifdef QUAD_PRECISION CCOMMON_OPT += -DQUAD_PRECISION NO_EXPRECISION = 1 endif ifneq ($(ARCH), x86) ifneq ($(ARCH), x86_64) NO_EXPRECISION = 1 endif endif ifdef UTEST_CHECK CCOMMON_OPT += -DUTEST_CHECK SANITY_CHECK = 1 endif ifdef SANITY_CHECK CCOMMON_OPT += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU) endif MAX_STACK_ALLOC ?= 2048 ifneq ($(MAX_STACK_ALLOC), 0) CCOMMON_OPT += -DMAX_STACK_ALLOC=$(MAX_STACK_ALLOC) endif ifdef USE_LOCKING ifneq ($(USE_LOCKING), 0) CCOMMON_OPT += -DUSE_LOCKING endif endif # # Architecture dependent settings # ifeq ($(ARCH), x86) ifndef BINARY NO_BINARY_MODE = 1 endif ifeq ($(CORE), generic) NO_EXPRECISION = 1 endif ifndef NO_EXPRECISION ifeq ($(F_COMPILER), GFORTRAN) # ifeq logical or. GCC or LSB ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB)) EXPRECISION = 1 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double FCOMMON_OPT += -m128bit-long-double endif ifeq ($(C_COMPILER), CLANG) EXPRECISION = 1 CCOMMON_OPT += -DEXPRECISION FCOMMON_OPT += -m128bit-long-double endif endif endif endif ifeq ($(ARCH), x86_64) ifeq ($(CORE), generic) NO_EXPRECISION = 1 endif ifndef NO_EXPRECISION ifeq ($(F_COMPILER), GFORTRAN) # ifeq logical or. GCC or LSB ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB)) EXPRECISION = 1 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double FCOMMON_OPT += -m128bit-long-double endif ifeq ($(C_COMPILER), CLANG) EXPRECISION = 1 CCOMMON_OPT += -DEXPRECISION FCOMMON_OPT += -m128bit-long-double endif endif endif endif ifeq ($(C_COMPILER), INTEL) CCOMMON_OPT += -wd981 endif ifeq ($(USE_OPENMP), 1) #check ifeq ($(USE_THREAD), 0) $(error OpenBLAS: Cannot set both USE_OPENMP=1 and USE_THREAD=0. The USE_THREAD=0 is only for building single thread version.) endif # ifeq logical or. GCC or LSB ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB)) CCOMMON_OPT += -fopenmp endif ifeq ($(C_COMPILER), CLANG) CCOMMON_OPT += -fopenmp endif ifeq ($(C_COMPILER), INTEL) CCOMMON_OPT += -fopenmp endif ifeq ($(C_COMPILER), PGI) CCOMMON_OPT += -mp endif ifeq ($(C_COMPILER), OPEN64) CCOMMON_OPT += -mp CEXTRALIB += -lstdc++ endif ifeq ($(C_COMPILER), PATHSCALE) CCOMMON_OPT += -mp endif endif ifeq ($(DYNAMIC_ARCH), 1) ifeq ($(ARCH), x86) DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \ CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO endif ifeq ($(ARCH), x86_64) DYNAMIC_CORE = PRESCOTT CORE2 ifeq ($(DYNAMIC_OLDER), 1) DYNAMIC_CORE += PENRYN DUNNINGTON endif DYNAMIC_CORE += NEHALEM ifeq ($(DYNAMIC_OLDER), 1) DYNAMIC_CORE += OPTERON OPTERON_SSE3 endif DYNAMIC_CORE += BARCELONA ifeq ($(DYNAMIC_OLDER), 1) DYNAMIC_CORE += BOBCAT ATOM NANO endif ifneq ($(NO_AVX), 1) DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER STEAMROLLER EXCAVATOR endif ifneq ($(NO_AVX2), 1) DYNAMIC_CORE += HASWELL ZEN endif ifneq ($(NO_AVX512), 1) ifneq ($(NO_AVX2), 1) DYNAMIC_CORE += SKYLAKEX COOPERLAKE endif endif endif ifdef DYNAMIC_LIST override DYNAMIC_CORE = PRESCOTT $(DYNAMIC_LIST) XCCOMMON_OPT = -DDYNAMIC_LIST -DDYN_PRESCOTT XCCOMMON_OPT += $(foreach dcore,$(DYNAMIC_LIST),-DDYN_$(dcore)) CCOMMON_OPT += $(XCCOMMON_OPT) #CCOMMON_OPT += -DDYNAMIC_LIST='$(DYNAMIC_LIST)' endif ifeq ($(ARCH), arm64) DYNAMIC_CORE = ARMV8 DYNAMIC_CORE += CORTEXA53 DYNAMIC_CORE += CORTEXA57 DYNAMIC_CORE += CORTEXA72 DYNAMIC_CORE += CORTEXA73 DYNAMIC_CORE += NEOVERSEN1 DYNAMIC_CORE += NEOVERSEV1 DYNAMIC_CORE += NEOVERSEN2 DYNAMIC_CORE += CORTEXA55 DYNAMIC_CORE += FALKOR DYNAMIC_CORE += THUNDERX DYNAMIC_CORE += THUNDERX2T99 DYNAMIC_CORE += TSV110 DYNAMIC_CORE += EMAG8180 DYNAMIC_CORE += THUNDERX3T110 ifdef DYNAMIC_LIST override DYNAMIC_CORE = ARMV8 $(DYNAMIC_LIST) XCCOMMON_OPT = -DDYNAMIC_LIST -DDYN_ARMV8 XCCOMMON_OPT += $(foreach dcore,$(DYNAMIC_LIST),-DDYN_$(dcore)) endif endif ifeq ($(ARCH), mips64) DYNAMIC_CORE = LOONGSON3R3 LOONGSON3R4 endif ifeq ($(ARCH), loongarch64) DYNAMIC_CORE = LOONGSON3R5 LOONGSON2K1000 LOONGSONGENERIC 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) DYNAMIC_CORE += Z13 CCOMMON_OPT += -DDYN_Z13 else $(info OpenBLAS: Not building Z13 kernels because the compiler $(CC) does not support it) 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) DYNAMIC_CORE += Z14 CCOMMON_OPT += -DDYN_Z14 else $(info OpenBLAS: Not building Z14 kernels because the compiler $(CC) does not support it) endif endif # ARCH zarch ifeq ($(ARCH), power) ifneq ($(C_COMPILER), PGI) DYNAMIC_CORE = POWER6 DYNAMIC_CORE += POWER8 ifneq ($(C_COMPILER), GCC) DYNAMIC_CORE += POWER9 DYNAMIC_CORE += POWER10 CCOMMON_OPT += -DHAVE_P10_SUPPORT endif ifeq ($(C_COMPILER), GCC) ifeq ($(GCCVERSIONGT5), 1) DYNAMIC_CORE += POWER9 else $(info, OpenBLAS: Your gcc version is too old to build the POWER9 kernels.) endif LDVERSIONGTEQ35 := $(shell expr `$(CC) -Wl,--version 2> /dev/null | head -1 | cut -f2 -d "." | cut -f1 -d "-"` \>= 35) ifeq ($(GCCVERSIONGTEQ11)$(LDVERSIONGTEQ35), 11) DYNAMIC_CORE += POWER10 CCOMMON_OPT += -DHAVE_P10_SUPPORT else ifeq ($(GCCVERSIONGTEQ10), 1) ifeq ($(GCCMINORVERSIONGTEQ2)$(LDVERSIONGTEQ35), 11) DYNAMIC_CORE += POWER10 CCOMMON_OPT += -DHAVE_P10_SUPPORT endif else $(info, OpenBLAS: Your gcc version is too old to build the POWER10 kernels.) endif endif else DYNAMIC_CORE = POWER8 DYNAMIC_CORE += POWER9 endif endif # If DYNAMIC_CORE is not set, DYNAMIC_ARCH cannot do anything, so force it to empty ifndef DYNAMIC_CORE override DYNAMIC_ARCH= endif endif ifeq ($(ARCH), ia64) NO_BINARY_MODE = 1 BINARY_DEFINED = 1 ifeq ($(F_COMPILER), GFORTRAN) ifeq ($(C_COMPILER), GCC) # EXPRECISION = 1 # CCOMMON_OPT += -DEXPRECISION endif endif endif ifeq ($(ARCH), $(filter $(ARCH),mips64 mips)) NO_BINARY_MODE = 1 endif ifeq ($(ARCH), alpha) NO_BINARY_MODE = 1 BINARY_DEFINED = 1 endif ifeq ($(ARCH), arm) NO_BINARY_MODE = 1 BINARY_DEFINED = 1 CCOMMON_OPT += -marm FCOMMON_OPT += -marm # If softfp abi is mentioned on the command line, force it. ifeq ($(ARM_SOFTFP_ABI), 1) CCOMMON_OPT += -mfloat-abi=softfp FCOMMON_OPT += -mfloat-abi=softfp endif ifeq ($(OSNAME), Android) ifeq ($(ARM_SOFTFP_ABI), 1) EXTRALIB += -lm else EXTRALIB += -Wl,-lm_hard endif endif endif ifeq ($(ARCH), arm64) NO_BINARY_MODE = 1 BINARY_DEFINED = 1 ifdef INTERFACE64 ifneq ($(INTERFACE64), 0) ifeq ($(F_COMPILER), GFORTRAN) FCOMMON_OPT += -fdefault-integer-8 endif ifeq ($(F_COMPILER), FLANG) FCOMMON_OPT += -i8 endif endif endif endif ifeq ($(ARCH), riscv64) NO_BINARY_MODE = 1 BINARY_DEFINED = 1 endif ifeq ($(ARCH), loongarch64) NO_BINARY_MODE = 1 BINARY_DEFINED = 1 endif # # C Compiler dependent settings # # ifeq logical or. GCC or CLANG or LSB # http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG LSB)) CCOMMON_OPT += -Wall -Wno-implicit-function-declaration -Wno-incompatible-pointer-types COMMON_PROF += -fno-inline NO_UNINITIALIZED_WARN = -Wno-uninitialized ifeq ($(QUIET_MAKE), 1) CCOMMON_OPT += $(NO_UNINITIALIZED_WARN) -Wno-unused endif ifdef NO_BINARY_MODE ifeq ($(ARCH), $(filter $(ARCH),mips64)) ifdef BINARY64 CCOMMON_OPT += -mabi=64 else CCOMMON_OPT += -mabi=n32 endif BINARY_DEFINED = 1 else ifeq ($(ARCH), $(filter $(ARCH),mips)) CCOMMON_OPT += -mabi=32 BINARY_DEFINED = 1 endif ifneq (, $(filter $(CORE),LOONGSON3R3 LOONGSON3R4)) CCOMMON_OPT += -march=loongson3a FCOMMON_OPT += -march=loongson3a endif ifeq ($(CORE), MIPS24K) CCOMMON_OPT += -mips32r2 -mtune=24kc $(MSA_FLAGS) FCOMMON_OPT += -mips32r2 -mtune=24kc $(MSA_FLAGS) endif ifeq ($(CORE), MIPS1004K) CCOMMON_OPT += -mips32r2 $(MSA_FLAGS) FCOMMON_OPT += -mips32r2 $(MSA_FLAGS) endif ifeq ($(CORE), P5600) CCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS) FCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS) endif ifeq ($(CORE), I6400) CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS) FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS) endif ifeq ($(CORE), P6600) CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS) FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS) endif ifeq ($(CORE), I6500) CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS) FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS) endif ifeq ($(OSNAME), AIX) BINARY_DEFINED = 1 endif ifeq ($(ARCH), loongarch64) CCOMMON_OPT += -march=loongarch64 -mabi=lp64 FCOMMON_OPT += -march=loongarch64 -mabi=lp64 endif endif ifndef BINARY_DEFINED ifneq ($(OSNAME), AIX) ifdef BINARY64 ifneq ($(ARCH), riscv64) CCOMMON_OPT += -m64 endif else CCOMMON_OPT += -m32 endif endif endif endif ifeq ($(C_COMPILER), PGI) PGCVERSIONGT20 := $(shell expr `$(CC) --version|sed -n "2p" |sed -e "s/[^0-9.]//g" |cut -d "." -f 1` \> 20) PGCVERSIONEQ20 := $(shell expr `$(CC) --version|sed -n "2p" |sed -e "s/[^0-9.]//g" |cut -d "." -f 1` == 20) PGCMINORVERSIONGE11 := $(shell expr `$(CC) --version|sed -n "2p" |cut -d "-" -f 1 |sed -e "s/[^0-9.]//g" |cut -c 4-5` \>= 11) PGCVERSIONCHECK := $(PGCVERSIONGT20)$(PGCVERSIONEQ20)$(PGCMINORVERSIONGE11) ifeq ($(PGCVERSIONCHECK), $(filter $(PGCVERSIONCHECK), 100 101 011)) NEWPGI := 1 PGCVERSIONGT21 := $(shell expr `$(CC) --version|sed -n "2p" |sed -e "s/[^0-9.]//g" |cut -d "." -f 1` \> 21) PGCVERSIONEQ21 := $(shell expr `$(CC) --version|sed -n "2p" |sed -e "s/[^0-9.]//g" |cut -d "." -f 1` == 21) PGCVERSIONCHECK2 := $(PGCVERSIONGT21)$(PGCVERSIONEQ21)$(PGCMINORVERSIONGE11) ifeq ($(PGCVERSIONCHECK2), $(filter $(PGCVERSIONCHECK2), 100 101 011)) NEWPGI2 := 1 endif endif ifdef BINARY64 ifeq ($(ARCH), x86_64) ifneq ($(NEWPGI2),1) CCOMMON_OPT += -tp p7-64 else CCOMMON_OPT += -tp px endif ifneq ($(NEWPGI),1) CCOMMON_OPT += -D__MMX__ -Mnollvm endif else ifeq ($(ARCH), power) ifeq ($(CORE), POWER8) CCOMMON_OPT += -tp pwr8 endif ifeq ($(CORE), POWER9) CCOMMON_OPT += -tp pwr9 endif endif endif else ifneq ($(NEWPGI2),1) CCOMMON_OPT += -tp p7 else CCOMMON_OPT += -tp px endif endif endif ifeq ($(C_COMPILER), PATHSCALE) ifdef BINARY64 CCOMMON_OPT += -m64 else CCOMMON_OPT += -m32 endif endif # # Fortran Compiler dependent settings # ifeq ($(F_COMPILER), NAG) FCOMMON_OPT += -dcfuns -recursive -ieee=full -w=obs -thread_safe ifdef INTERFACE64 ifneq ($(INTERFACE64), 0) FCOMMON_OPT += -i8 endif endif ifeq ($(USE_OPENMP), 1) FCOMMON_OPT += -openmp endif endif ifeq ($(F_COMPILER), FLANG) CCOMMON_OPT += -DF_INTERFACE_FLANG FCOMMON_OPT += -Mrecursive -Kieee ifeq ($(OSNAME), Linux) ifeq ($(ARCH), x86_64) FLANG_VENDOR := $(shell $(FC) --version|head -1 |cut -f 1 -d " ") ifeq ($(FLANG_VENDOR), AMD) FCOMMON_OPT += -fno-unroll-loops endif endif endif ifdef BINARY64 ifdef INTERFACE64 ifneq ($(INTERFACE64), 0) FCOMMON_OPT += -i8 endif endif FCOMMON_OPT += -Wall else FCOMMON_OPT += -Wall endif ifeq ($(USE_OPENMP), 1) FCOMMON_OPT += -fopenmp endif endif ifeq ($(F_COMPILER), G77) CCOMMON_OPT += -DF_INTERFACE_G77 FCOMMON_OPT += -Wall ifndef NO_BINARY_MODE ifneq ($(OSNAME), AIX) ifdef BINARY64 FCOMMON_OPT += -m64 else FCOMMON_OPT += -m32 endif endif endif endif ifeq ($(F_COMPILER), G95) CCOMMON_OPT += -DF_INTERFACE_G95 FCOMMON_OPT += -Wall ifneq ($(OSNAME), AIX) ifndef NO_BINARY_MODE ifdef BINARY64 FCOMMON_OPT += -m64 else FCOMMON_OPT += -m32 endif endif ifneq ($(NO_LAPACKE), 1) FCOMMON_OPT += -fno-second-underscore endif endif endif ifeq ($(F_COMPILER), GFORTRAN) CCOMMON_OPT += -DF_INTERFACE_GFORT FCOMMON_OPT += -Wall # make single-threaded LAPACK calls thread-safe #1847 FCOMMON_OPT += -frecursive # work around ABI problem with passing single-character arguments FCOMMON_OPT += -fno-optimize-sibling-calls #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc ifneq ($(NOFORTRAN), 1) ifneq ($(NOFORTRAN), 2) ifneq ($(NO_LAPACK), 1) EXTRALIB += -lgfortran endif endif endif ifdef NO_BINARY_MODE ifeq ($(ARCH), $(filter $(ARCH),mips64)) ifdef BINARY64 FCOMMON_OPT += -mabi=64 else FCOMMON_OPT += -mabi=n32 endif else ifeq ($(ARCH), $(filter $(ARCH),mips)) FCOMMON_OPT += -mabi=32 endif else ifdef BINARY64 ifneq ($(OSNAME), AIX) ifneq ($(ARCH), riscv64) FCOMMON_OPT += -m64 endif endif ifdef INTERFACE64 ifneq ($(INTERFACE64), 0) FCOMMON_OPT += -fdefault-integer-8 endif endif else ifneq ($(OSNAME), AIX) FCOMMON_OPT += -m32 endif endif endif ifeq ($(USE_OPENMP), 1) FCOMMON_OPT += -fopenmp endif endif ifeq ($(F_COMPILER), INTEL) CCOMMON_OPT += -DF_INTERFACE_INTEL ifdef INTERFACE64 ifneq ($(INTERFACE64), 0) FCOMMON_OPT += -i8 endif endif FCOMMON_OPT += -recursive -fp-model strict -assume protect-parens ifeq ($(USE_OPENMP), 1) FCOMMON_OPT += -fopenmp endif endif ifeq ($(F_COMPILER), FUJITSU) CCOMMON_OPT += -DF_INTERFACE_FUJITSU ifeq ($(USE_OPENMP), 1) FCOMMON_OPT += -openmp endif endif ifeq ($(F_COMPILER), IBM) CCOMMON_OPT += -DF_INTERFACE_IBM # FCOMMON_OPT += -qarch=440 ifdef BINARY64 FCOMMON_OPT += -q64 ifdef INTERFACE64 ifneq ($(INTERFACE64), 0) FCOMMON_OPT += -qintsize=8 endif endif else FCOMMON_OPT += -q32 endif ifeq ($(USE_OPENMP), 1) FCOMMON_OPT += -openmp endif endif ifeq ($(F_COMPILER), PGI) CCOMMON_OPT += -DF_INTERFACE_PGI COMMON_PROF += -DPGICOMPILER ifdef BINARY64 ifdef INTERFACE64 ifneq ($(INTERFACE64), 0) FCOMMON_OPT += -i8 endif endif ifeq ($(ARCH), x86_64) ifneq ($(NEWPGI2),1) FCOMMON_OPT += -tp p7-64 else FCOMMON_OPT += -tp px endif else ifeq ($(ARCH), power) ifeq ($(CORE), POWER6) $(warning NVIDIA HPC compilers do not support POWER6.) endif ifeq ($(CORE), POWER8) FCOMMON_OPT += -tp pwr8 endif ifeq ($(CORE), POWER9) FCOMMON_OPT += -tp pwr9 endif ifeq ($(CORE), POWER10) $(warning NVIDIA HPC compilers do not support POWER10.) endif endif endif else FCOMMON_OPT += -tp p7 endif FCOMMON_OPT += -Mrecursive -Kieee ifeq ($(USE_OPENMP), 1) FCOMMON_OPT += -mp endif endif ifeq ($(F_COMPILER), PATHSCALE) CCOMMON_OPT += -DF_INTERFACE_PATHSCALE ifdef BINARY64 ifdef INTERFACE64 ifneq ($(INTERFACE64), 0) FCOMMON_OPT += -i8 endif endif endif ifeq ($(USE_OPENMP), 1) FCOMMON_OPT += -mp endif endif ifeq ($(F_COMPILER), OPEN64) CCOMMON_OPT += -DF_INTERFACE_OPEN64 ifdef BINARY64 ifdef INTERFACE64 ifneq ($(INTERFACE64), 0) FCOMMON_OPT += -i8 endif endif endif ifeq ($(ARCH), $(filter $(ARCH),mips64 mips)) ifndef BINARY64 FCOMMON_OPT += -n32 else FCOMMON_OPT += -n64 endif ifeq ($(CORE), LOONGSON3R3) FCOMMON_OPT += -loongson3 -static endif ifeq ($(CORE), LOONGSON3R4) FCOMMON_OPT += -loongson3 -static endif else ifndef BINARY64 FCOMMON_OPT += -m32 else FCOMMON_OPT += -m64 endif endif ifeq ($(USE_OPENMP), 1) FEXTRALIB += -lstdc++ FCOMMON_OPT += -mp endif endif ifeq ($(C_COMPILER), OPEN64) ifeq ($(ARCH), $(filter $(ARCH),mips64 mips)) ifndef BINARY64 CCOMMON_OPT += -n32 else CCOMMON_OPT += -n64 endif ifeq ($(CORE), LOONGSON3R3) CCOMMON_OPT += -loongson3 -static endif ifeq ($(CORE), LOONGSON3R4) CCOMMON_OPT += -loongson3 -static endif else ifndef BINARY64 CCOMMON_OPT += -m32 else CCOMMON_OPT += -m64 endif endif endif ifeq ($(C_COMPILER), SUN) CCOMMON_OPT += -w ifeq ($(ARCH), x86) CCOMMON_OPT += -m32 else ifdef BINARY64 CCOMMON_OPT += -m64 else CCOMMON_OPT += -m32 endif endif endif ifeq ($(F_COMPILER), SUN) CCOMMON_OPT += -DF_INTERFACE_SUN FCOMMON_OPT += -ftrap=%none -xrecursive ifeq ($(ARCH), x86) FCOMMON_OPT += -m32 else ifdef BINARY64 FCOMMON_OPT += -m64 else FCOMMON_OPT += -m32 endif endif ifeq ($(USE_OPENMP), 1) FCOMMON_OPT += -xopenmp=parallel endif endif ifeq ($(F_COMPILER), COMPAQ) CCOMMON_OPT += -DF_INTERFACE_COMPAQ ifeq ($(USE_OPENMP), 1) FCOMMON_OPT += -openmp endif endif ifeq ($(F_COMPILER), CRAY) CCOMMON_OPT += -DF_INTERFACE_INTEL FCOMMON_OPT += -hnopattern ifdef INTERFACE64 ifneq ($(INTERFACE64), 0) FCOMMON_OPT += -s integer64 endif endif ifneq ($(USE_OPENMP), 1) FCOMMON_OPT += -O noomp endif endif ifdef BINARY64 ifdef INTERFACE64 ifneq ($(INTERFACE64), 0) CCOMMON_OPT += #-DUSE64BITINT endif endif endif ifeq ($(NEED_PIC), 1) ifeq ($(C_COMPILER), IBM) CCOMMON_OPT += -qpic=large else CCOMMON_OPT += -fPIC endif ifeq ($(F_COMPILER), SUN) FCOMMON_OPT += -pic else ifeq ($(F_COMPILER), NAG) FCOMMON_OPT += -PIC else FCOMMON_OPT += -fPIC endif endif ifeq ($(DYNAMIC_ARCH), 1) CCOMMON_OPT += -DDYNAMIC_ARCH endif ifeq ($(DYNAMIC_OLDER), 1) CCOMMON_OPT += -DDYNAMIC_OLDER endif ifeq ($(C_LAPACK), 1) CCOMMON_OPT += -DC_LAPACK endif ifeq ($(NO_LAPACK), 1) CCOMMON_OPT += -DNO_LAPACK #Disable LAPACK C interface NO_LAPACKE = 1 endif ifeq ($(NO_LAPACKE), 1) CCOMMON_OPT += -DNO_LAPACKE endif ifeq ($(NO_AVX), 1) CCOMMON_OPT += -DNO_AVX endif ifeq ($(ARCH), x86) CCOMMON_OPT += -DNO_AVX endif ifeq ($(NO_AVX2), 1) CCOMMON_OPT += -DNO_AVX2 endif ifeq ($(NO_AVX512), 1) CCOMMON_OPT += -DNO_AVX512 endif ifdef SMP CCOMMON_OPT += -DSMP_SERVER ifeq ($(ARCH), mips64) USE_SIMPLE_THREADED_LEVEL3 = 1 endif ifeq ($(USE_OPENMP), 1) # USE_SIMPLE_THREADED_LEVEL3 = 1 # NO_AFFINITY = 1 CCOMMON_OPT += -DUSE_OPENMP endif ifeq ($(BIGNUMA), 1) CCOMMON_OPT += -DBIGNUMA endif endif ifeq ($(NO_WARMUP), 1) CCOMMON_OPT += -DNO_WARMUP endif ifeq ($(CONSISTENT_FPCSR), 1) CCOMMON_OPT += -DCONSISTENT_FPCSR endif # Only for development # CCOMMON_OPT += -DPARAMTEST # CCOMMON_OPT += -DPREFETCHTEST # CCOMMON_OPT += -DNO_SWITCHING # USE_PAPI = 1 ifdef USE_PAPI CCOMMON_OPT += -DUSE_PAPI EXTRALIB += -lpapi -lperfctr endif ifdef BUFFERSIZE CCOMMON_OPT += -DBUFFERSIZE=$(BUFFERSIZE) endif ifdef DYNAMIC_THREADS CCOMMON_OPT += -DDYNAMIC_THREADS endif CCOMMON_OPT += -DMAX_CPU_NUMBER=$(NUM_THREADS) CCOMMON_OPT += -DMAX_PARALLEL_NUMBER=$(NUM_PARALLEL) ifdef USE_SIMPLE_THREADED_LEVEL3 CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3 endif ifeq ($(USE_TLS), 1) CCOMMON_OPT += -DUSE_TLS endif ifeq ($(BUILD_BFLOAT16), 1) CCOMMON_OPT += -DBUILD_BFLOAT16 endif ifeq ($(BUILD_SINGLE), 1) CCOMMON_OPT += -DBUILD_SINGLE=1 endif ifeq ($(BUILD_DOUBLE), 1) CCOMMON_OPT += -DBUILD_DOUBLE=1 endif ifeq ($(BUILD_COMPLEX), 1) CCOMMON_OPT += -DBUILD_COMPLEX=1 endif ifeq ($(BUILD_COMPLEX16), 1) CCOMMON_OPT += -DBUILD_COMPLEX16=1 endif CCOMMON_OPT += -DVERSION=\"$(VERSION)\" ifndef SYMBOLPREFIX SYMBOLPREFIX = endif ifndef SYMBOLSUFFIX SYMBOLSUFFIX = endif ifndef LIBSONAMEBASE LIBSONAMEBASE = openblas endif ifndef LIBNAMESUFFIX LIBNAMEBASE = $(SYMBOLPREFIX)$(LIBSONAMEBASE)$(SYMBOLSUFFIX) else LIBNAMEBASE = $(SYMBOLPREFIX)$(LIBSONAMEBASE)$(SYMBOLSUFFIX)_$(LIBNAMESUFFIX) endif ifeq ($(OSNAME), CYGWIN_NT) LIBPREFIX = cyg$(LIBNAMEBASE) else LIBPREFIX = lib$(LIBNAMEBASE) endif KERNELDIR = $(TOPDIR)/kernel/$(ARCH) include $(TOPDIR)/Makefile.$(ARCH) ifneq ($(C_COMPILER), PGI) ifneq ($(C_COMPILER), SUN) CCOMMON_OPT += -UASMNAME -UASMFNAME -UNAME -UCNAME -UCHAR_NAME -UCHAR_CNAME endif endif CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\" ifeq ($(CORE), PPC440) CCOMMON_OPT += -DALLOC_QALLOC endif ifeq ($(CORE), PPC440FP2) STATIC_ALLOCATION = 1 endif ifneq ($(OSNAME), Linux) NO_AFFINITY = 1 endif ifneq ($(ARCH), x86_64) ifneq ($(ARCH), x86) NO_AFFINITY = 1 endif endif ifdef NO_AFFINITY ifeq ($(NO_AFFINITY), 0) override undefine NO_AFFINITY else CCOMMON_OPT += -DNO_AFFINITY endif endif ifdef FUNCTION_PROFILE CCOMMON_OPT += -DFUNCTION_PROFILE endif ifdef HUGETLB_ALLOCATION CCOMMON_OPT += -DALLOC_HUGETLB endif ifdef HUGETLBFILE_ALLOCATION CCOMMON_OPT += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION) endif ifdef STATIC_ALLOCATION CCOMMON_OPT += -DALLOC_STATIC endif ifdef DEVICEDRIVER_ALLOCATION CCOMMON_OPT += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\" endif ifdef MIXED_MEMORY_ALLOCATION CCOMMON_OPT += -DMIXED_MEMORY_ALLOCATION endif ifeq ($(OSNAME), SunOS) TAR = gtar PATCH = gpatch GREP = ggrep AWK = nawk else TAR = tar PATCH = patch GREP = grep AWK = awk endif ifndef MD5SUM MD5SUM = md5sum endif REVISION = -r$(VERSION) MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION))) ifeq ($(DEBUG), 1) COMMON_OPT += -g endif ifeq ($(DEBUG), 1) FCOMMON_OPT += -g endif ifndef COMMON_OPT COMMON_OPT = -O2 endif ifndef FCOMMON_OPT FCOMMON_OPT = -O2 -frecursive endif override CFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) override PFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF) override FFLAGS += $(COMMON_OPT) $(FCOMMON_OPT) override FPFLAGS += $(FCOMMON_OPT) $(COMMON_PROF) #MAKEOVERRIDES = ifeq ($(NEED_PIC), 1) ifeq (,$(findstring PIC,$(FFLAGS))) override FFLAGS += -fPIC endif endif #For LAPACK Fortran codes. #Disable -fopenmp for LAPACK Fortran codes on Windows. ifdef OS_WINDOWS LAPACK_FFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FFLAGS)) LAPACK_FPFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FPFLAGS)) else LAPACK_FFLAGS := $(FFLAGS) LAPACK_FPFLAGS := $(FPFLAGS) endif ifeq ($(F_COMPILER),NAG) LAPACK_FFLAGS := $(filter-out -msse3 -mssse3 -msse4.1 -mavx -mavx2 -mskylake-avx512 ,$(FFLAGS)) FFLAGS := $(filter-out -msse3 -mssse3 -msse4.1 -mavx -mavx2 -mskylake-avx512 ,$(FFLAGS)) endif ifeq ($(F_COMPILER),CRAY) LAPACK_FFLAGS := $(filter-out -msse3 -mssse3 -msse4.1 -mavx -mavx2 -mskylake-avx512 ,$(FFLAGS)) FFLAGS := $(filter-out -msse3 -mssse3 -msse4.1 -mavx -mavx2 -mskylake-avx512 ,$(FFLAGS)) endif LAPACK_CFLAGS = $(CFLAGS) LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H ifdef INTERFACE64 ifneq ($(INTERFACE64), 0) LAPACK_CFLAGS += -DLAPACK_ILP64 endif endif ifdef OS_WINDOWS LAPACK_CFLAGS += -DOPENBLAS_OS_WINDOWS LAPACK_CFLAGS += -DLAPACK_COMPLEX_STRUCTURE endif ifeq ($(C_COMPILER), LSB) LAPACK_CFLAGS += -DLAPACK_COMPLEX_STRUCTURE endif ifndef SUFFIX SUFFIX = o endif ifndef PSUFFIX PSUFFIX = po endif ifndef LIBSUFFIX LIBSUFFIX = a endif ifneq ($(DYNAMIC_ARCH), 1) ifndef SMP LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX) LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX) else LIBNAME = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX) LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX) endif else ifndef SMP LIBNAME = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX) LIBNAME_P = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX) else LIBNAME = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX) LIBNAME_P = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX) endif endif LIBDLLNAME = $(LIBPREFIX).dll IMPLIBNAME = lib$(LIBNAMEBASE).dll.a ifneq ($(OSNAME), AIX) LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.so) else LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.a) endif LIBDYNNAME = $(LIBNAME:.$(LIBSUFFIX)=.dylib) LIBDEFNAME = $(LIBNAME:.$(LIBSUFFIX)=.def) LIBEXPNAME = $(LIBNAME:.$(LIBSUFFIX)=.exp) LIBZIPNAME = $(LIBNAME:.$(LIBSUFFIX)=.zip) LIBS = $(TOPDIR)/$(LIBNAME) LIBS_P = $(TOPDIR)/$(LIBNAME_P) LIB_COMPONENTS = BLAS ifneq ($(NO_CBLAS), 1) LIB_COMPONENTS += CBLAS endif ifneq ($(NO_LAPACK), 1) LIB_COMPONENTS += LAPACK ifneq ($(NO_LAPACKE), 1) LIB_COMPONENTS += LAPACKE endif ifeq ($(BUILD_RELAPACK), 1) LIB_COMPONENTS += ReLAPACK endif endif ifeq ($(ONLY_CBLAS), 1) LIB_COMPONENTS = CBLAS endif export OSNAME export ARCH export CORE export LIBCORE export __BYTE_ORDER__ export ELF_VERSION export PGCPATH export CONFIG export CC export FC export BU export FU export NEED2UNDERSCORES export USE_THREAD export NUM_THREADS export NUM_CORES export SMP export MAKEFILE_RULE export NEED_PIC export BINARY export BINARY32 export BINARY64 export F_COMPILER export C_COMPILER export USE_OPENMP export CROSS export CROSS_SUFFIX export NOFORTRAN export C_LAPACK export NO_FBLAS export EXTRALIB export CEXTRALIB export FEXTRALIB export HAVE_SSE export HAVE_SSE2 export HAVE_SSE3 export HAVE_SSSE3 export HAVE_SSE4_1 export HAVE_SSE4_2 export HAVE_SSE4A export HAVE_SSE5 export HAVE_AVX export HAVE_AVX2 export HAVE_FMA3 export HAVE_VFP export HAVE_VFPV3 export HAVE_VFPV4 export HAVE_NEON ifndef NO_MSA export HAVE_MSA export MSA_FLAGS endif export KERNELDIR export FUNCTION_PROFILE export TARGET_CORE export NO_AVX512 export NO_AVX2 export BUILD_BFLOAT16 export SBGEMM_UNROLL_M export SBGEMM_UNROLL_N export SGEMM_UNROLL_M export SGEMM_UNROLL_N export DGEMM_UNROLL_M export DGEMM_UNROLL_N export QGEMM_UNROLL_M export QGEMM_UNROLL_N export CGEMM_UNROLL_M export CGEMM_UNROLL_N export ZGEMM_UNROLL_M export ZGEMM_UNROLL_N export XGEMM_UNROLL_M export XGEMM_UNROLL_N export CGEMM3M_UNROLL_M export CGEMM3M_UNROLL_N export ZGEMM3M_UNROLL_M export ZGEMM3M_UNROLL_N export XGEMM3M_UNROLL_M export XGEMM3M_UNROLL_N ifdef USE_CUDA export CUDADIR export CUCC export CUFLAGS export CULIB endif .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f .f.$(SUFFIX): $(FC) $(FFLAGS) -c $< -o $(@F) .f.$(PSUFFIX): $(FC) $(FPFLAGS) -pg -c $< -o $(@F) ifdef BINARY64 PATHSCALEPATH = /opt/pathscale/lib/3.1 PGIPATH = /opt/pgi/linux86-64/7.1-5/lib else PATHSCALEPATH = /opt/pathscale/lib/3.1/32 PGIPATH = /opt/pgi/linux86/7.1-5/lib endif ACMLPATH = /opt/acml/4.3.0 ifneq ($(OSNAME), Darwin) MKLPATH = /opt/intel/mkl/10.2.2.025/lib else MKLPATH = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib endif ATLASPATH = /opt/atlas/3.9.17/opteron FLAMEPATH = $(HOME)/flame/lib ifneq ($(OSNAME), SunOS) SUNPATH = /opt/sunstudio12.1 else SUNPATH = /opt/SUNWspro endif