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 GETARCH_FLAGS += -march=native
152 ifneq ($(INTERFACE64), 0)
153 GETARCH_FLAGS += -DUSE64BITINT
157 ifndef GEMM_MULTITHREAD_THRESHOLD
158 GEMM_MULTITHREAD_THRESHOLD=4
160 GETARCH_FLAGS += -DGEMM_MULTITHREAD_THRESHOLD=$(GEMM_MULTITHREAD_THRESHOLD)
163 GETARCH_FLAGS += -DNO_AVX
167 GETARCH_FLAGS += -DNO_AVX -DNO_AVX2 -DNO_AVX512
172 GETARCH_FLAGS += -DNO_AVX2
175 ifeq ($(NO_AVX512), 1)
176 GETARCH_FLAGS += -DNO_AVX512
183 ifeq ($(QUIET_MAKE), 1)
187 ifndef NO_PARALLEL_MAKE
190 GETARCH_FLAGS += -DNO_PARALLEL_MAKE=$(NO_PARALLEL_MAKE)
193 GETARCH_FLAGS += -DMAKE_NB_JOBS=$(MAKE_NB_JOBS)
196 ifeq ($(HOSTCC), loongcc)
197 GETARCH_FLAGS += -static
200 #if don't use Fortran, it will only compile CBLAS.
201 ifeq ($(ONLY_CBLAS), 1)
207 # This operation is expensive, so execution should be once.
208 ifndef GOTOBLAS_MAKEFILE
209 export GOTOBLAS_MAKEFILE = 1
211 # Generating Makefile.conf and config.h
212 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)
215 include $(TOPDIR)/Makefile.conf
217 include $(TOPDIR)/Makefile_kernel.conf
227 NUM_THREADS = $(NUM_CORES)
230 ifeq ($(NUM_THREADS), 1)
231 override USE_THREAD = 0
232 override USE_OPENMP = 0
236 ifeq ($(USE_THREAD), 0)
242 ifeq ($(NUM_THREAD), 1)
259 AR = $(CROSS_SUFFIX)ar
260 AS = $(CROSS_SUFFIX)as
261 LD = $(CROSS_SUFFIX)ld
262 RANLIB = $(CROSS_SUFFIX)ranlib
263 NM = $(CROSS_SUFFIX)nm
264 DLLWRAP = $(CROSS_SUFFIX)dllwrap
265 OBJCOPY = $(CROSS_SUFFIX)objcopy
266 OBJCONV = $(CROSS_SUFFIX)objconv
269 # For detect fortran failed, only build BLAS.
270 ifeq ($(NOFORTRAN), 1)
275 # OS dependent settings
278 ifeq ($(OSNAME), Darwin)
279 ifndef MACOSX_DEPLOYMENT_TARGET
280 export MACOSX_DEPLOYMENT_TARGET=10.8
285 ifneq (,$(findstring $(OSNAME), FreeBSD OpenBSD DragonFly))
289 ifeq ($(OSNAME), NetBSD)
293 ifeq ($(OSNAME), Linux)
298 ifeq ($(OSNAME), Android)
302 ifeq ($(OSNAME), AIX)
306 ifeq ($(OSNAME), WINNT)
310 EXTRALIB += -defaultlib:advapi32
316 ifeq ($(C_COMPILER), CLANG)
317 CCOMMON_OPT += -DMS_ABI
320 ifeq ($(C_COMPILER), GCC)
321 #Test for supporting MS_ABI
322 GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
323 GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4)
324 GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 7)
325 ifeq ($(GCCVERSIONGT4), 1)
326 # GCC Majar version > 4
327 # It is compatible with MSVC ABI.
328 CCOMMON_OPT += -DMS_ABI
331 ifeq ($(GCCVERSIONGTEQ4), 1)
332 ifeq ($(GCCMINORVERSIONGTEQ7), 1)
334 # It is compatible with MSVC ABI.
335 CCOMMON_OPT += -DMS_ABI
340 # Ensure the correct stack alignment on Win32
341 # http://permalink.gmane.org/gmane.comp.lib.openblas.general/97
343 CCOMMON_OPT += -mincoming-stack-boundary=2
344 FCOMMON_OPT += -mincoming-stack-boundary=2
349 ifeq ($(OSNAME), Interix)
353 INTERIX_TOOL_DIR = /opt/gcc.3.3/i586-pc-interix3/bin
356 ifeq ($(OSNAME), CYGWIN_NT)
362 ifneq ($(OSNAME), WINNT)
363 ifneq ($(OSNAME), CYGWIN_NT)
364 ifneq ($(OSNAME), Interix)
365 ifneq ($(OSNAME), Android)
367 EXTRALIB += -lpthread
375 ifeq ($(OSNAME), $(filter $(OSNAME),WINNT CYGWIN_NT Interix))
380 CCOMMON_OPT += -DQUAD_PRECISION
385 ifneq ($(ARCH), x86_64)
391 CCOMMON_OPT += -DUTEST_CHECK
396 CCOMMON_OPT += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU)
399 MAX_STACK_ALLOC ?= 2048
400 ifneq ($(MAX_STACK_ALLOC), 0)
401 CCOMMON_OPT += -DMAX_STACK_ALLOC=$(MAX_STACK_ALLOC)
405 ifneq ($(USE_LOCKING), 0)
406 CCOMMON_OPT += -DUSE_LOCKING
411 # Architecture dependent settings
419 ifeq ($(CORE), generic)
423 ifndef NO_EXPRECISION
424 ifeq ($(F_COMPILER), GFORTRAN)
425 # ifeq logical or. GCC or LSB
426 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
428 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
429 FCOMMON_OPT += -m128bit-long-double
431 ifeq ($(C_COMPILER), CLANG)
433 CCOMMON_OPT += -DEXPRECISION
434 FCOMMON_OPT += -m128bit-long-double
440 ifeq ($(ARCH), x86_64)
442 ifeq ($(CORE), generic)
446 ifndef NO_EXPRECISION
447 ifeq ($(F_COMPILER), GFORTRAN)
448 # ifeq logical or. GCC or LSB
449 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
451 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
452 FCOMMON_OPT += -m128bit-long-double
454 ifeq ($(C_COMPILER), CLANG)
456 CCOMMON_OPT += -DEXPRECISION
457 FCOMMON_OPT += -m128bit-long-double
463 ifeq ($(C_COMPILER), INTEL)
464 CCOMMON_OPT += -wd981
468 ifeq ($(USE_OPENMP), 1)
471 ifeq ($(USE_THREAD), 0)
472 $(error OpenBLAS: Cannot set both USE_OPENMP=1 and USE_THREAD=0. The USE_THREAD=0 is only for building single thread version.)
475 # ifeq logical or. GCC or LSB
476 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
477 CCOMMON_OPT += -fopenmp
480 ifeq ($(C_COMPILER), CLANG)
481 CCOMMON_OPT += -fopenmp
484 ifeq ($(C_COMPILER), INTEL)
485 CCOMMON_OPT += -fopenmp
488 ifeq ($(C_COMPILER), PGI)
492 ifeq ($(C_COMPILER), OPEN64)
494 CEXTRALIB += -lstdc++
497 ifeq ($(C_COMPILER), PATHSCALE)
503 ifeq ($(DYNAMIC_ARCH), 1)
505 DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \
506 CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
509 ifeq ($(ARCH), x86_64)
510 DYNAMIC_CORE = PRESCOTT CORE2
511 ifeq ($(DYNAMIC_OLDER), 1)
512 DYNAMIC_CORE += PENRYN DUNNINGTON
514 DYNAMIC_CORE += NEHALEM
515 ifeq ($(DYNAMIC_OLDER), 1)
516 DYNAMIC_CORE += OPTERON OPTERON_SSE3
518 DYNAMIC_CORE += BARCELONA
519 ifeq ($(DYNAMIC_OLDER), 1)
520 DYNAMIC_CORE += BOBCAT ATOM NANO
523 DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER STEAMROLLER EXCAVATOR
525 ifneq ($(NO_AVX2), 1)
526 DYNAMIC_CORE += HASWELL ZEN
528 ifneq ($(NO_AVX512), 1)
529 ifneq ($(NO_AVX2), 1)
530 DYNAMIC_CORE += SKYLAKEX
536 override DYNAMIC_CORE = PRESCOTT $(DYNAMIC_LIST)
537 XCCOMMON_OPT = -DDYNAMIC_LIST -DDYN_PRESCOTT
538 XCCOMMON_OPT += $(foreach dcore,$(DYNAMIC_LIST),-DDYN_$(dcore))
539 CCOMMON_OPT += $(XCCOMMON_OPT)
540 #CCOMMON_OPT += -DDYNAMIC_LIST='$(DYNAMIC_LIST)'
543 ifeq ($(ARCH), arm64)
545 DYNAMIC_CORE += CORTEXA57
546 DYNAMIC_CORE += THUNDERX
547 DYNAMIC_CORE += THUNDERX2T99
550 ifeq ($(ARCH), power)
551 DYNAMIC_CORE = POWER6
552 DYNAMIC_CORE += POWER8
553 DYNAMIC_CORE += POWER9
556 # If DYNAMIC_CORE is not set, DYNAMIC_ARCH cannot do anything, so force it to empty
558 override DYNAMIC_ARCH=
566 ifeq ($(F_COMPILER), GFORTRAN)
567 ifeq ($(C_COMPILER), GCC)
569 # CCOMMON_OPT += -DEXPRECISION
574 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
578 ifeq ($(ARCH), alpha)
590 # If softfp abi is mentioned on the command line, force it.
591 ifeq ($(ARM_SOFTFP_ABI), 1)
592 CCOMMON_OPT += -mfloat-abi=softfp
593 FCOMMON_OPT += -mfloat-abi=softfp
596 ifeq ($(OSNAME), Android)
597 ifeq ($(ARM_SOFTFP_ABI), 1)
600 EXTRALIB += -Wl,-lm_hard
605 ifeq ($(ARCH), arm64)
614 # C Compiler dependent settings
618 # ifeq logical or. GCC or CLANG or LSB
619 # http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
620 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG LSB))
622 COMMON_PROF += -fno-inline
623 NO_UNINITIALIZED_WARN = -Wno-uninitialized
625 ifeq ($(QUIET_MAKE), 1)
626 CCOMMON_OPT += $(NO_UNINITIALIZED_WARN) -Wno-unused
631 ifeq ($(ARCH), $(filter $(ARCH),mips64))
633 CCOMMON_OPT += -mabi=64
635 CCOMMON_OPT += -mabi=n32
638 else ifeq ($(ARCH), $(filter $(ARCH),mips))
639 CCOMMON_OPT += -mabi=32
643 ifeq ($(CORE), LOONGSON3A)
644 CCOMMON_OPT += -march=mips64
645 FCOMMON_OPT += -march=mips64
648 ifeq ($(CORE), LOONGSON3B)
649 CCOMMON_OPT += -march=mips64
650 FCOMMON_OPT += -march=mips64
653 ifeq ($(CORE), 1004K)
654 CCOMMON_OPT += -mips32r2 $(MSA_FLAGS)
655 FCOMMON_OPT += -mips32r2 $(MSA_FLAGS)
658 ifeq ($(CORE), P5600)
659 CCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS)
660 FCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS)
663 ifeq ($(CORE), I6400)
664 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
665 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
668 ifeq ($(CORE), P6600)
669 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
670 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
673 ifeq ($(CORE), I6500)
674 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
675 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
678 ifeq ($(OSNAME), AIX)
684 ifndef BINARY_DEFINED
685 ifneq ($(OSNAME), AIX)
696 ifeq ($(C_COMPILER), PGI)
698 CCOMMON_OPT += -tp p7-64
700 CCOMMON_OPT += -tp p7
704 ifeq ($(C_COMPILER), PATHSCALE)
713 # Fortran Compiler dependent settings
716 ifeq ($(F_COMPILER), FLANG)
717 CCOMMON_OPT += -DF_INTERFACE_FLANG
720 ifneq ($(INTERFACE64), 0)
728 ifeq ($(USE_OPENMP), 1)
729 FCOMMON_OPT += -fopenmp
733 ifeq ($(F_COMPILER), G77)
734 CCOMMON_OPT += -DF_INTERFACE_G77
736 ifndef NO_BINARY_MODE
737 ifneq ($(OSNAME), AIX)
747 ifeq ($(F_COMPILER), G95)
748 CCOMMON_OPT += -DF_INTERFACE_G95
750 ifneq ($(OSNAME), AIX)
751 ifndef NO_BINARY_MODE
761 ifeq ($(F_COMPILER), GFORTRAN)
762 CCOMMON_OPT += -DF_INTERFACE_GFORT
764 # make single-threaded LAPACK calls thread-safe #1847
765 FCOMMON_OPT += -frecursive
766 # work around ABI problem with passing single-character arguments
767 FCOMMON_OPT += -fno-optimize-sibling-calls
768 #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
769 ifneq ($(NO_LAPACK), 1)
770 EXTRALIB += -lgfortran
773 ifeq ($(ARCH), $(filter $(ARCH),mips64))
775 FCOMMON_OPT += -mabi=64
777 FCOMMON_OPT += -mabi=n32
779 else ifeq ($(ARCH), $(filter $(ARCH),mips))
780 FCOMMON_OPT += -mabi=32
784 ifneq ($(OSNAME), AIX)
788 ifneq ($(INTERFACE64), 0)
789 FCOMMON_OPT += -fdefault-integer-8
793 ifneq ($(OSNAME), AIX)
798 ifeq ($(USE_OPENMP), 1)
799 FCOMMON_OPT += -fopenmp
803 ifeq ($(F_COMPILER), INTEL)
804 CCOMMON_OPT += -DF_INTERFACE_INTEL
806 ifneq ($(INTERFACE64), 0)
810 ifeq ($(USE_OPENMP), 1)
811 FCOMMON_OPT += -fopenmp
815 ifeq ($(F_COMPILER), FUJITSU)
816 CCOMMON_OPT += -DF_INTERFACE_FUJITSU
817 ifeq ($(USE_OPENMP), 1)
818 FCOMMON_OPT += -openmp
822 ifeq ($(F_COMPILER), IBM)
823 CCOMMON_OPT += -DF_INTERFACE_IBM
824 # FCOMMON_OPT += -qarch=440
828 ifneq ($(INTERFACE64), 0)
829 FCOMMON_OPT += -qintsize=8
835 ifeq ($(USE_OPENMP), 1)
836 FCOMMON_OPT += -openmp
840 ifeq ($(F_COMPILER), PGI)
841 CCOMMON_OPT += -DF_INTERFACE_PGI
842 COMMON_PROF += -DPGICOMPILER
845 ifneq ($(INTERFACE64), 0)
849 FCOMMON_OPT += -tp p7-64
851 FCOMMON_OPT += -tp p7
853 ifeq ($(USE_OPENMP), 1)
858 ifeq ($(F_COMPILER), PATHSCALE)
859 CCOMMON_OPT += -DF_INTERFACE_PATHSCALE
862 ifneq ($(INTERFACE64), 0)
868 ifeq ($(USE_OPENMP), 1)
873 ifeq ($(F_COMPILER), OPEN64)
874 CCOMMON_OPT += -DF_INTERFACE_OPEN64
877 ifneq ($(INTERFACE64), 0)
883 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
889 ifeq ($(CORE), LOONGSON3A)
890 FCOMMON_OPT += -loongson3 -static
893 ifeq ($(CORE), LOONGSON3B)
894 FCOMMON_OPT += -loongson3 -static
905 ifeq ($(USE_OPENMP), 1)
906 FEXTRALIB += -lstdc++
911 ifeq ($(C_COMPILER), OPEN64)
913 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
919 ifeq ($(CORE), LOONGSON3A)
920 CCOMMON_OPT += -loongson3 -static
923 ifeq ($(CORE), LOONGSON3B)
924 CCOMMON_OPT += -loongson3 -static
937 ifeq ($(C_COMPILER), SUN)
946 ifeq ($(F_COMPILER), SUN)
947 CCOMMON_OPT += -DF_INTERFACE_SUN
953 ifeq ($(USE_OPENMP), 1)
954 FCOMMON_OPT += -xopenmp=parallel
958 ifeq ($(F_COMPILER), COMPAQ)
959 CCOMMON_OPT += -DF_INTERFACE_COMPAQ
960 ifeq ($(USE_OPENMP), 1)
961 FCOMMON_OPT += -openmp
967 ifneq ($(INTERFACE64), 0)
974 ifeq ($(NEED_PIC), 1)
975 ifeq ($(C_COMPILER), IBM)
976 CCOMMON_OPT += -qpic=large
980 ifeq ($(F_COMPILER), SUN)
987 ifeq ($(DYNAMIC_ARCH), 1)
988 CCOMMON_OPT += -DDYNAMIC_ARCH
991 ifeq ($(DYNAMIC_OLDER), 1)
992 CCOMMON_OPT += -DDYNAMIC_OLDER
995 ifeq ($(NO_LAPACK), 1)
996 CCOMMON_OPT += -DNO_LAPACK
997 #Disable LAPACK C interface
1001 ifeq ($(NO_LAPACKE), 1)
1002 CCOMMON_OPT += -DNO_LAPACKE
1006 CCOMMON_OPT += -DNO_AVX
1010 CCOMMON_OPT += -DNO_AVX
1013 ifeq ($(NO_AVX2), 1)
1014 CCOMMON_OPT += -DNO_AVX2
1017 ifeq ($(NO_AVX512), 1)
1018 CCOMMON_OPT += -DNO_AVX512
1022 CCOMMON_OPT += -DSMP_SERVER
1024 ifeq ($(ARCH), mips64)
1025 ifneq ($(CORE), LOONGSON3B)
1026 USE_SIMPLE_THREADED_LEVEL3 = 1
1030 ifeq ($(USE_OPENMP), 1)
1031 # USE_SIMPLE_THREADED_LEVEL3 = 1
1033 CCOMMON_OPT += -DUSE_OPENMP
1036 ifeq ($(BIGNUMA), 1)
1037 CCOMMON_OPT += -DBIGNUMA
1042 ifeq ($(NO_WARMUP), 1)
1043 CCOMMON_OPT += -DNO_WARMUP
1046 ifeq ($(CONSISTENT_FPCSR), 1)
1047 CCOMMON_OPT += -DCONSISTENT_FPCSR
1050 # Only for development
1051 # CCOMMON_OPT += -DPARAMTEST
1052 # CCOMMON_OPT += -DPREFETCHTEST
1053 # CCOMMON_OPT += -DNO_SWITCHING
1057 CCOMMON_OPT += -DUSE_PAPI
1058 EXTRALIB += -lpapi -lperfctr
1061 ifdef DYNAMIC_THREADS
1062 CCOMMON_OPT += -DDYNAMIC_THREADS
1065 CCOMMON_OPT += -DMAX_CPU_NUMBER=$(NUM_THREADS)
1067 CCOMMON_OPT += -DMAX_PARALLEL_NUMBER=$(NUM_PARALLEL)
1069 ifdef USE_SIMPLE_THREADED_LEVEL3
1070 CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3
1073 ifeq ($(USE_TLS), 1)
1074 CCOMMON_OPT += -DUSE_TLS
1077 CCOMMON_OPT += -DVERSION=\"$(VERSION)\"
1087 ifndef LIBNAMESUFFIX
1088 LIBNAMEBASE = $(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)
1090 LIBNAMEBASE = $(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)_$(LIBNAMESUFFIX)
1093 ifeq ($(OSNAME), CYGWIN_NT)
1094 LIBPREFIX = cyg$(LIBNAMEBASE)
1096 LIBPREFIX = lib$(LIBNAMEBASE)
1099 KERNELDIR = $(TOPDIR)/kernel/$(ARCH)
1101 include $(TOPDIR)/Makefile.$(ARCH)
1103 CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
1105 ifeq ($(CORE), PPC440)
1106 CCOMMON_OPT += -DALLOC_QALLOC
1109 ifeq ($(CORE), PPC440FP2)
1110 STATIC_ALLOCATION = 1
1113 ifneq ($(OSNAME), Linux)
1117 ifneq ($(ARCH), x86_64)
1118 ifneq ($(ARCH), x86)
1119 ifneq ($(CORE), LOONGSON3B)
1126 CCOMMON_OPT += -DNO_AFFINITY
1129 ifdef FUNCTION_PROFILE
1130 CCOMMON_OPT += -DFUNCTION_PROFILE
1133 ifdef HUGETLB_ALLOCATION
1134 CCOMMON_OPT += -DALLOC_HUGETLB
1137 ifdef HUGETLBFILE_ALLOCATION
1138 CCOMMON_OPT += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
1141 ifdef STATIC_ALLOCATION
1142 CCOMMON_OPT += -DALLOC_STATIC
1145 ifdef DEVICEDRIVER_ALLOCATION
1146 CCOMMON_OPT += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
1149 ifdef MIXED_MEMORY_ALLOCATION
1150 CCOMMON_OPT += -DMIXED_MEMORY_ALLOCATION
1153 ifeq ($(OSNAME), SunOS)
1170 REVISION = -r$(VERSION)
1171 MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
1186 FCOMMON_OPT = -O2 -frecursive
1189 override CFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
1190 override PFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
1192 override FFLAGS += $(COMMON_OPT) $(FCOMMON_OPT)
1193 override FPFLAGS += $(FCOMMON_OPT) $(COMMON_PROF)
1197 ifeq (,$(findstring PIC,$(FFLAGS)))
1198 override FFLAGS += -fPIC
1202 #For LAPACK Fortran codes.
1203 #Disable -fopenmp for LAPACK Fortran codes on Windows.
1205 LAPACK_FFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FFLAGS))
1206 LAPACK_FPFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FPFLAGS))
1208 LAPACK_FFLAGS := $(FFLAGS)
1209 LAPACK_FPFLAGS := $(FPFLAGS)
1212 LAPACK_CFLAGS = $(CFLAGS)
1213 LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
1215 ifneq ($(INTERFACE64), 0)
1216 LAPACK_CFLAGS += -DLAPACK_ILP64
1221 LAPACK_CFLAGS += -DOPENBLAS_OS_WINDOWS
1223 ifeq ($(C_COMPILER), LSB)
1224 LAPACK_CFLAGS += -DLAPACK_COMPLEX_STRUCTURE
1239 ifneq ($(DYNAMIC_ARCH), 1)
1241 LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
1242 LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
1244 LIBNAME = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
1245 LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
1249 LIBNAME = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
1250 LIBNAME_P = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
1252 LIBNAME = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
1253 LIBNAME_P = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
1258 LIBDLLNAME = $(LIBPREFIX).dll
1259 IMPLIBNAME = lib$(LIBNAMEBASE).dll.a
1260 ifneq ($(OSNAME), AIX)
1261 LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.so)
1263 LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.a)
1265 LIBDYNNAME = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
1266 LIBDEFNAME = $(LIBNAME:.$(LIBSUFFIX)=.def)
1267 LIBEXPNAME = $(LIBNAME:.$(LIBSUFFIX)=.exp)
1268 LIBZIPNAME = $(LIBNAME:.$(LIBSUFFIX)=.zip)
1270 LIBS = $(TOPDIR)/$(LIBNAME)
1271 LIBS_P = $(TOPDIR)/$(LIBNAME_P)
1274 LIB_COMPONENTS = BLAS
1275 ifneq ($(NO_CBLAS), 1)
1276 LIB_COMPONENTS += CBLAS
1279 ifneq ($(NO_LAPACK), 1)
1280 LIB_COMPONENTS += LAPACK
1281 ifneq ($(NO_LAPACKE), 1)
1282 LIB_COMPONENTS += LAPACKE
1284 ifeq ($(BUILD_RELAPACK), 1)
1285 LIB_COMPONENTS += ReLAPACK
1289 ifeq ($(ONLY_CBLAS), 1)
1290 LIB_COMPONENTS = CBLAS
1303 export NEED2UNDERSCORES
1308 export MAKEFILE_RULE
1339 export FUNCTION_PROFILE
1343 export SGEMM_UNROLL_M
1344 export SGEMM_UNROLL_N
1345 export DGEMM_UNROLL_M
1346 export DGEMM_UNROLL_N
1347 export QGEMM_UNROLL_M
1348 export QGEMM_UNROLL_N
1349 export CGEMM_UNROLL_M
1350 export CGEMM_UNROLL_N
1351 export ZGEMM_UNROLL_M
1352 export ZGEMM_UNROLL_N
1353 export XGEMM_UNROLL_M
1354 export XGEMM_UNROLL_N
1355 export CGEMM3M_UNROLL_M
1356 export CGEMM3M_UNROLL_N
1357 export ZGEMM3M_UNROLL_M
1358 export ZGEMM3M_UNROLL_N
1359 export XGEMM3M_UNROLL_M
1360 export XGEMM3M_UNROLL_N
1370 .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
1373 $(FC) $(FFLAGS) -c $< -o $(@F)
1376 $(FC) $(FPFLAGS) -pg -c $< -o $(@F)
1380 PATHSCALEPATH = /opt/pathscale/lib/3.1
1381 PGIPATH = /opt/pgi/linux86-64/7.1-5/lib
1383 PATHSCALEPATH = /opt/pathscale/lib/3.1/32
1384 PGIPATH = /opt/pgi/linux86/7.1-5/lib
1387 ACMLPATH = /opt/acml/4.3.0
1388 ifneq ($(OSNAME), Darwin)
1389 MKLPATH = /opt/intel/mkl/10.2.2.025/lib
1391 MKLPATH = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
1393 ATLASPATH = /opt/atlas/3.9.17/opteron
1394 FLAMEPATH = $(HOME)/flame/lib
1395 ifneq ($(OSNAME), SunOS)
1396 SUNPATH = /opt/sunstudio12.1
1398 SUNPATH = /opt/SUNWspro