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=4
58 GETARCH_FLAGS += -DGEMM_MULTITHREAD_THRESHOLD=$(GEMM_MULTITHREAD_THRESHOLD)
61 GETARCH_FLAGS += -DNO_AVX
68 ifndef NO_PARALLEL_MAKE
71 GETARCH_FLAGS += -DNO_PARALLEL_MAKE=$(NO_PARALLEL_MAKE)
72 # This operation is expensive, so execution should be once.
73 ifndef GOTOBLAS_MAKEFILE
74 export GOTOBLAS_MAKEFILE = 1
76 # Generating Makefile.conf and config.h
77 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) all)
80 include $(TOPDIR)/Makefile.conf
82 include $(TOPDIR)/Makefile_kernel.conf
88 NUM_THREADS = $(NUM_CORES)
91 ifeq ($(NUM_THREADS), 1)
92 override USE_THREAD = 0
96 ifeq ($(USE_THREAD), 0)
102 ifeq ($(NUM_THREAD), 1)
115 AR = $(CROSS_SUFFIX)ar
116 AS = $(CROSS_SUFFIX)as
117 LD = $(CROSS_SUFFIX)ld
118 RANLIB = $(CROSS_SUFFIX)ranlib
119 NM = $(CROSS_SUFFIX)nm
120 DLLWRAP = $(CROSS_SUFFIX)dllwrap
123 # OS dependent settings
126 ifeq ($(OSNAME), Darwin)
127 export MACOSX_DEPLOYMENT_TARGET=10.2
131 ifeq ($(OSNAME), FreeBSD)
135 ifeq ($(OSNAME), NetBSD)
139 ifeq ($(OSNAME), Linux)
143 ifeq ($(OSNAME), AIX)
147 ifeq ($(OSNAME), WINNT)
151 EXTRALIB += -defaultlib:advapi32
156 ifeq ($(C_COMPILER), GCC)
157 #Test for supporting MS_ABI
158 GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
159 GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4)
160 GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 7)
161 ifeq ($(GCCVERSIONGT4), 1)
162 # GCC Majar version > 4
163 # It is compatible with MSVC ABI.
164 CCOMMON_OPT += -DMS_ABI
167 ifeq ($(GCCVERSIONGTEQ4), 1)
168 ifeq ($(GCCMINORVERSIONGTEQ7), 1)
170 # It is compatible with MSVC ABI.
171 CCOMMON_OPT += -DMS_ABI
178 ifeq ($(OSNAME), Interix)
182 INTERIX_TOOL_DIR = /opt/gcc.3.3/i586-pc-interix3/bin
185 ifeq ($(OSNAME), CYGWIN_NT)
190 ifneq ($(OSNAME), WINNT)
191 ifneq ($(OSNAME), CYGWIN_NT)
192 ifneq ($(OSNAME), Interix)
194 EXTRALIB += -lpthread
201 CCOMMON_OPT += -DQUAD_PRECISION
206 ifneq ($(ARCH), x86_64)
212 CCOMMON_OPT += -DUTEST_CHECK
217 CCOMMON_OPT += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU)
221 # Architecture dependent settings
228 ifndef NO_EXPRECISION
229 ifeq ($(F_COMPILER), GFORTRAN)
230 ifeq ($(C_COMPILER), GCC)
232 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
233 FCOMMON_OPT += -m128bit-long-double
239 ifeq ($(ARCH), x86_64)
240 ifndef NO_EXPRECISION
241 ifeq ($(F_COMPILER), GFORTRAN)
242 ifeq ($(C_COMPILER), GCC)
244 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
245 FCOMMON_OPT += -m128bit-long-double
251 ifeq ($(C_COMPILER), INTEL)
252 CCOMMON_OPT += -wd981
255 ifeq ($(USE_OPENMP), 1)
256 ifeq ($(C_COMPILER), GCC)
257 CCOMMON_OPT += -fopenmp
260 ifeq ($(C_COMPILER), INTEL)
261 CCOMMON_OPT += -openmp
264 ifeq ($(C_COMPILER), PGI)
268 ifeq ($(C_COMPILER), OPEN64)
270 CEXTRALIB += -lstdc++
273 ifeq ($(C_COMPILER), PATHSCALE)
279 ifeq ($(DYNAMIC_ARCH), 1)
281 DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \
282 CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
284 DYNAMIC_CORE += SANDYBRIDGE BULLDOZER
288 ifeq ($(ARCH), x86_64)
289 DYNAMIC_CORE = PRESCOTT CORE2 PENRYN DUNNINGTON NEHALEM OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
291 DYNAMIC_CORE += SANDYBRIDGE BULLDOZER
304 ifeq ($(F_COMPILER), GFORTRAN)
305 ifeq ($(C_COMPILER), GCC)
307 # CCOMMON_OPT += -DEXPRECISION
312 ifeq ($(ARCH), mips64)
316 ifeq ($(ARCH), alpha)
322 # C Compiler dependent settings
325 ifeq ($(C_COMPILER), GCC)
327 COMMON_PROF += -fno-inline
328 NO_UNINITIALIZED_WARN = -Wno-uninitialized
332 ifeq ($(ARCH), mips64)
334 CCOMMON_OPT += -mabi=64
336 CCOMMON_OPT += -mabi=n32
341 ifeq ($(CORE), LOONGSON3A)
342 CCOMMON_OPT += -march=mips64
343 FCOMMON_OPT += -march=mips64
346 ifeq ($(CORE), LOONGSON3B)
347 CCOMMON_OPT += -march=mips64
348 FCOMMON_OPT += -march=mips64
351 ifeq ($(OSNAME), AIX)
357 ifndef BINARY_DEFINED
367 ifeq ($(C_COMPILER), PGI)
369 CCOMMON_OPT += -tp p7-64
371 CCOMMON_OPT += -tp p7
375 ifeq ($(C_COMPILER), PATHSCALE)
384 # Fortran Compiler dependent settings
387 ifeq ($(F_COMPILER), G77)
388 CCOMMON_OPT += -DF_INTERFACE_G77
390 ifndef NO_BINARY_MODE
399 ifeq ($(F_COMPILER), G95)
400 CCOMMON_OPT += -DF_INTERFACE_G95
402 ifndef NO_BINARY_MODE
411 ifeq ($(F_COMPILER), GFORTRAN)
412 CCOMMON_OPT += -DF_INTERFACE_GFORT
414 EXTRALIB += -lgfortran
416 ifeq ($(ARCH), mips64)
418 FCOMMON_OPT += -mabi=64
420 FCOMMON_OPT += -mabi=n32
427 FCOMMON_OPT += -fdefault-integer-8
434 FCOMMON_OPT += -fopenmp
438 ifeq ($(F_COMPILER), INTEL)
439 CCOMMON_OPT += -DF_INTERFACE_INTEL
444 FCOMMON_OPT += -openmp
448 ifeq ($(F_COMPILER), FUJITSU)
449 CCOMMON_OPT += -DF_INTERFACE_FUJITSU
451 FCOMMON_OPT += -openmp
455 ifeq ($(F_COMPILER), IBM)
456 CCOMMON_OPT += -DF_INTERFACE_IBM
457 # FCOMMON_OPT += -qarch=440
461 FCOMMON_OPT += -qintsize=8
467 FCOMMON_OPT += -openmp
471 ifeq ($(F_COMPILER), PGI)
472 CCOMMON_OPT += -DF_INTERFACE_PGI
473 COMMON_PROF += -DPGICOMPILER
478 FCOMMON_OPT += -tp p7-64
480 FCOMMON_OPT += -tp p7
487 ifeq ($(F_COMPILER), PATHSCALE)
488 CCOMMON_OPT += -DF_INTERFACE_PATHSCALE
495 ifneq ($(ARCH), mips64)
503 FCOMMON_OPT += -mabi=64
505 FCOMMON_OPT += -mabi=n32
514 ifeq ($(F_COMPILER), OPEN64)
515 CCOMMON_OPT += -DF_INTERFACE_OPEN64
528 FEXTRALIB += -lstdc++
533 ifeq ($(C_COMPILER), OPEN64)
541 ifeq ($(C_COMPILER), SUN)
550 ifeq ($(F_COMPILER), SUN)
551 CCOMMON_OPT += -DF_INTERFACE_SUN
558 FCOMMON_OPT += -xopenmp=parallel
562 ifeq ($(F_COMPILER), COMPAQ)
563 CCOMMON_OPT += -DF_INTERFACE_COMPAQ
565 FCOMMON_OPT += -openmp
576 ifeq ($(NEED_PIC), 1)
577 ifeq ($(C_COMPILER), IBM)
578 CCOMMON_OPT += -qpic=large
582 ifeq ($(F_COMPILER), SUN)
589 ifeq ($(DYNAMIC_ARCH), 1)
590 CCOMMON_OPT += -DDYNAMIC_ARCH
593 ifeq ($(NO_LAPACK), 1)
594 CCOMMON_OPT += -DNO_LAPACK
595 #Disable LAPACK C interface
599 ifeq ($(NO_LAPACKE), 1)
600 CCOMMON_OPT += -DNO_LAPACKE
604 CCOMMON_OPT += -DNO_AVX
608 CCOMMON_OPT += -DSMP_SERVER
610 ifeq ($(ARCH), mips64)
611 ifneq ($(CORE), LOONGSON3B)
612 USE_SIMPLE_THREADED_LEVEL3 = 1
616 ifeq ($(USE_OPENMP), 1)
617 # USE_SIMPLE_THREADED_LEVEL3 = 1
619 CCOMMON_OPT += -DUSE_OPENMP
624 ifeq ($(NO_WARMUP), 1)
625 CCOMMON_OPT += -DNO_WARMUP
628 ifeq ($(CONSISTENT_FPCSR), 1)
629 CCOMMON_OPT += -DCONSISTENT_FPCSR
632 # Only for development
633 # CCOMMON_OPT += -DPARAMTEST
634 # CCOMMON_OPT += -DPREFETCHTEST
635 # CCOMMON_OPT += -DNO_SWITCHING
639 CCOMMON_OPT += -DUSE_PAPI
640 EXTRALIB += -lpapi -lperfctr
643 ifdef DYNAMIC_THREADS
644 CCOMMON_OPT += -DDYNAMIC_THREADS
647 CCOMMON_OPT += -DMAX_CPU_NUMBER=$(NUM_THREADS)
649 ifdef USE_SIMPLE_THREADED_LEVEL3
650 CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3
654 LIBPREFIX = libopenblas
656 LIBPREFIX = libopenblas_$(LIBNAMESUFFIX)
659 KERNELDIR = $(TOPDIR)/kernel/$(ARCH)
661 include $(TOPDIR)/Makefile.$(ARCH)
663 CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
665 ifeq ($(CORE), PPC440)
666 CCOMMON_OPT += -DALLOC_QALLOC
669 ifeq ($(CORE), PPC440FP2)
670 STATIC_ALLOCATION = 1
673 ifneq ($(OSNAME), Linux)
677 ifneq ($(ARCH), x86_64)
679 ifneq ($(CORE), LOONGSON3B)
686 CCOMMON_OPT += -DNO_AFFINITY
689 ifdef FUNCTION_PROFILE
690 CCOMMON_OPT += -DFUNCTION_PROFILE
693 ifdef HUGETLB_ALLOCATION
694 CCOMMON_OPT += -DALLOC_HUGETLB
697 ifdef HUGETLBFILE_ALLOCATION
698 CCOMMON_OPT += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
701 ifdef STATIC_ALLOCATION
702 CCOMMON_OPT += -DALLOC_STATIC
705 ifdef DEVICEDRIVER_ALLOCATION
706 CCOMMON_OPT += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
709 ifdef MIXED_MEMORY_ALLOCATION
710 CCOMMON_OPT += -DMIXED_MEMORY_ALLOCATION
713 ifeq ($(OSNAME), SunOS)
729 REVISION = -r$(VERSION)
730 MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
741 override CFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
742 override PFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
744 override FFLAGS += $(COMMON_OPT) $(FCOMMON_OPT)
745 override FPFLAGS += $(COMMON_OPT) $(FCOMMON_OPT) $(COMMON_PROF)
760 ifneq ($(DYNAMIC_ARCH), 1)
762 LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
763 LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
765 LIBNAME = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
766 LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
770 LIBNAME = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
771 LIBNAME_P = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
773 LIBNAME = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
774 LIBNAME_P = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
779 LIBDLLNAME = $(LIBPREFIX).dll
780 LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.so)
781 LIBDYNNAME = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
782 LIBDEFNAME = $(LIBNAME:.$(LIBSUFFIX)=.def)
783 LIBEXPNAME = $(LIBNAME:.$(LIBSUFFIX)=.exp)
784 LIBZIPNAME = $(LIBNAME:.$(LIBSUFFIX)=.zip)
786 LIBS = $(TOPDIR)/$(LIBNAME)
787 LIBS_P = $(TOPDIR)/$(LIBNAME_P)
827 export FUNCTION_PROFILE
830 export SGEMM_UNROLL_M
831 export SGEMM_UNROLL_N
832 export DGEMM_UNROLL_M
833 export DGEMM_UNROLL_N
834 export QGEMM_UNROLL_M
835 export QGEMM_UNROLL_N
836 export CGEMM_UNROLL_M
837 export CGEMM_UNROLL_N
838 export ZGEMM_UNROLL_M
839 export ZGEMM_UNROLL_N
840 export XGEMM_UNROLL_M
841 export XGEMM_UNROLL_N
850 .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
853 $(FC) $(FFLAGS) -c $< -o $(@F)
856 $(FC) $(FPFLAGS) -pg -c $< -o $(@F)
860 PATHSCALEPATH = /opt/pathscale/lib/3.1
861 PGIPATH = /opt/pgi/linux86-64/7.1-5/lib
863 PATHSCALEPATH = /opt/pathscale/lib/3.1/32
864 PGIPATH = /opt/pgi/linux86/7.1-5/lib
867 ACMLPATH = /opt/acml/4.3.0
868 ifneq ($(OSNAME), Darwin)
869 MKLPATH = /opt/intel/mkl/10.2.2.025/lib
871 MKLPATH = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
873 ATLASPATH = /opt/atlas/3.9.17/opteron
874 FLAMEPATH = $(HOME)/flame/lib
875 ifneq ($(OSNAME), SunOS)
876 SUNPATH = /opt/sunstudio12.1
878 SUNPATH = /opt/SUNWspro