ROOT ACCESS USERNAME ******** PW ******** INCLUDED = 1 ifndef TOPDIR TOPDIR = . endif NETLIB_LAPACK_DIR = $(TOPDIR)/lapack-netlib ifeq ($(origin CC),default) CC = gcc UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Darwin) CC = clang endif endif ifndef MAKEFILE_RULE include $(TOPDIR)/Makefile.rule else include $(TOPDIR)/$(MAKEFILE_RULE) endif ifndef HOSTCC HOSTCC = $(CC) endif ifdef TARGET GETARCH_FLAGS := -DFORCE_$(TARGET) endif ifeq ($(BINARY), 32) ifeq ($(TARGET), HASWELL) 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 endif ifdef TARGET_CORE GETARCH_FLAGS := -DFORCE_$(TARGET_CORE) endif ifeq ($(BINARY), 32) ifeq ($(TARGET_CORE), HASWELL) 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 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 endif ifeq ($(NO_AVX2), 1) GETARCH_FLAGS += -DNO_AVX2 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) 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 ifndef GOTOBLAS_MAKEFILE export GOTOBLAS_MAKEFILE = 1 DUMMY := $(shell $(MAKE) -C $(TOPDIR) -f Makefile.prebuild CC="$(CC)" FC="$(FC)" HOSTCC="$(HOSTCC)" CFLAGS="$(GETARCH_FLAGS)" BINARY=$(BINARY) USE_OPENMP=$(USE_OPENMP) TARGET_CORE=$(TARGET_CORE) ONLY_CBLAS=$(ONLY_CBLAS) all) ifndef TARGET_CORE include $(TOPDIR)/Makefile.conf else include $(TOPDIR)/Makefile_kernel.conf endif endif ifndef NUM_THREADS NUM_THREADS = $(NUM_CORES) endif ifeq ($(NUM_THREADS), 1) override USE_THREAD = 0 endif ifdef USE_THREAD ifeq ($(USE_THREAD), 0) SMP = else SMP = 1 endif else ifeq ($(NUM_THREAD), 1) SMP = else SMP = 1 endif 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 # # OS dependent settings # ifeq ($(OSNAME), Darwin) export MACOSX_DEPLOYMENT_TARGET=10.2 MD5SUM = md5 -r endif ifeq ($(OSNAME), FreeBSD) MD5SUM = md5 -r endif ifeq ($(OSNAME), NetBSD) MD5SUM = md5 -n endif ifeq ($(OSNAME), Linux) EXTRALIB += -lm NO_EXPRECISION = 1 endif ifeq ($(OSNAME), AIX) EXTRALIB += -lm 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 ifeq ($(C_COMPILER), GCC) #Test for supporting MS_ABI GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4) GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4) GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 7) ifeq ($(GCCVERSIONGT4), 1) # GCC Majar 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 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 endif ifneq ($(OSNAME), WINNT) ifneq ($(OSNAME), CYGWIN_NT) ifneq ($(OSNAME), Interix) ifdef SMP EXTRALIB += -lpthread 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 # # Architecture dependent settings # ifeq ($(ARCH), x86) ifndef BINARY NO_BINARY_MODE = 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) 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) # ifeq logical or. GCC or LSB ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB)) CCOMMON_OPT += -fopenmp endif ifeq ($(C_COMPILER), CLANG) $(error OpenBLAS: Clang didn't support OpenMP yet.) CCOMMON_OPT += -fopenmp endif ifeq ($(C_COMPILER), INTEL) CCOMMON_OPT += -openmp 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 PENRYN DUNNINGTON NEHALEM OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO ifneq ($(NO_AVX), 1) DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER endif ifneq ($(NO_AVX2), 1) DYNAMIC_CORE += HASWELL endif endif ifndef DYNAMIC_CORE 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), mips64) 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 endif ifeq ($(ARCH), arm64) 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 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), mips64) ifdef BINARY64 CCOMMON_OPT += -mabi=64 else CCOMMON_OPT += -mabi=n32 endif BINARY_DEFINED = 1 endif ifeq ($(CORE), LOONGSON3A) CCOMMON_OPT += -march=mips64 FCOMMON_OPT += -march=mips64 endif ifeq ($(CORE), LOONGSON3B) CCOMMON_OPT += -march=mips64 FCOMMON_OPT += -march=mips64 endif ifeq ($(OSNAME), AIX) BINARY_DEFINED = 1 endif endif ifndef BINARY_DEFINED ifdef BINARY64 CCOMMON_OPT += -m64 else CCOMMON_OPT += -m32 endif endif endif ifeq ($(C_COMPILER), PGI) ifdef BINARY64 CCOMMON_OPT += -tp p7-64 else CCOMMON_OPT += -tp p7 endif endif ifeq ($(C_COMPILER), PATHSCALE) ifdef BINARY64 CCOMMON_OPT += -m64 else CCOMMON_OPT += -m32 endif endif # # Fortran Compiler dependent settings # ifeq ($(F_COMPILER), G77) CCOMMON_OPT += -DF_INTERFACE_G77 FCOMMON_OPT += -Wall ifndef NO_BINARY_MODE ifdef BINARY64 FCOMMON_OPT += -m64 else FCOMMON_OPT += -m32 endif endif endif ifeq ($(F_COMPILER), G95) CCOMMON_OPT += -DF_INTERFACE_G95 FCOMMON_OPT += -Wall ifndef NO_BINARY_MODE ifdef BINARY64 FCOMMON_OPT += -m64 else FCOMMON_OPT += -m32 endif endif endif ifeq ($(F_COMPILER), GFORTRAN) CCOMMON_OPT += -DF_INTERFACE_GFORT FCOMMON_OPT += -Wall #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc ifneq ($(NO_LAPACK), 1) EXTRALIB += -lgfortran endif ifdef NO_BINARY_MODE ifeq ($(ARCH), mips64) ifdef BINARY64 FCOMMON_OPT += -mabi=64 else FCOMMON_OPT += -mabi=n32 endif endif else ifdef BINARY64 FCOMMON_OPT += -m64 ifdef INTERFACE64 ifneq ($(INTERFACE64), 0) FCOMMON_OPT += -fdefault-integer-8 endif endif else FCOMMON_OPT += -m32 endif endif ifdef USE_OPENMP FCOMMON_OPT += -fopenmp endif endif ifeq ($(F_COMPILER), INTEL) CCOMMON_OPT += -DF_INTERFACE_INTEL ifdef INTERFACE64 ifneq ($(INTERFACE64), 0) FCOMMON_OPT += -i8 endif endif ifdef USE_OPENMP FCOMMON_OPT += -openmp endif endif ifeq ($(F_COMPILER), FUJITSU) CCOMMON_OPT += -DF_INTERFACE_FUJITSU ifdef USE_OPENMP 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 ifdef USE_OPENMP 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 FCOMMON_OPT += -tp p7-64 else FCOMMON_OPT += -tp p7 endif ifdef USE_OPENMP 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 ifneq ($(ARCH), mips64) ifndef BINARY64 FCOMMON_OPT += -m32 else FCOMMON_OPT += -m64 endif else ifdef BINARY64 FCOMMON_OPT += -mabi=64 else FCOMMON_OPT += -mabi=n32 endif endif ifdef USE_OPENMP 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), mips64) ifndef BINARY64 FCOMMON_OPT += -n32 else FCOMMON_OPT += -n64 endif ifeq ($(CORE), LOONGSON3A) FCOMMON_OPT += -loongson3 -static endif