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 ifeq ($(QUIET_MAKE), 1)
78 ifndef NO_PARALLEL_MAKE
81 GETARCH_FLAGS += -DNO_PARALLEL_MAKE=$(NO_PARALLEL_MAKE)
82 # This operation is expensive, so execution should be once.
83 ifndef GOTOBLAS_MAKEFILE
84 export GOTOBLAS_MAKEFILE = 1
86 # Generating Makefile.conf and config.h
87 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)
90 include $(TOPDIR)/Makefile.conf
92 include $(TOPDIR)/Makefile_kernel.conf
98 NUM_THREADS = $(NUM_CORES)
101 ifeq ($(NUM_THREADS), 1)
102 override USE_THREAD = 0
106 ifeq ($(USE_THREAD), 0)
112 ifeq ($(NUM_THREAD), 1)
125 AR = $(CROSS_SUFFIX)ar
126 AS = $(CROSS_SUFFIX)as
127 LD = $(CROSS_SUFFIX)ld
128 RANLIB = $(CROSS_SUFFIX)ranlib
129 NM = $(CROSS_SUFFIX)nm
130 DLLWRAP = $(CROSS_SUFFIX)dllwrap
133 # OS dependent settings
136 ifeq ($(OSNAME), Darwin)
137 export MACOSX_DEPLOYMENT_TARGET=10.2
141 ifeq ($(OSNAME), FreeBSD)
145 ifeq ($(OSNAME), NetBSD)
149 ifeq ($(OSNAME), Linux)
153 ifeq ($(OSNAME), AIX)
157 ifeq ($(OSNAME), WINNT)
161 EXTRALIB += -defaultlib:advapi32
167 ifeq ($(C_COMPILER), CLANG)
168 CCOMMON_OPT += -DMS_ABI
171 ifeq ($(C_COMPILER), GCC)
172 #Test for supporting MS_ABI
173 GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
174 GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4)
175 GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 7)
176 ifeq ($(GCCVERSIONGT4), 1)
177 # GCC Majar version > 4
178 # It is compatible with MSVC ABI.
179 CCOMMON_OPT += -DMS_ABI
182 ifeq ($(GCCVERSIONGTEQ4), 1)
183 ifeq ($(GCCMINORVERSIONGTEQ7), 1)
185 # It is compatible with MSVC ABI.
186 CCOMMON_OPT += -DMS_ABI
193 ifeq ($(OSNAME), Interix)
197 INTERIX_TOOL_DIR = /opt/gcc.3.3/i586-pc-interix3/bin
200 ifeq ($(OSNAME), CYGWIN_NT)
205 ifneq ($(OSNAME), WINNT)
206 ifneq ($(OSNAME), CYGWIN_NT)
207 ifneq ($(OSNAME), Interix)
209 EXTRALIB += -lpthread
216 CCOMMON_OPT += -DQUAD_PRECISION
221 ifneq ($(ARCH), x86_64)
227 CCOMMON_OPT += -DUTEST_CHECK
232 CCOMMON_OPT += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU)
236 # Architecture dependent settings
243 ifndef NO_EXPRECISION
244 ifeq ($(F_COMPILER), GFORTRAN)
245 ifeq ($(C_COMPILER), GCC)
247 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
248 FCOMMON_OPT += -m128bit-long-double
250 ifeq ($(C_COMPILER), CLANG)
252 CCOMMON_OPT += -DEXPRECISION
253 FCOMMON_OPT += -m128bit-long-double
259 ifeq ($(ARCH), x86_64)
260 ifndef NO_EXPRECISION
261 ifeq ($(F_COMPILER), GFORTRAN)
262 ifeq ($(C_COMPILER), GCC)
264 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
265 FCOMMON_OPT += -m128bit-long-double
267 ifeq ($(C_COMPILER), CLANG)
269 CCOMMON_OPT += -DEXPRECISION
270 FCOMMON_OPT += -m128bit-long-double
276 ifeq ($(C_COMPILER), INTEL)
277 CCOMMON_OPT += -wd981
280 ifeq ($(USE_OPENMP), 1)
281 ifeq ($(C_COMPILER), GCC)
282 CCOMMON_OPT += -fopenmp
285 ifeq ($(C_COMPILER), CLANG)
286 $(error OpenBLAS: Clang didn't support OpenMP yet.)
287 CCOMMON_OPT += -fopenmp
290 ifeq ($(C_COMPILER), INTEL)
291 CCOMMON_OPT += -openmp
294 ifeq ($(C_COMPILER), PGI)
298 ifeq ($(C_COMPILER), OPEN64)
300 CEXTRALIB += -lstdc++
303 ifeq ($(C_COMPILER), PATHSCALE)
309 ifeq ($(DYNAMIC_ARCH), 1)
311 DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \
312 CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
314 DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER
318 ifeq ($(ARCH), x86_64)
319 DYNAMIC_CORE = PRESCOTT CORE2 PENRYN DUNNINGTON NEHALEM OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
321 DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER
334 ifeq ($(F_COMPILER), GFORTRAN)
335 ifeq ($(C_COMPILER), GCC)
337 # CCOMMON_OPT += -DEXPRECISION
342 ifeq ($(ARCH), mips64)
346 ifeq ($(ARCH), alpha)
352 # C Compiler dependent settings
355 # ifeq logical or. GCC or CLANG
356 # http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
357 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG))
359 COMMON_PROF += -fno-inline
360 NO_UNINITIALIZED_WARN = -Wno-uninitialized
362 ifeq ($(QUIET_MAKE), 1)
363 CCOMMON_OPT += $(NO_UNINITIALIZED_WARN)
368 ifeq ($(ARCH), mips64)
370 CCOMMON_OPT += -mabi=64
372 CCOMMON_OPT += -mabi=n32
377 ifeq ($(CORE), LOONGSON3A)
378 CCOMMON_OPT += -march=mips64
379 FCOMMON_OPT += -march=mips64
382 ifeq ($(CORE), LOONGSON3B)
383 CCOMMON_OPT += -march=mips64
384 FCOMMON_OPT += -march=mips64
387 ifeq ($(OSNAME), AIX)
393 ifndef BINARY_DEFINED
403 ifeq ($(C_COMPILER), PGI)
405 CCOMMON_OPT += -tp p7-64
407 CCOMMON_OPT += -tp p7
411 ifeq ($(C_COMPILER), PATHSCALE)
420 # Fortran Compiler dependent settings
423 ifeq ($(F_COMPILER), G77)
424 CCOMMON_OPT += -DF_INTERFACE_G77
426 ifndef NO_BINARY_MODE
435 ifeq ($(F_COMPILER), G95)
436 CCOMMON_OPT += -DF_INTERFACE_G95
438 ifndef NO_BINARY_MODE
447 ifeq ($(F_COMPILER), GFORTRAN)
448 CCOMMON_OPT += -DF_INTERFACE_GFORT
450 ifneq ($(NO_LAPACK), 1)
451 EXTRALIB += -lgfortran
454 ifeq ($(ARCH), mips64)
456 FCOMMON_OPT += -mabi=64
458 FCOMMON_OPT += -mabi=n32
465 FCOMMON_OPT += -fdefault-integer-8
472 FCOMMON_OPT += -fopenmp
476 ifeq ($(F_COMPILER), INTEL)
477 CCOMMON_OPT += -DF_INTERFACE_INTEL
482 FCOMMON_OPT += -openmp
486 ifeq ($(F_COMPILER), FUJITSU)
487 CCOMMON_OPT += -DF_INTERFACE_FUJITSU
489 FCOMMON_OPT += -openmp
493 ifeq ($(F_COMPILER), IBM)
494 CCOMMON_OPT += -DF_INTERFACE_IBM
495 # FCOMMON_OPT += -qarch=440
499 FCOMMON_OPT += -qintsize=8
505 FCOMMON_OPT += -openmp
509 ifeq ($(F_COMPILER), PGI)
510 CCOMMON_OPT += -DF_INTERFACE_PGI
511 COMMON_PROF += -DPGICOMPILER
516 FCOMMON_OPT += -tp p7-64
518 FCOMMON_OPT += -tp p7
525 ifeq ($(F_COMPILER), PATHSCALE)
526 CCOMMON_OPT += -DF_INTERFACE_PATHSCALE
533 ifneq ($(ARCH), mips64)
541 FCOMMON_OPT += -mabi=64
543 FCOMMON_OPT += -mabi=n32
552 ifeq ($(F_COMPILER), OPEN64)
553 CCOMMON_OPT += -DF_INTERFACE_OPEN64
566 FEXTRALIB += -lstdc++
571 ifeq ($(C_COMPILER), OPEN64)
579 ifeq ($(C_COMPILER), SUN)
588 ifeq ($(F_COMPILER), SUN)
589 CCOMMON_OPT += -DF_INTERFACE_SUN
596 FCOMMON_OPT += -xopenmp=parallel
600 ifeq ($(F_COMPILER), COMPAQ)
601 CCOMMON_OPT += -DF_INTERFACE_COMPAQ
603 FCOMMON_OPT += -openmp
614 ifeq ($(NEED_PIC), 1)
615 ifeq ($(C_COMPILER), IBM)
616 CCOMMON_OPT += -qpic=large
620 ifeq ($(F_COMPILER), SUN)
627 ifeq ($(DYNAMIC_ARCH), 1)
628 CCOMMON_OPT += -DDYNAMIC_ARCH
631 ifeq ($(NO_LAPACK), 1)
632 CCOMMON_OPT += -DNO_LAPACK
633 #Disable LAPACK C interface
637 ifeq ($(NO_LAPACKE), 1)
638 CCOMMON_OPT += -DNO_LAPACKE
642 CCOMMON_OPT += -DNO_AVX
646 CCOMMON_OPT += -DSMP_SERVER
648 ifeq ($(ARCH), mips64)
649 ifneq ($(CORE), LOONGSON3B)
650 USE_SIMPLE_THREADED_LEVEL3 = 1
654 ifeq ($(USE_OPENMP), 1)
655 # USE_SIMPLE_THREADED_LEVEL3 = 1
657 CCOMMON_OPT += -DUSE_OPENMP
662 ifeq ($(NO_WARMUP), 1)
663 CCOMMON_OPT += -DNO_WARMUP
666 ifeq ($(CONSISTENT_FPCSR), 1)
667 CCOMMON_OPT += -DCONSISTENT_FPCSR
670 # Only for development
671 # CCOMMON_OPT += -DPARAMTEST
672 # CCOMMON_OPT += -DPREFETCHTEST
673 # CCOMMON_OPT += -DNO_SWITCHING
677 CCOMMON_OPT += -DUSE_PAPI
678 EXTRALIB += -lpapi -lperfctr
681 ifdef DYNAMIC_THREADS
682 CCOMMON_OPT += -DDYNAMIC_THREADS
685 CCOMMON_OPT += -DMAX_CPU_NUMBER=$(NUM_THREADS)
687 ifdef USE_SIMPLE_THREADED_LEVEL3
688 CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3
692 LIBPREFIX = libopenblas
694 LIBPREFIX = libopenblas_$(LIBNAMESUFFIX)
697 KERNELDIR = $(TOPDIR)/kernel/$(ARCH)
699 include $(TOPDIR)/Makefile.$(ARCH)
701 CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
703 ifeq ($(CORE), PPC440)
704 CCOMMON_OPT += -DALLOC_QALLOC
707 ifeq ($(CORE), PPC440FP2)
708 STATIC_ALLOCATION = 1
711 ifneq ($(OSNAME), Linux)
715 ifneq ($(ARCH), x86_64)
717 ifneq ($(CORE), LOONGSON3B)
724 CCOMMON_OPT += -DNO_AFFINITY
727 ifdef FUNCTION_PROFILE
728 CCOMMON_OPT += -DFUNCTION_PROFILE
731 ifdef HUGETLB_ALLOCATION
732 CCOMMON_OPT += -DALLOC_HUGETLB
735 ifdef HUGETLBFILE_ALLOCATION
736 CCOMMON_OPT += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
739 ifdef STATIC_ALLOCATION
740 CCOMMON_OPT += -DALLOC_STATIC
743 ifdef DEVICEDRIVER_ALLOCATION
744 CCOMMON_OPT += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
747 ifdef MIXED_MEMORY_ALLOCATION
748 CCOMMON_OPT += -DMIXED_MEMORY_ALLOCATION
751 ifeq ($(OSNAME), SunOS)
767 REVISION = -r$(VERSION)
768 MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
779 override CFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
780 override PFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
782 override FFLAGS += $(COMMON_OPT) $(FCOMMON_OPT)
783 override FPFLAGS += $(COMMON_OPT) $(FCOMMON_OPT) $(COMMON_PROF)
798 ifneq ($(DYNAMIC_ARCH), 1)
800 LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
801 LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
803 LIBNAME = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
804 LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
808 LIBNAME = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
809 LIBNAME_P = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
811 LIBNAME = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
812 LIBNAME_P = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
817 LIBDLLNAME = $(LIBPREFIX).dll
818 LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.so)
819 LIBDYNNAME = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
820 LIBDEFNAME = $(LIBNAME:.$(LIBSUFFIX)=.def)
821 LIBEXPNAME = $(LIBNAME:.$(LIBSUFFIX)=.exp)
822 LIBZIPNAME = $(LIBNAME:.$(LIBSUFFIX)=.zip)
824 LIBS = $(TOPDIR)/$(LIBNAME)
825 LIBS_P = $(TOPDIR)/$(LIBNAME_P)
865 export FUNCTION_PROFILE
868 export SGEMM_UNROLL_M
869 export SGEMM_UNROLL_N
870 export DGEMM_UNROLL_M
871 export DGEMM_UNROLL_N
872 export QGEMM_UNROLL_M
873 export QGEMM_UNROLL_N
874 export CGEMM_UNROLL_M
875 export CGEMM_UNROLL_N
876 export ZGEMM_UNROLL_M
877 export ZGEMM_UNROLL_N
878 export XGEMM_UNROLL_M
879 export XGEMM_UNROLL_N
880 export CGEMM3M_UNROLL_M
881 export CGEMM3M_UNROLL_N
882 export ZGEMM3M_UNROLL_M
883 export ZGEMM3M_UNROLL_N
884 export XGEMM3M_UNROLL_M
885 export XGEMM3M_UNROLL_N
895 .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
898 $(FC) $(FFLAGS) -c $< -o $(@F)
901 $(FC) $(FPFLAGS) -pg -c $< -o $(@F)
905 PATHSCALEPATH = /opt/pathscale/lib/3.1
906 PGIPATH = /opt/pgi/linux86-64/7.1-5/lib
908 PATHSCALEPATH = /opt/pathscale/lib/3.1/32
909 PGIPATH = /opt/pgi/linux86/7.1-5/lib
912 ACMLPATH = /opt/acml/4.3.0
913 ifneq ($(OSNAME), Darwin)
914 MKLPATH = /opt/intel/mkl/10.2.2.025/lib
916 MKLPATH = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
918 ATLASPATH = /opt/atlas/3.9.17/opteron
919 FLAMEPATH = $(HOME)/flame/lib
920 ifneq ($(OSNAME), SunOS)
921 SUNPATH = /opt/sunstudio12.1
923 SUNPATH = /opt/SUNWspro