2 # Include user definition
5 # TO suppress recursive includes
12 ifndef NETLIB_LAPACK_DIR
13 NETLIB_LAPACK_DIR = $(TOPDIR)/lapack-3.4.2
17 # - Only set if not specified on the command line or inherited from the environment.
18 # - CC is an implicit variable so neither '?=' or 'ifndef' can be used.
19 # http://stackoverflow.com/questions/4029274/mingw-and-make-variables
20 # - Default value is 'cc' which is not always a valid command (e.g. MinGW).
21 ifeq ($(origin CC),default)
25 # Default Fortran compiler (FC) is selected by f_check.
28 include $(TOPDIR)/Makefile.rule
30 include $(TOPDIR)/$(MAKEFILE_RULE)
34 # Beginning of system configuration
42 GETARCH_FLAGS := -DFORCE_$(TARGET)
45 #TARGET_CORE will override TARGET which is used in DYNAMIC_ARCH=1.
48 GETARCH_FLAGS := -DFORCE_$(TARGET_CORE)
52 GETARCH_FLAGS += -DUSE64BITINT
55 ifndef GEMM_MULTITHREAD_THRESHOLD
56 GEMM_MULTITHREAD_THRESHOLD=50
58 GETARCH_FLAGS += -DGEMM_MULTITHREAD_THRESHOLD=$(GEMM_MULTITHREAD_THRESHOLD)
61 GETARCH_FLAGS += -DNO_AVX
68 # This operation is expensive, so execution should be once.
69 ifndef GOTOBLAS_MAKEFILE
70 export GOTOBLAS_MAKEFILE = 1
72 # Generating Makefile.conf and config.h
73 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)
76 include $(TOPDIR)/Makefile.conf
78 include $(TOPDIR)/Makefile_kernel.conf
84 NUM_THREADS = $(NUM_CORES)
87 ifeq ($(NUM_THREADS), 1)
88 override USE_THREAD = 0
92 ifeq ($(USE_THREAD), 0)
98 ifeq ($(NUM_THREAD), 1)
111 AR = $(CROSS_SUFFIX)ar
112 AS = $(CROSS_SUFFIX)as
113 LD = $(CROSS_SUFFIX)ld
114 RANLIB = $(CROSS_SUFFIX)ranlib
115 NM = $(CROSS_SUFFIX)nm
116 DLLWRAP = $(CROSS_SUFFIX)dllwrap
119 # OS dependent settings
122 ifeq ($(OSNAME), Darwin)
123 export MACOSX_DEPLOYMENT_TARGET=10.2
127 ifeq ($(OSNAME), FreeBSD)
131 ifeq ($(OSNAME), NetBSD)
135 ifeq ($(OSNAME), Linux)
139 ifeq ($(OSNAME), AIX)
143 ifeq ($(OSNAME), WINNT)
147 EXTRALIB += -defaultlib:advapi32
152 ifeq ($(C_COMPILER), GCC)
153 #Test for supporting MS_ABI
154 GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
155 GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4)
156 GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 7)
157 ifeq ($(GCCVERSIONGT4), 1)
158 # GCC Majar version > 4
159 # It is compatible with MSVC ABI.
160 CCOMMON_OPT += -DMS_ABI
163 ifeq ($(GCCVERSIONGTEQ4), 1)
164 ifeq ($(GCCMINORVERSIONGTEQ7), 1)
166 # It is compatible with MSVC ABI.
167 CCOMMON_OPT += -DMS_ABI
174 ifeq ($(OSNAME), Interix)
178 INTERIX_TOOL_DIR = /opt/gcc.3.3/i586-pc-interix3/bin
181 ifeq ($(OSNAME), CYGWIN_NT)
186 ifneq ($(OSNAME), WINNT)
187 ifneq ($(OSNAME), CYGWIN_NT)
188 ifneq ($(OSNAME), Interix)
190 EXTRALIB += -lpthread
197 CCOMMON_OPT += -DQUAD_PRECISION
202 ifneq ($(ARCH), x86_64)
208 CCOMMON_OPT += -DUTEST_CHECK
213 CCOMMON_OPT += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU)
217 # Architecture dependent settings
224 ifndef NO_EXPRECISION
225 ifeq ($(F_COMPILER), GFORTRAN)
226 ifeq ($(C_COMPILER), GCC)
228 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
229 FCOMMON_OPT += -m128bit-long-double
235 ifeq ($(ARCH), x86_64)
236 ifndef NO_EXPRECISION
237 ifeq ($(F_COMPILER), GFORTRAN)
238 ifeq ($(C_COMPILER), GCC)
240 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
241 FCOMMON_OPT += -m128bit-long-double
247 ifeq ($(C_COMPILER), INTEL)
248 CCOMMON_OPT += -wd981
251 ifeq ($(USE_OPENMP), 1)
252 ifeq ($(C_COMPILER), GCC)
253 CCOMMON_OPT += -fopenmp
256 ifeq ($(C_COMPILER), INTEL)
257 CCOMMON_OPT += -openmp
260 ifeq ($(C_COMPILER), PGI)
264 ifeq ($(C_COMPILER), OPEN64)
266 CEXTRALIB += -lstdc++
269 ifeq ($(C_COMPILER), PATHSCALE)
275 ifeq ($(DYNAMIC_ARCH), 1)
277 DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \
278 CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
280 DYNAMIC_CORE += SANDYBRIDGE BULLDOZER
284 ifeq ($(ARCH), x86_64)
285 DYNAMIC_CORE = PRESCOTT CORE2 PENRYN DUNNINGTON NEHALEM OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
287 DYNAMIC_CORE += SANDYBRIDGE BULLDOZER
300 ifeq ($(F_COMPILER), GFORTRAN)
301 ifeq ($(C_COMPILER), GCC)
303 # CCOMMON_OPT += -DEXPRECISION
308 ifeq ($(ARCH), mips64)
312 ifeq ($(ARCH), alpha)
318 # C Compiler dependent settings
321 ifeq ($(C_COMPILER), GCC)
323 COMMON_PROF += -fno-inline
324 NO_UNINITIALIZED_WARN = -Wno-uninitialized
328 ifeq ($(ARCH), mips64)
330 CCOMMON_OPT += -mabi=64
332 CCOMMON_OPT += -mabi=n32
337 ifeq ($(CORE), LOONGSON3A)
338 CCOMMON_OPT += -march=mips64
339 FCOMMON_OPT += -march=mips64
342 ifeq ($(CORE), LOONGSON3B)
343 CCOMMON_OPT += -march=mips64
344 FCOMMON_OPT += -march=mips64
347 ifeq ($(OSNAME), AIX)
353 ifndef BINARY_DEFINED
363 ifeq ($(C_COMPILER), PGI)
365 CCOMMON_OPT += -tp p7-64
367 CCOMMON_OPT += -tp p7
371 ifeq ($(C_COMPILER), PATHSCALE)
380 # Fortran Compiler dependent settings
383 ifeq ($(F_COMPILER), G77)
384 CCOMMON_OPT += -DF_INTERFACE_G77
386 ifndef NO_BINARY_MODE
395 ifeq ($(F_COMPILER), G95)
396 CCOMMON_OPT += -DF_INTERFACE_G95
398 ifndef NO_BINARY_MODE
407 ifeq ($(F_COMPILER), GFORTRAN)
408 CCOMMON_OPT += -DF_INTERFACE_GFORT
410 EXTRALIB += -lgfortran
412 ifeq ($(ARCH), mips64)
414 FCOMMON_OPT += -mabi=64
416 FCOMMON_OPT += -mabi=n32
423 FCOMMON_OPT += -fdefault-integer-8
430 FCOMMON_OPT += -fopenmp
434 ifeq ($(F_COMPILER), INTEL)
435 CCOMMON_OPT += -DF_INTERFACE_INTEL
440 FCOMMON_OPT += -openmp
444 ifeq ($(F_COMPILER), FUJITSU)
445 CCOMMON_OPT += -DF_INTERFACE_FUJITSU
447 FCOMMON_OPT += -openmp
451 ifeq ($(F_COMPILER), IBM)
452 CCOMMON_OPT += -DF_INTERFACE_IBM
453 # FCOMMON_OPT += -qarch=440
457 FCOMMON_OPT += -qintsize=8
463 FCOMMON_OPT += -openmp
467 ifeq ($(F_COMPILER), PGI)
468 CCOMMON_OPT += -DF_INTERFACE_PGI
469 COMMON_PROF += -DPGICOMPILER
474 FCOMMON_OPT += -tp p7-64
476 FCOMMON_OPT += -tp p7
483 ifeq ($(F_COMPILER), PATHSCALE)
484 CCOMMON_OPT += -DF_INTERFACE_PATHSCALE
491 ifneq ($(ARCH), mips64)
499 FCOMMON_OPT += -mabi=64
501 FCOMMON_OPT += -mabi=n32
510 ifeq ($(F_COMPILER), OPEN64)
511 CCOMMON_OPT += -DF_INTERFACE_OPEN64
524 FEXTRALIB += -lstdc++
529 ifeq ($(C_COMPILER), OPEN64)
537 ifeq ($(C_COMPILER), SUN)
546 ifeq ($(F_COMPILER), SUN)
547 CCOMMON_OPT += -DF_INTERFACE_SUN
554 FCOMMON_OPT += -xopenmp=parallel
558 ifeq ($(F_COMPILER), COMPAQ)
559 CCOMMON_OPT += -DF_INTERFACE_COMPAQ
561 FCOMMON_OPT += -openmp
572 ifeq ($(NEED_PIC), 1)
573 ifeq ($(C_COMPILER), IBM)
574 CCOMMON_OPT += -qpic=large
578 ifeq ($(F_COMPILER), SUN)
585 ifeq ($(DYNAMIC_ARCH), 1)
586 CCOMMON_OPT += -DDYNAMIC_ARCH
589 ifeq ($(NO_LAPACK), 1)
590 CCOMMON_OPT += -DNO_LAPACK
591 #Disable LAPACK C interface
595 ifeq ($(NO_LAPACKE), 1)
596 CCOMMON_OPT += -DNO_LAPACKE
600 CCOMMON_OPT += -DNO_AVX
604 CCOMMON_OPT += -DSMP_SERVER
606 ifeq ($(ARCH), mips64)
607 ifneq ($(CORE), LOONGSON3B)
608 USE_SIMPLE_THREADED_LEVEL3 = 1
612 ifeq ($(USE_OPENMP), 1)
613 # USE_SIMPLE_THREADED_LEVEL3 = 1
615 CCOMMON_OPT += -DUSE_OPENMP
620 ifeq ($(NO_WARMUP), 1)
621 CCOMMON_OPT += -DNO_WARMUP
624 ifeq ($(CONSISTENT_FPCSR), 1)
625 CCOMMON_OPT += -DCONSISTENT_FPCSR
628 # Only for development
629 # CCOMMON_OPT += -DPARAMTEST
630 # CCOMMON_OPT += -DPREFETCHTEST
631 # CCOMMON_OPT += -DNO_SWITCHING
635 CCOMMON_OPT += -DUSE_PAPI
636 EXTRALIB += -lpapi -lperfctr
639 ifdef DYNAMIC_THREADS
640 CCOMMON_OPT += -DDYNAMIC_THREADS
643 CCOMMON_OPT += -DMAX_CPU_NUMBER=$(NUM_THREADS)
645 ifdef USE_SIMPLE_THREADED_LEVEL3
646 CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3
650 LIBPREFIX = libopenblas
652 LIBPREFIX = libopenblas_$(LIBNAMESUFFIX)
655 KERNELDIR = $(TOPDIR)/kernel/$(ARCH)
657 include $(TOPDIR)/Makefile.$(ARCH)
659 CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
661 ifeq ($(CORE), PPC440)
662 CCOMMON_OPT += -DALLOC_QALLOC
665 ifeq ($(CORE), PPC440FP2)
666 STATIC_ALLOCATION = 1
669 ifneq ($(OSNAME), Linux)
673 ifneq ($(ARCH), x86_64)
675 ifneq ($(CORE), LOONGSON3B)
682 CCOMMON_OPT += -DNO_AFFINITY
685 ifdef FUNCTION_PROFILE
686 CCOMMON_OPT += -DFUNCTION_PROFILE
689 ifdef HUGETLB_ALLOCATION
690 CCOMMON_OPT += -DALLOC_HUGETLB
693 ifdef HUGETLBFILE_ALLOCATION
694 CCOMMON_OPT += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
697 ifdef STATIC_ALLOCATION
698 CCOMMON_OPT += -DALLOC_STATIC
701 ifdef DEVICEDRIVER_ALLOCATION
702 CCOMMON_OPT += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
705 ifdef MIXED_MEMORY_ALLOCATION
706 CCOMMON_OPT += -DMIXED_MEMORY_ALLOCATION
709 ifeq ($(OSNAME), SunOS)
725 REVISION = -r$(VERSION)
726 MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
737 override CFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
738 override PFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
740 override FFLAGS += $(COMMON_OPT) $(FCOMMON_OPT)
741 override FPFLAGS += $(COMMON_OPT) $(FCOMMON_OPT) $(COMMON_PROF)
756 ifneq ($(DYNAMIC_ARCH), 1)
758 LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
759 LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
761 LIBNAME = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
762 LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
766 LIBNAME = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
767 LIBNAME_P = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
769 LIBNAME = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
770 LIBNAME_P = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
775 LIBDLLNAME = $(LIBPREFIX).dll
776 LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.so)
777 LIBDYNNAME = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
778 LIBDEFNAME = $(LIBNAME:.$(LIBSUFFIX)=.def)
779 LIBEXPNAME = $(LIBNAME:.$(LIBSUFFIX)=.exp)
780 LIBZIPNAME = $(LIBNAME:.$(LIBSUFFIX)=.zip)
782 LIBS = $(TOPDIR)/$(LIBNAME)
783 LIBS_P = $(TOPDIR)/$(LIBNAME_P)
823 export FUNCTION_PROFILE
826 export SGEMM_UNROLL_M
827 export SGEMM_UNROLL_N
828 export DGEMM_UNROLL_M
829 export DGEMM_UNROLL_N
830 export QGEMM_UNROLL_M
831 export QGEMM_UNROLL_N
832 export CGEMM_UNROLL_M
833 export CGEMM_UNROLL_N
834 export ZGEMM_UNROLL_M
835 export ZGEMM_UNROLL_N
836 export XGEMM_UNROLL_M
837 export XGEMM_UNROLL_N
846 .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
849 $(FC) $(FFLAGS) -c $< -o $(@F)
852 $(FC) $(FPFLAGS) -pg -c $< -o $(@F)
856 PATHSCALEPATH = /opt/pathscale/lib/3.1
857 PGIPATH = /opt/pgi/linux86-64/7.1-5/lib
859 PATHSCALEPATH = /opt/pathscale/lib/3.1/32
860 PGIPATH = /opt/pgi/linux86/7.1-5/lib
863 ACMLPATH = /opt/acml/4.3.0
864 ifneq ($(OSNAME), Darwin)
865 MKLPATH = /opt/intel/mkl/10.2.2.025/lib
867 MKLPATH = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
869 ATLASPATH = /opt/atlas/3.9.17/opteron
870 FLAMEPATH = $(HOME)/flame/lib
871 ifneq ($(OSNAME), SunOS)
872 SUNPATH = /opt/sunstudio12.1
874 SUNPATH = /opt/SUNWspro