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)
23 # Change the default compile to clang on Mac OSX.
24 # http://stackoverflow.com/questions/714100/os-detecting-makefile
25 UNAME_S := $(shell uname -s)
26 ifeq ($(UNAME_S),Darwin)
31 # Default Fortran compiler (FC) is selected by f_check.
34 include $(TOPDIR)/Makefile.rule
36 include $(TOPDIR)/$(MAKEFILE_RULE)
40 # Beginning of system configuration
48 GETARCH_FLAGS := -DFORCE_$(TARGET)
51 #TARGET_CORE will override TARGET which is used in DYNAMIC_ARCH=1.
54 GETARCH_FLAGS := -DFORCE_$(TARGET_CORE)
58 GETARCH_FLAGS += -DUSE64BITINT
61 ifndef GEMM_MULTITHREAD_THRESHOLD
62 GEMM_MULTITHREAD_THRESHOLD=4
64 GETARCH_FLAGS += -DGEMM_MULTITHREAD_THRESHOLD=$(GEMM_MULTITHREAD_THRESHOLD)
67 GETARCH_FLAGS += -DNO_AVX
74 ifndef NO_PARALLEL_MAKE
77 GETARCH_FLAGS += -DNO_PARALLEL_MAKE=$(NO_PARALLEL_MAKE)
78 # This operation is expensive, so execution should be once.
79 ifndef GOTOBLAS_MAKEFILE
80 export GOTOBLAS_MAKEFILE = 1
82 # Generating Makefile.conf and config.h
83 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)
86 include $(TOPDIR)/Makefile.conf
88 include $(TOPDIR)/Makefile_kernel.conf
94 NUM_THREADS = $(NUM_CORES)
97 ifeq ($(NUM_THREADS), 1)
98 override USE_THREAD = 0
102 ifeq ($(USE_THREAD), 0)
108 ifeq ($(NUM_THREAD), 1)
121 AR = $(CROSS_SUFFIX)ar
122 AS = $(CROSS_SUFFIX)as
123 LD = $(CROSS_SUFFIX)ld
124 RANLIB = $(CROSS_SUFFIX)ranlib
125 NM = $(CROSS_SUFFIX)nm
126 DLLWRAP = $(CROSS_SUFFIX)dllwrap
129 # OS dependent settings
132 ifeq ($(OSNAME), Darwin)
133 export MACOSX_DEPLOYMENT_TARGET=10.2
137 ifeq ($(OSNAME), FreeBSD)
141 ifeq ($(OSNAME), NetBSD)
145 ifeq ($(OSNAME), Linux)
149 ifeq ($(OSNAME), AIX)
153 ifeq ($(OSNAME), WINNT)
157 EXTRALIB += -defaultlib:advapi32
163 ifeq ($(C_COMPILER), CLANG)
164 CCOMMON_OPT += -DMS_ABI
167 ifeq ($(C_COMPILER), GCC)
168 #Test for supporting MS_ABI
169 GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
170 GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4)
171 GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 7)
172 ifeq ($(GCCVERSIONGT4), 1)
173 # GCC Majar version > 4
174 # It is compatible with MSVC ABI.
175 CCOMMON_OPT += -DMS_ABI
178 ifeq ($(GCCVERSIONGTEQ4), 1)
179 ifeq ($(GCCMINORVERSIONGTEQ7), 1)
181 # It is compatible with MSVC ABI.
182 CCOMMON_OPT += -DMS_ABI
189 ifeq ($(OSNAME), Interix)
193 INTERIX_TOOL_DIR = /opt/gcc.3.3/i586-pc-interix3/bin
196 ifeq ($(OSNAME), CYGWIN_NT)
201 ifneq ($(OSNAME), WINNT)
202 ifneq ($(OSNAME), CYGWIN_NT)
203 ifneq ($(OSNAME), Interix)
205 EXTRALIB += -lpthread
212 CCOMMON_OPT += -DQUAD_PRECISION
217 ifneq ($(ARCH), x86_64)
223 CCOMMON_OPT += -DUTEST_CHECK
228 CCOMMON_OPT += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU)
232 # Architecture dependent settings
239 ifndef NO_EXPRECISION
240 ifeq ($(F_COMPILER), GFORTRAN)
241 ifeq ($(C_COMPILER), GCC)
243 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
244 FCOMMON_OPT += -m128bit-long-double
246 ifeq ($(C_COMPILER), CLANG)
248 CCOMMON_OPT += -DEXPRECISION
249 FCOMMON_OPT += -m128bit-long-double
255 ifeq ($(ARCH), x86_64)
256 ifndef NO_EXPRECISION
257 ifeq ($(F_COMPILER), GFORTRAN)
258 ifeq ($(C_COMPILER), GCC)
260 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
261 FCOMMON_OPT += -m128bit-long-double
263 ifeq ($(C_COMPILER), CLANG)
265 CCOMMON_OPT += -DEXPRECISION
266 FCOMMON_OPT += -m128bit-long-double
272 ifeq ($(C_COMPILER), INTEL)
273 CCOMMON_OPT += -wd981
276 ifeq ($(USE_OPENMP), 1)
277 ifeq ($(C_COMPILER), GCC)
278 CCOMMON_OPT += -fopenmp
281 ifeq ($(C_COMPILER), CLANG)
282 $(error OpenBLAS: Clang didn't support OpenMP yet.)
283 CCOMMON_OPT += -fopenmp
286 ifeq ($(C_COMPILER), INTEL)
287 CCOMMON_OPT += -openmp
290 ifeq ($(C_COMPILER), PGI)
294 ifeq ($(C_COMPILER), OPEN64)
296 CEXTRALIB += -lstdc++
299 ifeq ($(C_COMPILER), PATHSCALE)
305 ifeq ($(DYNAMIC_ARCH), 1)
307 DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \
308 CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
310 DYNAMIC_CORE += SANDYBRIDGE BULLDOZER
314 ifeq ($(ARCH), x86_64)
315 DYNAMIC_CORE = PRESCOTT CORE2 PENRYN DUNNINGTON NEHALEM OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
317 DYNAMIC_CORE += SANDYBRIDGE BULLDOZER
330 ifeq ($(F_COMPILER), GFORTRAN)
331 ifeq ($(C_COMPILER), GCC)
333 # CCOMMON_OPT += -DEXPRECISION
338 ifeq ($(ARCH), mips64)
342 ifeq ($(ARCH), alpha)
348 # C Compiler dependent settings
351 # ifeq logical or. GCC or CLANG
352 # http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
353 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG))
355 COMMON_PROF += -fno-inline
356 NO_UNINITIALIZED_WARN = -Wno-uninitialized
360 ifeq ($(ARCH), mips64)
362 CCOMMON_OPT += -mabi=64
364 CCOMMON_OPT += -mabi=n32
369 ifeq ($(CORE), LOONGSON3A)
370 CCOMMON_OPT += -march=mips64
371 FCOMMON_OPT += -march=mips64
374 ifeq ($(CORE), LOONGSON3B)
375 CCOMMON_OPT += -march=mips64
376 FCOMMON_OPT += -march=mips64
379 ifeq ($(OSNAME), AIX)
385 ifndef BINARY_DEFINED
395 ifeq ($(C_COMPILER), PGI)
397 CCOMMON_OPT += -tp p7-64
399 CCOMMON_OPT += -tp p7
403 ifeq ($(C_COMPILER), PATHSCALE)
412 # Fortran Compiler dependent settings
415 ifeq ($(F_COMPILER), G77)
416 CCOMMON_OPT += -DF_INTERFACE_G77
418 ifndef NO_BINARY_MODE
427 ifeq ($(F_COMPILER), G95)
428 CCOMMON_OPT += -DF_INTERFACE_G95
430 ifndef NO_BINARY_MODE
439 ifeq ($(F_COMPILER), GFORTRAN)
440 CCOMMON_OPT += -DF_INTERFACE_GFORT
442 EXTRALIB += -lgfortran
444 ifeq ($(ARCH), mips64)
446 FCOMMON_OPT += -mabi=64
448 FCOMMON_OPT += -mabi=n32
455 FCOMMON_OPT += -fdefault-integer-8
462 FCOMMON_OPT += -fopenmp
466 ifeq ($(F_COMPILER), INTEL)
467 CCOMMON_OPT += -DF_INTERFACE_INTEL
472 FCOMMON_OPT += -openmp
476 ifeq ($(F_COMPILER), FUJITSU)
477 CCOMMON_OPT += -DF_INTERFACE_FUJITSU
479 FCOMMON_OPT += -openmp
483 ifeq ($(F_COMPILER), IBM)
484 CCOMMON_OPT += -DF_INTERFACE_IBM
485 # FCOMMON_OPT += -qarch=440
489 FCOMMON_OPT += -qintsize=8
495 FCOMMON_OPT += -openmp
499 ifeq ($(F_COMPILER), PGI)
500 CCOMMON_OPT += -DF_INTERFACE_PGI
501 COMMON_PROF += -DPGICOMPILER
506 FCOMMON_OPT += -tp p7-64
508 FCOMMON_OPT += -tp p7
515 ifeq ($(F_COMPILER), PATHSCALE)
516 CCOMMON_OPT += -DF_INTERFACE_PATHSCALE
523 ifneq ($(ARCH), mips64)
531 FCOMMON_OPT += -mabi=64
533 FCOMMON_OPT += -mabi=n32
542 ifeq ($(F_COMPILER), OPEN64)
543 CCOMMON_OPT += -DF_INTERFACE_OPEN64
556 FEXTRALIB += -lstdc++
561 ifeq ($(C_COMPILER), OPEN64)
569 ifeq ($(C_COMPILER), SUN)
578 ifeq ($(F_COMPILER), SUN)
579 CCOMMON_OPT += -DF_INTERFACE_SUN
586 FCOMMON_OPT += -xopenmp=parallel
590 ifeq ($(F_COMPILER), COMPAQ)
591 CCOMMON_OPT += -DF_INTERFACE_COMPAQ
593 FCOMMON_OPT += -openmp
604 ifeq ($(NEED_PIC), 1)
605 ifeq ($(C_COMPILER), IBM)
606 CCOMMON_OPT += -qpic=large
610 ifeq ($(F_COMPILER), SUN)
617 ifeq ($(DYNAMIC_ARCH), 1)
618 CCOMMON_OPT += -DDYNAMIC_ARCH
621 ifeq ($(NO_LAPACK), 1)
622 CCOMMON_OPT += -DNO_LAPACK
623 #Disable LAPACK C interface
627 ifeq ($(NO_LAPACKE), 1)
628 CCOMMON_OPT += -DNO_LAPACKE
632 CCOMMON_OPT += -DNO_AVX
636 CCOMMON_OPT += -DSMP_SERVER
638 ifeq ($(ARCH), mips64)
639 ifneq ($(CORE), LOONGSON3B)
640 USE_SIMPLE_THREADED_LEVEL3 = 1
644 ifeq ($(USE_OPENMP), 1)
645 # USE_SIMPLE_THREADED_LEVEL3 = 1
647 CCOMMON_OPT += -DUSE_OPENMP
652 ifeq ($(NO_WARMUP), 1)
653 CCOMMON_OPT += -DNO_WARMUP
656 ifeq ($(CONSISTENT_FPCSR), 1)
657 CCOMMON_OPT += -DCONSISTENT_FPCSR
660 # Only for development
661 # CCOMMON_OPT += -DPARAMTEST
662 # CCOMMON_OPT += -DPREFETCHTEST
663 # CCOMMON_OPT += -DNO_SWITCHING
667 CCOMMON_OPT += -DUSE_PAPI
668 EXTRALIB += -lpapi -lperfctr
671 ifdef DYNAMIC_THREADS
672 CCOMMON_OPT += -DDYNAMIC_THREADS
675 CCOMMON_OPT += -DMAX_CPU_NUMBER=$(NUM_THREADS)
677 ifdef USE_SIMPLE_THREADED_LEVEL3
678 CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3
682 LIBPREFIX = libopenblas
684 LIBPREFIX = libopenblas_$(LIBNAMESUFFIX)
687 KERNELDIR = $(TOPDIR)/kernel/$(ARCH)
689 include $(TOPDIR)/Makefile.$(ARCH)
691 CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
693 ifeq ($(CORE), PPC440)
694 CCOMMON_OPT += -DALLOC_QALLOC
697 ifeq ($(CORE), PPC440FP2)
698 STATIC_ALLOCATION = 1
701 ifneq ($(OSNAME), Linux)
705 ifneq ($(ARCH), x86_64)
707 ifneq ($(CORE), LOONGSON3B)
714 CCOMMON_OPT += -DNO_AFFINITY
717 ifdef FUNCTION_PROFILE
718 CCOMMON_OPT += -DFUNCTION_PROFILE
721 ifdef HUGETLB_ALLOCATION
722 CCOMMON_OPT += -DALLOC_HUGETLB
725 ifdef HUGETLBFILE_ALLOCATION
726 CCOMMON_OPT += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
729 ifdef STATIC_ALLOCATION
730 CCOMMON_OPT += -DALLOC_STATIC
733 ifdef DEVICEDRIVER_ALLOCATION
734 CCOMMON_OPT += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
737 ifdef MIXED_MEMORY_ALLOCATION
738 CCOMMON_OPT += -DMIXED_MEMORY_ALLOCATION
741 ifeq ($(OSNAME), SunOS)
757 REVISION = -r$(VERSION)
758 MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
769 override CFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
770 override PFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
772 override FFLAGS += $(COMMON_OPT) $(FCOMMON_OPT)
773 override FPFLAGS += $(COMMON_OPT) $(FCOMMON_OPT) $(COMMON_PROF)
788 ifneq ($(DYNAMIC_ARCH), 1)
790 LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
791 LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
793 LIBNAME = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
794 LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
798 LIBNAME = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
799 LIBNAME_P = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
801 LIBNAME = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
802 LIBNAME_P = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
807 LIBDLLNAME = $(LIBPREFIX).dll
808 LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.so)
809 LIBDYNNAME = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
810 LIBDEFNAME = $(LIBNAME:.$(LIBSUFFIX)=.def)
811 LIBEXPNAME = $(LIBNAME:.$(LIBSUFFIX)=.exp)
812 LIBZIPNAME = $(LIBNAME:.$(LIBSUFFIX)=.zip)
814 LIBS = $(TOPDIR)/$(LIBNAME)
815 LIBS_P = $(TOPDIR)/$(LIBNAME_P)
855 export FUNCTION_PROFILE
858 export SGEMM_UNROLL_M
859 export SGEMM_UNROLL_N
860 export DGEMM_UNROLL_M
861 export DGEMM_UNROLL_N
862 export QGEMM_UNROLL_M
863 export QGEMM_UNROLL_N
864 export CGEMM_UNROLL_M
865 export CGEMM_UNROLL_N
866 export ZGEMM_UNROLL_M
867 export ZGEMM_UNROLL_N
868 export XGEMM_UNROLL_M
869 export XGEMM_UNROLL_N
870 export CGEMM3M_UNROLL_M
871 export CGEMM3M_UNROLL_N
872 export ZGEMM3M_UNROLL_M
873 export ZGEMM3M_UNROLL_N
874 export XGEMM3M_UNROLL_M
875 export XGEMM3M_UNROLL_N
885 .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
888 $(FC) $(FFLAGS) -c $< -o $(@F)
891 $(FC) $(FPFLAGS) -pg -c $< -o $(@F)
895 PATHSCALEPATH = /opt/pathscale/lib/3.1
896 PGIPATH = /opt/pgi/linux86-64/7.1-5/lib
898 PATHSCALEPATH = /opt/pathscale/lib/3.1/32
899 PGIPATH = /opt/pgi/linux86/7.1-5/lib
902 ACMLPATH = /opt/acml/4.3.0
903 ifneq ($(OSNAME), Darwin)
904 MKLPATH = /opt/intel/mkl/10.2.2.025/lib
906 MKLPATH = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
908 ATLASPATH = /opt/atlas/3.9.17/opteron
909 FLAMEPATH = $(HOME)/flame/lib
910 ifneq ($(OSNAME), SunOS)
911 SUNPATH = /opt/sunstudio12.1
913 SUNPATH = /opt/SUNWspro