# # Include user definition # # TO suppress recursive includes INCLUDED = 1 ifndef TOPDIR TOPDIR = . endif ifndef NETLIB_LAPACK_DIR NETLIB_LAPACK_DIR = $(TOPDIR)/lapack-3.4.1 endif # Default C compiler CC = gcc ifndef MAKEFILE_RULE include $(TOPDIR)/Makefile.rule else include $(TOPDIR)/$(MAKEFILE_RULE) endif # # Beginning of system configuration # ifndef HOSTCC HOSTCC = $(CC) endif ifdef TARGET GETARCH_FLAGS := -DFORCE_$(TARGET) endif #TARGET_CORE will override TARGET which is used in DYNAMIC_ARCH=1. # ifdef TARGET_CORE GETARCH_FLAGS := -DFORCE_$(TARGET_CORE) endif ifdef INTERFACE64 GETARCH_FLAGS += -DUSE64BITINT endif ifndef GEMM_MULTITHREAD_THRESHOLD GEMM_MULTITHREAD_THRESHOLD=4 endif GETARCH_FLAGS += -DGEMM_MULTITHREAD_THRESHOLD=$(GEMM_MULTITHREAD_THRESHOLD) # This operation is expensive, so execution should be once. ifndef GOTOBLAS_MAKEFILE export GOTOBLAS_MAKEFILE = 1 # Generating Makefile.conf and config.h DUMMY := $(shell $(MAKE) -C $(TOPDIR) -f Makefile.getarch CC="$(CC)" FC="$(FC)" HOSTCC="$(HOSTCC)" CFLAGS="$(GETARCH_FLAGS)" BINARY=$(BINARY) USE_OPENMP=$(USE_OPENMP) TARGET_CORE=$(TARGET_CORE) 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 # # OS dependent settings # ifeq ($(OSNAME), Darwin) export MACOSX_DEPLOYMENT_TARGET=10.2 MD5SUM = md5 -r endif ifeq ($(OSNAME), Linux) EXTRALIB += -lm endif ifeq ($(OSNAME), AIX) EXTRALIB += -lm endif ifeq ($(OSNAME), WINNT) NEED_PIC = 0 NO_EXPRECISION = 1 EXTRALIB += -defaultlib:advapi32 SUFFIX = obj PSUFFIX = pobj LIBSUFFIX = lib 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 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 ($(C_COMPILER), GCC) EXPRECISION = 1 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double FCOMMON_OPT += -m128bit-long-double endif endif endif endif ifeq ($(ARCH), x86_64) ifndef NO_EXPRECISION ifeq ($(F_COMPILER), GFORTRAN) ifeq ($(C_COMPILER), GCC) EXPRECISION = 1 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double FCOMMON_OPT += -m128bit-long-double endif endif endif endif ifeq ($(C_COMPILER), INTEL) CCOMMON_OPT += -wd981 endif ifeq ($(USE_OPENMP), 1) ifeq ($(C_COMPILER), GCC) 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 ifdef DYNAMIC_ARCH ifeq ($(ARCH), x86) DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \ CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA ATOM NANO endif ifeq ($(ARCH), x86_64) DYNAMIC_CORE = PRESCOTT CORE2 PENRYN DUNNINGTON NEHALEM OPTERON OPTERON_SSE3 BARCELONA ATOM NANO 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 # # C Compiler dependent settings # ifeq ($(C_COMPILER), GCC) CCOMMON_OPT += -Wall COMMON_PROF += -fno-inline NO_UNINITIALIZED_WARN = -Wno-uninitialized 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 EXTRALIB += -lgfortran 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 FCOMMON_OPT += -fdefault-integer-8 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 FCOMMON_OPT += -i8 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 FCOMMON_OPT += -qintsize=8 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 FCOMMON_OPT += -i8 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 FCOMMON_OPT += -i8 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 FCOMMON_OPT += -i8 endif endif ifndef BINARY64 FCOMMON_OPT += -m32 else FCOMMON_OPT += -m64 endif ifdef USE_OPENMP FEXTRALIB += -lstdc++ FCOMMON_OPT += -mp endif endif ifeq ($(C_COMPILER), OPEN64) ifndef BINARY64 CCOMMON_OPT += -m32 else CCOMMON_OPT += -m64 endif endif ifeq ($(C_COMPILER), SUN) CCOMMON_OPT += -w ifeq ($(ARCH), x86) CCOMMON_OPT += -m32 else FCOMMON_OPT += -m64 endif endif ifeq ($(F_COMPILER), SUN) CCOMMON_OPT += -DF_INTERFACE_SUN ifeq ($(ARCH), x86) FCOMMON_OPT += -m32 else FCOMMON_OPT += -m64 endif ifdef USE_OPENMP FCOMMON_OPT += -xopenmp=parallel endif endif ifeq ($(F_COMPILER), COMPAQ) CCOMMON_OPT += -DF_INTERFACE_COMPAQ ifdef USE_OPENMP FCOMMON_OPT += -openmp endif endif ifdef BINARY64 ifdef INTERFACE64 CCOMMON_OPT += #-DUSE64BITINT 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 FCOMMON_OPT += -fPIC endif endif ifeq ($(DYNAMIC_ARCH), 1) CCOMMON_OPT += -DDYNAMIC_ARCH 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 ifdef SMP CCOMMON_OPT += -DSMP_SERVER ifeq ($(ARCH), mips64) ifneq ($(CORE), LOONGSON3B) USE_SIMPLE_THREADED_LEVEL3 = 1 endif endif ifeq ($(USE_OPENMP), 1) # USE_SIMPLE_THREADED_LEVEL3 = 1 # NO_AFFINITY = 1 CCOMMON_OPT += -DUSE_OPENMP 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 DYNAMIC_THREADS CCOMMON_OPT += -DDYNAMIC_THREADS endif CCOMMON_OPT += -DMAX_CPU_NUMBER=$(NUM_THREADS) ifdef USE_SIMPLE_THREADED_LEVEL3 CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3 endif ifndef LIBNAMESUFFIX LIBPREFIX = libopenblas else LIBPREFIX = libopenblas_$(LIBNAMESUFFIX) endif KERNELDIR = $(TOPDIR)/kernel/$(ARCH) include $(TOPDIR)/Makefile.$(ARCH) 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) ifneq ($(CORE), LOONGSON3B) NO_AFFINITY = 1 endif endif endif ifdef NO_AFFINITY CCOMMON_OPT += -DNO_AFFINITY 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 else TAR = tar PATCH = patch GREP = grep endif ifndef MD5SUM MD5SUM = md5sum endif AWK = awk REVISION = -r$(VERSION) MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION))) CFLAGS = $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) PFLAGS = $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF) FFLAGS = $(COMMON_OPT) $(FCOMMON_OPT) FPFLAGS = $(COMMON_OPT) $(FCOMMON_OPT) $(COMMON_PROF) ifndef SUFFIX SUFFIX = o endif ifndef PSUFFIX PSUFFIX = po endif ifndef LIBSUFFIX LIBSUFFIX = a endif ifndef DYNAMIC_ARCH 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 LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.so) LIBDLLNAME = $(LIBNAME:.$(LIBSUFFIX)=.dll) LIBDYNNAME = $(LIBNAME:.$(LIBSUFFIX)=.dylib) LIBDEFNAME = $(LIBNAME:.$(LIBSUFFIX)=.def) LIBEXPNAME = $(LIBNAME:.$(LIBSUFFIX)=.exp) LIBZIPNAME = $(LIBNAME:.$(LIBSUFFIX)=.zip) LIBS = $(TOPDIR)/$(LIBNAME) LIBS_P = $(TOPDIR)/$(LIBNAME_P) export OSNAME export ARCH export CORE export LIBCORE export PGCPATH export CONFIG export CC export FC export BU export FU 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 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 KERNELDIR export FUNCTION_PROFILE export TARGET_CORE 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 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