2 # Include user definition
5 # TO suppress recursive includes
12 # If ARCH is not set, we use the host system's architecture.
14 ARCH := $(shell uname -m)
17 # Catch conflicting usage of ARCH in some BSD environments
20 else ifeq ($(ARCH), powerpc64)
22 else ifeq ($(ARCH), i386)
24 else ifeq ($(ARCH), aarch64)
28 NETLIB_LAPACK_DIR = $(TOPDIR)/lapack-netlib
31 # - Only set if not specified on the command line or inherited from the environment.
32 # - CC is an implicit variable so neither '?=' or 'ifndef' can be used.
33 # http://stackoverflow.com/questions/4029274/mingw-and-make-variables
34 # - Default value is 'cc' which is not always a valid command (e.g. MinGW).
35 ifeq ($(origin CC),default)
37 # Check if $(CC) refers to a valid command and set the value to gcc if not
38 ifneq ($(findstring cmd.exe,$(SHELL)),)
39 ifeq ($(shell where $(CC) 2>NUL),)
43 ifeq ($(shell command -v $(CC) 2>/dev/null),)
44 ifeq ($(shell uname -s),Darwin)
46 # EXTRALIB += -Wl,-no_compact_unwind
53 endif # CC is set to default
55 # Default Fortran compiler (FC) is selected by f_check.
58 include $(TOPDIR)/Makefile.rule
60 include $(TOPDIR)/$(MAKEFILE_RULE)
64 # Beginning of system configuration
72 GETARCH_FLAGS := -DFORCE_$(TARGET)
73 GETARCH_FLAGS += -DUSER_TARGET
76 # Force fallbacks for 32bit
79 ifeq ($(TARGET), HASWELL)
80 GETARCH_FLAGS := -DFORCE_NEHALEM
82 ifeq ($(TARGET), SKYLAKEX)
83 GETARCH_FLAGS := -DFORCE_NEHALEM
85 ifeq ($(TARGET), SANDYBRIDGE)
86 GETARCH_FLAGS := -DFORCE_NEHALEM
88 ifeq ($(TARGET), BULLDOZER)
89 GETARCH_FLAGS := -DFORCE_BARCELONA
91 ifeq ($(TARGET), PILEDRIVER)
92 GETARCH_FLAGS := -DFORCE_BARCELONA
94 ifeq ($(TARGET), STEAMROLLER)
95 GETARCH_FLAGS := -DFORCE_BARCELONA
97 ifeq ($(TARGET), EXCAVATOR)
98 GETARCH_FLAGS := -DFORCE_BARCELONA
100 ifeq ($(TARGET), ZEN)
101 GETARCH_FLAGS := -DFORCE_BARCELONA
103 ifeq ($(TARGET), ARMV8)
104 GETARCH_FLAGS := -DFORCE_ARMV7
109 #TARGET_CORE will override TARGET which is used in DYNAMIC_ARCH=1.
112 GETARCH_FLAGS := -DFORCE_$(TARGET_CORE)
115 # Force fallbacks for 32bit
118 ifeq ($(TARGET_CORE), HASWELL)
119 GETARCH_FLAGS := -DFORCE_NEHALEM
121 ifeq ($(TARGET_CORE), SKYLAKEX)
122 GETARCH_FLAGS := -DFORCE_NEHALEM
124 ifeq ($(TARGET_CORE), SANDYBRIDGE)
125 GETARCH_FLAGS := -DFORCE_NEHALEM
127 ifeq ($(TARGET_CORE), BULLDOZER)
128 GETARCH_FLAGS := -DFORCE_BARCELONA
130 ifeq ($(TARGET_CORE), PILEDRIVER)
131 GETARCH_FLAGS := -DFORCE_BARCELONA
133 ifeq ($(TARGET_CORE), STEAMROLLER)
134 GETARCH_FLAGS := -DFORCE_BARCELONA
136 ifeq ($(TARGET_CORE), EXCAVATOR)
137 GETARCH_FLAGS := -DFORCE_BARCELONA
139 ifeq ($(TARGET_CORE), ZEN)
140 GETARCH_FLAGS := -DFORCE_BARCELONA
145 # On x86_64 build getarch with march=native. This is required to detect AVX512 support in getarch.
146 ifeq ($(ARCH), x86_64)
147 ifneq ($(C_COMPILER), PGI)
148 GETARCH_FLAGS += -march=native
153 ifneq ($(INTERFACE64), 0)
154 GETARCH_FLAGS += -DUSE64BITINT
158 ifndef GEMM_MULTITHREAD_THRESHOLD
159 GEMM_MULTITHREAD_THRESHOLD=4
161 GETARCH_FLAGS += -DGEMM_MULTITHREAD_THRESHOLD=$(GEMM_MULTITHREAD_THRESHOLD)
164 GETARCH_FLAGS += -DNO_AVX
168 GETARCH_FLAGS += -DNO_AVX -DNO_AVX2 -DNO_AVX512
173 GETARCH_FLAGS += -DNO_AVX2
176 ifeq ($(NO_AVX512), 1)
177 GETARCH_FLAGS += -DNO_AVX512
184 ifeq ($(QUIET_MAKE), 1)
188 ifndef NO_PARALLEL_MAKE
191 GETARCH_FLAGS += -DNO_PARALLEL_MAKE=$(NO_PARALLEL_MAKE)
194 GETARCH_FLAGS += -DMAKE_NB_JOBS=$(MAKE_NB_JOBS)
197 ifeq ($(HOSTCC), loongcc)
198 GETARCH_FLAGS += -static
201 #if don't use Fortran, it will only compile CBLAS.
202 ifeq ($(ONLY_CBLAS), 1)
208 # This operation is expensive, so execution should be once.
209 ifndef GOTOBLAS_MAKEFILE
210 export GOTOBLAS_MAKEFILE = 1
212 # Generating Makefile.conf and config.h
213 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) ONLY_CBLAS=$(ONLY_CBLAS) TARGET=$(TARGET) all)
216 include $(TOPDIR)/Makefile.conf
218 include $(TOPDIR)/Makefile_kernel.conf
228 NUM_THREADS = $(NUM_CORES)
231 ifeq ($(NUM_THREADS), 1)
232 override USE_THREAD = 0
233 override USE_OPENMP = 0
237 ifeq ($(USE_THREAD), 0)
243 ifeq ($(NUM_THREAD), 1)
260 AR = $(CROSS_SUFFIX)ar
261 AS = $(CROSS_SUFFIX)as
262 LD = $(CROSS_SUFFIX)ld
263 RANLIB = $(CROSS_SUFFIX)ranlib
264 NM = $(CROSS_SUFFIX)nm
265 DLLWRAP = $(CROSS_SUFFIX)dllwrap
266 OBJCOPY = $(CROSS_SUFFIX)objcopy
267 OBJCONV = $(CROSS_SUFFIX)objconv
270 # When fortran support was either not detected or actively deselected, only build BLAS.
271 ifeq ($(NOFORTRAN), 1)
277 # OS dependent settings
280 ifeq ($(OSNAME), Darwin)
281 ifndef MACOSX_DEPLOYMENT_TARGET
282 export MACOSX_DEPLOYMENT_TARGET=10.8
287 ifneq (,$(findstring $(OSNAME), FreeBSD OpenBSD DragonFly))
291 ifeq ($(OSNAME), NetBSD)
295 ifeq ($(OSNAME), Linux)
300 ifeq ($(OSNAME), Android)
304 ifeq ($(OSNAME), AIX)
308 ifeq ($(OSNAME), WINNT)
312 EXTRALIB += -defaultlib:advapi32
318 ifeq ($(C_COMPILER), CLANG)
319 CCOMMON_OPT += -DMS_ABI
322 ifeq ($(C_COMPILER), GCC)
323 #Test for supporting MS_ABI
324 GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
325 GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4)
326 GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 7)
327 ifeq ($(GCCVERSIONGT4), 1)
328 # GCC Majar version > 4
329 # It is compatible with MSVC ABI.
330 CCOMMON_OPT += -DMS_ABI
333 ifeq ($(GCCVERSIONGTEQ4), 1)
334 ifeq ($(GCCMINORVERSIONGTEQ7), 1)
336 # It is compatible with MSVC ABI.
337 CCOMMON_OPT += -DMS_ABI
342 # Ensure the correct stack alignment on Win32
343 # http://permalink.gmane.org/gmane.comp.lib.openblas.general/97
345 CCOMMON_OPT += -mincoming-stack-boundary=2
346 FCOMMON_OPT += -mincoming-stack-boundary=2
351 ifeq ($(OSNAME), Interix)
355 INTERIX_TOOL_DIR = /opt/gcc.3.3/i586-pc-interix3/bin
358 ifeq ($(OSNAME), CYGWIN_NT)
364 ifneq ($(OSNAME), WINNT)
365 ifneq ($(OSNAME), CYGWIN_NT)
366 ifneq ($(OSNAME), Interix)
367 ifneq ($(OSNAME), Android)
369 EXTRALIB += -lpthread
377 ifeq ($(OSNAME), $(filter $(OSNAME),WINNT CYGWIN_NT Interix))
382 CCOMMON_OPT += -DQUAD_PRECISION
387 ifneq ($(ARCH), x86_64)
393 CCOMMON_OPT += -DUTEST_CHECK
398 CCOMMON_OPT += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU)
401 MAX_STACK_ALLOC ?= 2048
402 ifneq ($(MAX_STACK_ALLOC), 0)
403 CCOMMON_OPT += -DMAX_STACK_ALLOC=$(MAX_STACK_ALLOC)
407 ifneq ($(USE_LOCKING), 0)
408 CCOMMON_OPT += -DUSE_LOCKING
413 # Architecture dependent settings
421 ifeq ($(CORE), generic)
425 ifndef NO_EXPRECISION
426 ifeq ($(F_COMPILER), GFORTRAN)
427 # ifeq logical or. GCC or LSB
428 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
430 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
431 FCOMMON_OPT += -m128bit-long-double
433 ifeq ($(C_COMPILER), CLANG)
435 CCOMMON_OPT += -DEXPRECISION
436 FCOMMON_OPT += -m128bit-long-double
442 ifeq ($(ARCH), x86_64)
444 ifeq ($(CORE), generic)
448 ifndef NO_EXPRECISION
449 ifeq ($(F_COMPILER), GFORTRAN)
450 # ifeq logical or. GCC or LSB
451 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
453 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
454 FCOMMON_OPT += -m128bit-long-double
456 ifeq ($(C_COMPILER), CLANG)
458 CCOMMON_OPT += -DEXPRECISION
459 FCOMMON_OPT += -m128bit-long-double
465 ifeq ($(C_COMPILER), INTEL)
466 CCOMMON_OPT += -wd981
470 ifeq ($(USE_OPENMP), 1)
473 ifeq ($(USE_THREAD), 0)
474 $(error OpenBLAS: Cannot set both USE_OPENMP=1 and USE_THREAD=0. The USE_THREAD=0 is only for building single thread version.)
477 # ifeq logical or. GCC or LSB
478 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
479 CCOMMON_OPT += -fopenmp
482 ifeq ($(C_COMPILER), CLANG)
483 CCOMMON_OPT += -fopenmp
486 ifeq ($(C_COMPILER), INTEL)
487 CCOMMON_OPT += -fopenmp
490 ifeq ($(C_COMPILER), PGI)
494 ifeq ($(C_COMPILER), OPEN64)
496 CEXTRALIB += -lstdc++
499 ifeq ($(C_COMPILER), PATHSCALE)
505 ifeq ($(DYNAMIC_ARCH), 1)
507 DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \
508 CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
511 ifeq ($(ARCH), x86_64)
512 DYNAMIC_CORE = PRESCOTT CORE2
513 ifeq ($(DYNAMIC_OLDER), 1)
514 DYNAMIC_CORE += PENRYN DUNNINGTON
516 DYNAMIC_CORE += NEHALEM
517 ifeq ($(DYNAMIC_OLDER), 1)
518 DYNAMIC_CORE += OPTERON OPTERON_SSE3
520 DYNAMIC_CORE += BARCELONA
521 ifeq ($(DYNAMIC_OLDER), 1)
522 DYNAMIC_CORE += BOBCAT ATOM NANO
525 DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER STEAMROLLER EXCAVATOR
527 ifneq ($(NO_AVX2), 1)
528 DYNAMIC_CORE += HASWELL ZEN
530 ifneq ($(NO_AVX512), 1)
531 ifneq ($(NO_AVX2), 1)
532 DYNAMIC_CORE += SKYLAKEX
538 override DYNAMIC_CORE = PRESCOTT $(DYNAMIC_LIST)
539 XCCOMMON_OPT = -DDYNAMIC_LIST -DDYN_PRESCOTT
540 XCCOMMON_OPT += $(foreach dcore,$(DYNAMIC_LIST),-DDYN_$(dcore))
541 CCOMMON_OPT += $(XCCOMMON_OPT)
542 #CCOMMON_OPT += -DDYNAMIC_LIST='$(DYNAMIC_LIST)'
545 ifeq ($(ARCH), arm64)
547 DYNAMIC_CORE += CORTEXA57
548 DYNAMIC_CORE += THUNDERX
549 DYNAMIC_CORE += THUNDERX2T99
552 ifeq ($(ARCH), power)
553 DYNAMIC_CORE = POWER6
554 DYNAMIC_CORE += POWER8
555 DYNAMIC_CORE += POWER9
558 # If DYNAMIC_CORE is not set, DYNAMIC_ARCH cannot do anything, so force it to empty
560 override DYNAMIC_ARCH=
568 ifeq ($(F_COMPILER), GFORTRAN)
569 ifeq ($(C_COMPILER), GCC)
571 # CCOMMON_OPT += -DEXPRECISION
576 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
580 ifeq ($(ARCH), alpha)
592 # If softfp abi is mentioned on the command line, force it.
593 ifeq ($(ARM_SOFTFP_ABI), 1)
594 CCOMMON_OPT += -mfloat-abi=softfp
595 FCOMMON_OPT += -mfloat-abi=softfp
598 ifeq ($(OSNAME), Android)
599 ifeq ($(ARM_SOFTFP_ABI), 1)
602 EXTRALIB += -Wl,-lm_hard
607 ifeq ($(ARCH), arm64)
616 # C Compiler dependent settings
620 # ifeq logical or. GCC or CLANG or LSB
621 # http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
622 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG LSB))
624 COMMON_PROF += -fno-inline
625 NO_UNINITIALIZED_WARN = -Wno-uninitialized
627 ifeq ($(QUIET_MAKE), 1)
628 CCOMMON_OPT += $(NO_UNINITIALIZED_WARN) -Wno-unused
633 ifeq ($(ARCH), $(filter $(ARCH),mips64))
635 CCOMMON_OPT += -mabi=64
637 CCOMMON_OPT += -mabi=n32
640 else ifeq ($(ARCH), $(filter $(ARCH),mips))
641 CCOMMON_OPT += -mabi=32
645 ifeq ($(CORE), LOONGSON3A)
646 CCOMMON_OPT += -march=mips64
647 FCOMMON_OPT += -march=mips64
650 ifeq ($(CORE), LOONGSON3B)
651 CCOMMON_OPT += -march=mips64
652 FCOMMON_OPT += -march=mips64
655 ifeq ($(CORE), 1004K)
656 CCOMMON_OPT += -mips32r2 $(MSA_FLAGS)
657 FCOMMON_OPT += -mips32r2 $(MSA_FLAGS)
660 ifeq ($(CORE), P5600)
661 CCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS)
662 FCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS)
665 ifeq ($(CORE), I6400)
666 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
667 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
670 ifeq ($(CORE), P6600)
671 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
672 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
675 ifeq ($(CORE), I6500)
676 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
677 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
680 ifeq ($(OSNAME), AIX)
686 ifndef BINARY_DEFINED
687 ifneq ($(OSNAME), AIX)
698 ifeq ($(C_COMPILER), PGI)
700 CCOMMON_OPT += -tp p7-64
702 CCOMMON_OPT += -tp p7
706 ifeq ($(C_COMPILER), PATHSCALE)
715 # Fortran Compiler dependent settings
718 ifeq ($(F_COMPILER), FLANG)
719 CCOMMON_OPT += -DF_INTERFACE_FLANG
722 ifneq ($(INTERFACE64), 0)
730 ifeq ($(USE_OPENMP), 1)
731 FCOMMON_OPT += -fopenmp
735 ifeq ($(F_COMPILER), G77)
736 CCOMMON_OPT += -DF_INTERFACE_G77
738 ifndef NO_BINARY_MODE
739 ifneq ($(OSNAME), AIX)
749 ifeq ($(F_COMPILER), G95)
750 CCOMMON_OPT += -DF_INTERFACE_G95
752 ifneq ($(OSNAME), AIX)
753 ifndef NO_BINARY_MODE
763 ifeq ($(F_COMPILER), GFORTRAN)
764 CCOMMON_OPT += -DF_INTERFACE_GFORT
766 # make single-threaded LAPACK calls thread-safe #1847
767 FCOMMON_OPT += -frecursive
768 # work around ABI problem with passing single-character arguments
769 FCOMMON_OPT += -fno-optimize-sibling-calls
770 #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
771 ifneq ($(NO_LAPACK), 1)
772 EXTRALIB += -lgfortran
775 ifeq ($(ARCH), $(filter $(ARCH),mips64))
777 FCOMMON_OPT += -mabi=64
779 FCOMMON_OPT += -mabi=n32
781 else ifeq ($(ARCH), $(filter $(ARCH),mips))
782 FCOMMON_OPT += -mabi=32
786 ifneq ($(OSNAME), AIX)
790 ifneq ($(INTERFACE64), 0)
791 FCOMMON_OPT += -fdefault-integer-8
795 ifneq ($(OSNAME), AIX)
800 ifeq ($(USE_OPENMP), 1)
801 FCOMMON_OPT += -fopenmp
805 ifeq ($(F_COMPILER), INTEL)
806 CCOMMON_OPT += -DF_INTERFACE_INTEL
808 ifneq ($(INTERFACE64), 0)
812 ifeq ($(USE_OPENMP), 1)
813 FCOMMON_OPT += -fopenmp
817 ifeq ($(F_COMPILER), FUJITSU)
818 CCOMMON_OPT += -DF_INTERFACE_FUJITSU
819 ifeq ($(USE_OPENMP), 1)
820 FCOMMON_OPT += -openmp
824 ifeq ($(F_COMPILER), IBM)
825 CCOMMON_OPT += -DF_INTERFACE_IBM
826 # FCOMMON_OPT += -qarch=440
830 ifneq ($(INTERFACE64), 0)
831 FCOMMON_OPT += -qintsize=8
837 ifeq ($(USE_OPENMP), 1)
838 FCOMMON_OPT += -openmp
842 ifeq ($(F_COMPILER), PGI)
843 CCOMMON_OPT += -DF_INTERFACE_PGI
844 COMMON_PROF += -DPGICOMPILER
847 ifneq ($(INTERFACE64), 0)
851 FCOMMON_OPT += -tp p7-64
853 FCOMMON_OPT += -tp p7
855 ifeq ($(USE_OPENMP), 1)
860 ifeq ($(F_COMPILER), PATHSCALE)
861 CCOMMON_OPT += -DF_INTERFACE_PATHSCALE
864 ifneq ($(INTERFACE64), 0)
870 ifeq ($(USE_OPENMP), 1)
875 ifeq ($(F_COMPILER), OPEN64)
876 CCOMMON_OPT += -DF_INTERFACE_OPEN64
879 ifneq ($(INTERFACE64), 0)
885 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
891 ifeq ($(CORE), LOONGSON3A)
892 FCOMMON_OPT += -loongson3 -static
895 ifeq ($(CORE), LOONGSON3B)
896 FCOMMON_OPT += -loongson3 -static
907 ifeq ($(USE_OPENMP), 1)
908 FEXTRALIB += -lstdc++
913 ifeq ($(C_COMPILER), OPEN64)
915 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
921 ifeq ($(CORE), LOONGSON3A)
922 CCOMMON_OPT += -loongson3 -static
925 ifeq ($(CORE), LOONGSON3B)
926 CCOMMON_OPT += -loongson3 -static
939 ifeq ($(C_COMPILER), SUN)
948 ifeq ($(F_COMPILER), SUN)
949 CCOMMON_OPT += -DF_INTERFACE_SUN
955 ifeq ($(USE_OPENMP), 1)
956 FCOMMON_OPT += -xopenmp=parallel
960 ifeq ($(F_COMPILER), COMPAQ)
961 CCOMMON_OPT += -DF_INTERFACE_COMPAQ
962 ifeq ($(USE_OPENMP), 1)
963 FCOMMON_OPT += -openmp
969 ifneq ($(INTERFACE64), 0)
976 ifeq ($(NEED_PIC), 1)
977 ifeq ($(C_COMPILER), IBM)
978 CCOMMON_OPT += -qpic=large
982 ifeq ($(F_COMPILER), SUN)
989 ifeq ($(DYNAMIC_ARCH), 1)
990 CCOMMON_OPT += -DDYNAMIC_ARCH
993 ifeq ($(DYNAMIC_OLDER), 1)
994 CCOMMON_OPT += -DDYNAMIC_OLDER
997 ifeq ($(NO_LAPACK), 1)
998 CCOMMON_OPT += -DNO_LAPACK
999 #Disable LAPACK C interface
1003 ifeq ($(NO_LAPACKE), 1)
1004 CCOMMON_OPT += -DNO_LAPACKE
1008 CCOMMON_OPT += -DNO_AVX
1012 CCOMMON_OPT += -DNO_AVX
1015 ifeq ($(NO_AVX2), 1)
1016 CCOMMON_OPT += -DNO_AVX2
1019 ifeq ($(NO_AVX512), 1)
1020 CCOMMON_OPT += -DNO_AVX512
1024 CCOMMON_OPT += -DSMP_SERVER
1026 ifeq ($(ARCH), mips64)
1027 ifneq ($(CORE), LOONGSON3B)
1028 USE_SIMPLE_THREADED_LEVEL3 = 1
1032 ifeq ($(USE_OPENMP), 1)
1033 # USE_SIMPLE_THREADED_LEVEL3 = 1
1035 CCOMMON_OPT += -DUSE_OPENMP
1038 ifeq ($(BIGNUMA), 1)
1039 CCOMMON_OPT += -DBIGNUMA
1044 ifeq ($(NO_WARMUP), 1)
1045 CCOMMON_OPT += -DNO_WARMUP
1048 ifeq ($(CONSISTENT_FPCSR), 1)
1049 CCOMMON_OPT += -DCONSISTENT_FPCSR
1052 # Only for development
1053 # CCOMMON_OPT += -DPARAMTEST
1054 # CCOMMON_OPT += -DPREFETCHTEST
1055 # CCOMMON_OPT += -DNO_SWITCHING
1059 CCOMMON_OPT += -DUSE_PAPI
1060 EXTRALIB += -lpapi -lperfctr
1063 ifdef DYNAMIC_THREADS
1064 CCOMMON_OPT += -DDYNAMIC_THREADS
1067 CCOMMON_OPT += -DMAX_CPU_NUMBER=$(NUM_THREADS)
1069 CCOMMON_OPT += -DMAX_PARALLEL_NUMBER=$(NUM_PARALLEL)
1071 ifdef USE_SIMPLE_THREADED_LEVEL3
1072 CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3
1075 ifeq ($(USE_TLS), 1)
1076 CCOMMON_OPT += -DUSE_TLS
1079 CCOMMON_OPT += -DVERSION=\"$(VERSION)\"
1089 ifndef LIBNAMESUFFIX
1090 LIBNAMEBASE = $(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)
1092 LIBNAMEBASE = $(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)_$(LIBNAMESUFFIX)
1095 ifeq ($(OSNAME), CYGWIN_NT)
1096 LIBPREFIX = cyg$(LIBNAMEBASE)
1098 LIBPREFIX = lib$(LIBNAMEBASE)
1101 KERNELDIR = $(TOPDIR)/kernel/$(ARCH)
1103 include $(TOPDIR)/Makefile.$(ARCH)
1105 CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
1107 ifeq ($(CORE), PPC440)
1108 CCOMMON_OPT += -DALLOC_QALLOC
1111 ifeq ($(CORE), PPC440FP2)
1112 STATIC_ALLOCATION = 1
1115 ifneq ($(OSNAME), Linux)
1119 ifneq ($(ARCH), x86_64)
1120 ifneq ($(ARCH), x86)
1121 ifneq ($(CORE), LOONGSON3B)
1128 ifeq ($(NO_AFFINITY), 0)
1129 override undefine NO_AFFINITY
1131 CCOMMON_OPT += -DNO_AFFINITY
1135 ifdef FUNCTION_PROFILE
1136 CCOMMON_OPT += -DFUNCTION_PROFILE
1139 ifdef HUGETLB_ALLOCATION
1140 CCOMMON_OPT += -DALLOC_HUGETLB
1143 ifdef HUGETLBFILE_ALLOCATION
1144 CCOMMON_OPT += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
1147 ifdef STATIC_ALLOCATION
1148 CCOMMON_OPT += -DALLOC_STATIC
1151 ifdef DEVICEDRIVER_ALLOCATION
1152 CCOMMON_OPT += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
1155 ifdef MIXED_MEMORY_ALLOCATION
1156 CCOMMON_OPT += -DMIXED_MEMORY_ALLOCATION
1159 ifeq ($(OSNAME), SunOS)
1176 REVISION = -r$(VERSION)
1177 MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
1192 FCOMMON_OPT = -O2 -frecursive
1195 override CFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
1196 override PFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
1198 override FFLAGS += $(COMMON_OPT) $(FCOMMON_OPT)
1199 override FPFLAGS += $(FCOMMON_OPT) $(COMMON_PROF)
1203 ifeq (,$(findstring PIC,$(FFLAGS)))
1204 override FFLAGS += -fPIC
1208 #For LAPACK Fortran codes.
1209 #Disable -fopenmp for LAPACK Fortran codes on Windows.
1211 LAPACK_FFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FFLAGS))
1212 LAPACK_FPFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FPFLAGS))
1214 LAPACK_FFLAGS := $(FFLAGS)
1215 LAPACK_FPFLAGS := $(FPFLAGS)
1218 LAPACK_CFLAGS = $(CFLAGS)
1219 LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
1221 ifneq ($(INTERFACE64), 0)
1222 LAPACK_CFLAGS += -DLAPACK_ILP64
1227 LAPACK_CFLAGS += -DOPENBLAS_OS_WINDOWS
1229 ifeq ($(C_COMPILER), LSB)
1230 LAPACK_CFLAGS += -DLAPACK_COMPLEX_STRUCTURE
1245 ifneq ($(DYNAMIC_ARCH), 1)
1247 LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
1248 LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
1250 LIBNAME = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
1251 LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
1255 LIBNAME = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
1256 LIBNAME_P = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
1258 LIBNAME = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
1259 LIBNAME_P = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
1264 LIBDLLNAME = $(LIBPREFIX).dll
1265 IMPLIBNAME = lib$(LIBNAMEBASE).dll.a
1266 ifneq ($(OSNAME), AIX)
1267 LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.so)
1269 LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.a)
1271 LIBDYNNAME = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
1272 LIBDEFNAME = $(LIBNAME:.$(LIBSUFFIX)=.def)
1273 LIBEXPNAME = $(LIBNAME:.$(LIBSUFFIX)=.exp)
1274 LIBZIPNAME = $(LIBNAME:.$(LIBSUFFIX)=.zip)
1276 LIBS = $(TOPDIR)/$(LIBNAME)
1277 LIBS_P = $(TOPDIR)/$(LIBNAME_P)
1280 LIB_COMPONENTS = BLAS
1281 ifneq ($(NO_CBLAS), 1)
1282 LIB_COMPONENTS += CBLAS
1285 ifneq ($(NO_LAPACK), 1)
1286 LIB_COMPONENTS += LAPACK
1287 ifneq ($(NO_LAPACKE), 1)
1288 LIB_COMPONENTS += LAPACKE
1290 ifeq ($(BUILD_RELAPACK), 1)
1291 LIB_COMPONENTS += ReLAPACK
1295 ifeq ($(ONLY_CBLAS), 1)
1296 LIB_COMPONENTS = CBLAS
1309 export NEED2UNDERSCORES
1314 export MAKEFILE_RULE
1345 export FUNCTION_PROFILE
1349 export SGEMM_UNROLL_M
1350 export SGEMM_UNROLL_N
1351 export DGEMM_UNROLL_M
1352 export DGEMM_UNROLL_N
1353 export QGEMM_UNROLL_M
1354 export QGEMM_UNROLL_N
1355 export CGEMM_UNROLL_M
1356 export CGEMM_UNROLL_N
1357 export ZGEMM_UNROLL_M
1358 export ZGEMM_UNROLL_N
1359 export XGEMM_UNROLL_M
1360 export XGEMM_UNROLL_N
1361 export CGEMM3M_UNROLL_M
1362 export CGEMM3M_UNROLL_N
1363 export ZGEMM3M_UNROLL_M
1364 export ZGEMM3M_UNROLL_N
1365 export XGEMM3M_UNROLL_M
1366 export XGEMM3M_UNROLL_N
1376 .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
1379 $(FC) $(FFLAGS) -c $< -o $(@F)
1382 $(FC) $(FPFLAGS) -pg -c $< -o $(@F)
1386 PATHSCALEPATH = /opt/pathscale/lib/3.1
1387 PGIPATH = /opt/pgi/linux86-64/7.1-5/lib
1389 PATHSCALEPATH = /opt/pathscale/lib/3.1/32
1390 PGIPATH = /opt/pgi/linux86/7.1-5/lib
1393 ACMLPATH = /opt/acml/4.3.0
1394 ifneq ($(OSNAME), Darwin)
1395 MKLPATH = /opt/intel/mkl/10.2.2.025/lib
1397 MKLPATH = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
1399 ATLASPATH = /opt/atlas/3.9.17/opteron
1400 FLAMEPATH = $(HOME)/flame/lib
1401 ifneq ($(OSNAME), SunOS)
1402 SUNPATH = /opt/sunstudio12.1
1404 SUNPATH = /opt/SUNWspro