2 # Include user definition
5 # TO suppress recursive includes
12 # Catch conflicting usage of ARCH in some BSD environments
15 else ifeq ($(ARCH), powerpc64)
17 else ifeq ($(ARCH), i386)
19 else ifeq ($(ARCH), aarch64)
23 NETLIB_LAPACK_DIR = $(TOPDIR)/lapack-netlib
26 # - Only set if not specified on the command line or inherited from the environment.
27 # - CC is an implicit variable so neither '?=' or 'ifndef' can be used.
28 # http://stackoverflow.com/questions/4029274/mingw-and-make-variables
29 # - Default value is 'cc' which is not always a valid command (e.g. MinGW).
30 ifeq ($(origin CC),default)
32 # Check if $(CC) refers to a valid command and set the value to gcc if not
33 ifneq ($(findstring cmd.exe,$(SHELL)),)
34 ifeq ($(shell where $(CC) 2>NUL),)
38 ifeq ($(shell command -v $(CC) 2>/dev/null),)
39 ifeq ($(shell uname -s),Darwin)
41 # EXTRALIB += -Wl,-no_compact_unwind
48 endif # CC is set to default
50 # Default Fortran compiler (FC) is selected by f_check.
53 include $(TOPDIR)/Makefile.rule
55 include $(TOPDIR)/$(MAKEFILE_RULE)
59 # Beginning of system configuration
67 GETARCH_FLAGS := -DFORCE_$(TARGET)
68 GETARCH_FLAGS += -DUSER_TARGET
71 # Force fallbacks for 32bit
74 ifeq ($(TARGET), HASWELL)
75 GETARCH_FLAGS := -DFORCE_NEHALEM
77 ifeq ($(TARGET), SKYLAKEX)
78 GETARCH_FLAGS := -DFORCE_NEHALEM
80 ifeq ($(TARGET), SANDYBRIDGE)
81 GETARCH_FLAGS := -DFORCE_NEHALEM
83 ifeq ($(TARGET), BULLDOZER)
84 GETARCH_FLAGS := -DFORCE_BARCELONA
86 ifeq ($(TARGET), PILEDRIVER)
87 GETARCH_FLAGS := -DFORCE_BARCELONA
89 ifeq ($(TARGET), STEAMROLLER)
90 GETARCH_FLAGS := -DFORCE_BARCELONA
92 ifeq ($(TARGET), EXCAVATOR)
93 GETARCH_FLAGS := -DFORCE_BARCELONA
96 GETARCH_FLAGS := -DFORCE_BARCELONA
98 ifeq ($(TARGET), ARMV8)
99 GETARCH_FLAGS := -DFORCE_ARMV7
104 #TARGET_CORE will override TARGET which is used in DYNAMIC_ARCH=1.
107 GETARCH_FLAGS := -DFORCE_$(TARGET_CORE)
110 # Force fallbacks for 32bit
113 ifeq ($(TARGET_CORE), HASWELL)
114 GETARCH_FLAGS := -DFORCE_NEHALEM
116 ifeq ($(TARGET_CORE), SKYLAKEX)
117 GETARCH_FLAGS := -DFORCE_NEHALEM
119 ifeq ($(TARGET_CORE), SANDYBRIDGE)
120 GETARCH_FLAGS := -DFORCE_NEHALEM
122 ifeq ($(TARGET_CORE), BULLDOZER)
123 GETARCH_FLAGS := -DFORCE_BARCELONA
125 ifeq ($(TARGET_CORE), PILEDRIVER)
126 GETARCH_FLAGS := -DFORCE_BARCELONA
128 ifeq ($(TARGET_CORE), STEAMROLLER)
129 GETARCH_FLAGS := -DFORCE_BARCELONA
131 ifeq ($(TARGET_CORE), EXCAVATOR)
132 GETARCH_FLAGS := -DFORCE_BARCELONA
134 ifeq ($(TARGET_CORE), ZEN)
135 GETARCH_FLAGS := -DFORCE_BARCELONA
143 ifneq ($(INTERFACE64), 0)
144 GETARCH_FLAGS += -DUSE64BITINT
148 ifndef GEMM_MULTITHREAD_THRESHOLD
149 GEMM_MULTITHREAD_THRESHOLD=4
151 GETARCH_FLAGS += -DGEMM_MULTITHREAD_THRESHOLD=$(GEMM_MULTITHREAD_THRESHOLD)
154 GETARCH_FLAGS += -DNO_AVX
158 GETARCH_FLAGS += -DNO_AVX -DNO_AVX2 -DNO_AVX512
163 GETARCH_FLAGS += -DNO_AVX2
166 ifeq ($(NO_AVX512), 1)
167 GETARCH_FLAGS += -DNO_AVX512
174 ifeq ($(QUIET_MAKE), 1)
178 ifndef NO_PARALLEL_MAKE
181 GETARCH_FLAGS += -DNO_PARALLEL_MAKE=$(NO_PARALLEL_MAKE)
184 GETARCH_FLAGS += -DMAKE_NB_JOBS=$(MAKE_NB_JOBS)
187 ifeq ($(HOSTCC), loongcc)
188 GETARCH_FLAGS += -static
191 #if don't use Fortran, it will only compile CBLAS.
192 ifeq ($(ONLY_CBLAS), 1)
198 # This operation is expensive, so execution should be once.
199 ifndef GOTOBLAS_MAKEFILE
200 export GOTOBLAS_MAKEFILE = 1
202 # Generating Makefile.conf and config.h
203 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)
206 include $(TOPDIR)/Makefile.conf
208 include $(TOPDIR)/Makefile_kernel.conf
218 NUM_THREADS = $(NUM_CORES)
221 ifeq ($(NUM_THREADS), 1)
222 override USE_THREAD = 0
223 override USE_OPENMP = 0
227 ifeq ($(USE_THREAD), 0)
233 ifeq ($(NUM_THREAD), 1)
246 AR = $(CROSS_SUFFIX)ar
247 AS = $(CROSS_SUFFIX)as
248 LD = $(CROSS_SUFFIX)ld
249 RANLIB = $(CROSS_SUFFIX)ranlib
250 NM = $(CROSS_SUFFIX)nm
251 DLLWRAP = $(CROSS_SUFFIX)dllwrap
252 OBJCOPY = $(CROSS_SUFFIX)objcopy
253 OBJCONV = $(CROSS_SUFFIX)objconv
256 # For detect fortran failed, only build BLAS.
257 ifeq ($(NOFORTRAN), 1)
262 # OS dependent settings
265 ifeq ($(OSNAME), Darwin)
266 ifndef MACOSX_DEPLOYMENT_TARGET
267 export MACOSX_DEPLOYMENT_TARGET=10.8
272 ifneq (,$(findstring $(OSNAME), FreeBSD OpenBSD DragonFly))
276 ifeq ($(OSNAME), NetBSD)
280 ifeq ($(OSNAME), Linux)
285 ifeq ($(OSNAME), Android)
289 ifeq ($(OSNAME), AIX)
293 ifeq ($(OSNAME), WINNT)
297 EXTRALIB += -defaultlib:advapi32
303 ifeq ($(C_COMPILER), CLANG)
304 CCOMMON_OPT += -DMS_ABI
307 ifeq ($(C_COMPILER), GCC)
308 #Test for supporting MS_ABI
309 GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
310 GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4)
311 GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 7)
312 ifeq ($(GCCVERSIONGT4), 1)
313 # GCC Majar version > 4
314 # It is compatible with MSVC ABI.
315 CCOMMON_OPT += -DMS_ABI
318 ifeq ($(GCCVERSIONGTEQ4), 1)
319 ifeq ($(GCCMINORVERSIONGTEQ7), 1)
321 # It is compatible with MSVC ABI.
322 CCOMMON_OPT += -DMS_ABI
327 # Ensure the correct stack alignment on Win32
328 # http://permalink.gmane.org/gmane.comp.lib.openblas.general/97
330 CCOMMON_OPT += -mincoming-stack-boundary=2
331 FCOMMON_OPT += -mincoming-stack-boundary=2
336 ifeq ($(OSNAME), Interix)
340 INTERIX_TOOL_DIR = /opt/gcc.3.3/i586-pc-interix3/bin
343 ifeq ($(OSNAME), CYGWIN_NT)
349 ifneq ($(OSNAME), WINNT)
350 ifneq ($(OSNAME), CYGWIN_NT)
351 ifneq ($(OSNAME), Interix)
352 ifneq ($(OSNAME), Android)
354 EXTRALIB += -lpthread
362 ifeq ($(OSNAME), $(filter $(OSNAME),WINNT CYGWIN_NT Interix))
367 CCOMMON_OPT += -DQUAD_PRECISION
372 ifneq ($(ARCH), x86_64)
378 CCOMMON_OPT += -DUTEST_CHECK
383 CCOMMON_OPT += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU)
386 MAX_STACK_ALLOC ?= 2048
387 ifneq ($(MAX_STACK_ALLOC), 0)
388 CCOMMON_OPT += -DMAX_STACK_ALLOC=$(MAX_STACK_ALLOC)
392 # Architecture dependent settings
400 ifeq ($(CORE), generic)
404 ifndef NO_EXPRECISION
405 ifeq ($(F_COMPILER), GFORTRAN)
406 # ifeq logical or. GCC or LSB
407 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
409 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
410 FCOMMON_OPT += -m128bit-long-double
412 ifeq ($(C_COMPILER), CLANG)
414 CCOMMON_OPT += -DEXPRECISION
415 FCOMMON_OPT += -m128bit-long-double
421 ifeq ($(ARCH), x86_64)
423 ifeq ($(CORE), generic)
427 ifndef NO_EXPRECISION
428 ifeq ($(F_COMPILER), GFORTRAN)
429 # ifeq logical or. GCC or LSB
430 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
432 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
433 FCOMMON_OPT += -m128bit-long-double
435 ifeq ($(C_COMPILER), CLANG)
437 CCOMMON_OPT += -DEXPRECISION
438 FCOMMON_OPT += -m128bit-long-double
444 ifeq ($(C_COMPILER), INTEL)
445 CCOMMON_OPT += -wd981
449 ifeq ($(USE_OPENMP), 1)
452 ifeq ($(USE_THREAD), 0)
453 $(error OpenBLAS: Cannot set both USE_OPENMP=1 and USE_THREAD=0. The USE_THREAD=0 is only for building single thread version.)
456 # ifeq logical or. GCC or LSB
457 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
458 CCOMMON_OPT += -fopenmp
461 ifeq ($(C_COMPILER), CLANG)
462 CCOMMON_OPT += -fopenmp
465 ifeq ($(C_COMPILER), INTEL)
466 CCOMMON_OPT += -fopenmp
469 ifeq ($(C_COMPILER), PGI)
473 ifeq ($(C_COMPILER), OPEN64)
475 CEXTRALIB += -lstdc++
478 ifeq ($(C_COMPILER), PATHSCALE)
484 ifeq ($(DYNAMIC_ARCH), 1)
486 DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \
487 CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
490 ifeq ($(ARCH), x86_64)
491 DYNAMIC_CORE = PRESCOTT CORE2
492 ifeq ($(DYNAMIC_OLDER), 1)
493 DYNAMIC_CORE += PENRYN DUNNINGTON
495 DYNAMIC_CORE += NEHALEM
496 ifeq ($(DYNAMIC_OLDER), 1)
497 DYNAMIC_CORE += OPTERON OPTERON_SSE3
499 DYNAMIC_CORE += BARCELONA
500 ifeq ($(DYNAMIC_OLDER), 1)
501 DYNAMIC_CORE += BOBCAT ATOM NANO
504 DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER STEAMROLLER EXCAVATOR
506 ifneq ($(NO_AVX2), 1)
507 DYNAMIC_CORE += HASWELL ZEN
509 ifneq ($(NO_AVX512), 1)
510 ifneq ($(NO_AVX2), 1)
511 DYNAMIC_CORE += SKYLAKEX
517 override DYNAMIC_CORE = PRESCOTT $(DYNAMIC_LIST)
518 XCCOMMON_OPT = -DDYNAMIC_LIST -DDYN_PRESCOTT
519 XCCOMMON_OPT += $(foreach dcore,$(DYNAMIC_LIST),-DDYN_$(dcore))
520 CCOMMON_OPT += $(XCCOMMON_OPT)
521 #CCOMMON_OPT += -DDYNAMIC_LIST='$(DYNAMIC_LIST)'
524 ifeq ($(ARCH), arm64)
526 DYNAMIC_CORE += CORTEXA57
527 DYNAMIC_CORE += THUNDERX
528 DYNAMIC_CORE += THUNDERX2T99
531 # If DYNAMIC_CORE is not set, DYNAMIC_ARCH cannot do anything, so force it to empty
533 override DYNAMIC_ARCH=
541 ifeq ($(F_COMPILER), GFORTRAN)
542 ifeq ($(C_COMPILER), GCC)
544 # CCOMMON_OPT += -DEXPRECISION
549 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
553 ifeq ($(ARCH), alpha)
565 # If softfp abi is mentioned on the command line, force it.
566 ifeq ($(ARM_SOFTFP_ABI), 1)
567 CCOMMON_OPT += -mfloat-abi=softfp
568 FCOMMON_OPT += -mfloat-abi=softfp
571 ifeq ($(OSNAME), Android)
572 ifeq ($(ARM_SOFTFP_ABI), 1)
575 EXTRALIB += -Wl,-lm_hard
580 ifeq ($(ARCH), arm64)
589 # C Compiler dependent settings
593 # ifeq logical or. GCC or CLANG or LSB
594 # http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
595 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG LSB))
597 COMMON_PROF += -fno-inline
598 NO_UNINITIALIZED_WARN = -Wno-uninitialized
600 ifeq ($(QUIET_MAKE), 1)
601 CCOMMON_OPT += $(NO_UNINITIALIZED_WARN) -Wno-unused
606 ifeq ($(ARCH), $(filter $(ARCH),mips64))
608 CCOMMON_OPT += -mabi=64
610 CCOMMON_OPT += -mabi=n32
613 else ifeq ($(ARCH), $(filter $(ARCH),mips))
614 CCOMMON_OPT += -mabi=32
618 ifeq ($(CORE), LOONGSON3A)
619 CCOMMON_OPT += -march=mips64
620 FCOMMON_OPT += -march=mips64
623 ifeq ($(CORE), LOONGSON3B)
624 CCOMMON_OPT += -march=mips64
625 FCOMMON_OPT += -march=mips64
628 ifeq ($(CORE), 1004K)
629 CCOMMON_OPT += -mips32r2 $(MSA_FLAGS)
630 FCOMMON_OPT += -mips32r2 $(MSA_FLAGS)
633 ifeq ($(CORE), P5600)
634 CCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS)
635 FCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS)
638 ifeq ($(CORE), I6400)
639 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
640 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
643 ifeq ($(CORE), P6600)
644 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
645 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
648 ifeq ($(CORE), I6500)
649 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
650 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
653 ifeq ($(OSNAME), AIX)
659 ifndef BINARY_DEFINED
660 ifneq ($(OSNAME), AIX)
671 ifeq ($(C_COMPILER), PGI)
673 CCOMMON_OPT += -tp p7-64
675 CCOMMON_OPT += -tp p7
679 ifeq ($(C_COMPILER), PATHSCALE)
688 # Fortran Compiler dependent settings
691 ifeq ($(F_COMPILER), FLANG)
692 CCOMMON_OPT += -DF_INTERFACE_FLANG
695 ifneq ($(INTERFACE64), 0)
703 ifeq ($(USE_OPENMP), 1)
704 FCOMMON_OPT += -fopenmp
708 ifeq ($(F_COMPILER), G77)
709 CCOMMON_OPT += -DF_INTERFACE_G77
711 ifndef NO_BINARY_MODE
712 ifneq ($(OSNAME), AIX)
722 ifeq ($(F_COMPILER), G95)
723 CCOMMON_OPT += -DF_INTERFACE_G95
725 ifneq ($(OSNAME), AIX)
726 ifndef NO_BINARY_MODE
736 ifeq ($(F_COMPILER), GFORTRAN)
737 CCOMMON_OPT += -DF_INTERFACE_GFORT
739 # make single-threaded LAPACK calls thread-safe #1847
740 FCOMMON_OPT += -frecursive
741 #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
742 ifneq ($(NO_LAPACK), 1)
743 EXTRALIB += -lgfortran
746 ifeq ($(ARCH), $(filter $(ARCH),mips64))
748 FCOMMON_OPT += -mabi=64
750 FCOMMON_OPT += -mabi=n32
752 else ifeq ($(ARCH), $(filter $(ARCH),mips))
753 FCOMMON_OPT += -mabi=32
757 ifneq ($(OSNAME), AIX)
761 ifneq ($(INTERFACE64), 0)
762 FCOMMON_OPT += -fdefault-integer-8
766 ifneq ($(OSNAME), AIX)
771 ifeq ($(USE_OPENMP), 1)
772 FCOMMON_OPT += -fopenmp
776 ifeq ($(F_COMPILER), INTEL)
777 CCOMMON_OPT += -DF_INTERFACE_INTEL
779 ifneq ($(INTERFACE64), 0)
783 ifeq ($(USE_OPENMP), 1)
784 FCOMMON_OPT += -fopenmp
788 ifeq ($(F_COMPILER), FUJITSU)
789 CCOMMON_OPT += -DF_INTERFACE_FUJITSU
790 ifeq ($(USE_OPENMP), 1)
791 FCOMMON_OPT += -openmp
795 ifeq ($(F_COMPILER), IBM)
796 CCOMMON_OPT += -DF_INTERFACE_IBM
797 # FCOMMON_OPT += -qarch=440
801 ifneq ($(INTERFACE64), 0)
802 FCOMMON_OPT += -qintsize=8
808 ifeq ($(USE_OPENMP), 1)
809 FCOMMON_OPT += -openmp
813 ifeq ($(F_COMPILER), PGI)
814 CCOMMON_OPT += -DF_INTERFACE_PGI
815 COMMON_PROF += -DPGICOMPILER
818 ifneq ($(INTERFACE64), 0)
822 FCOMMON_OPT += -tp p7-64
824 FCOMMON_OPT += -tp p7
826 ifeq ($(USE_OPENMP), 1)
831 ifeq ($(F_COMPILER), PATHSCALE)
832 CCOMMON_OPT += -DF_INTERFACE_PATHSCALE
835 ifneq ($(INTERFACE64), 0)
841 ifeq ($(USE_OPENMP), 1)
846 ifeq ($(F_COMPILER), OPEN64)
847 CCOMMON_OPT += -DF_INTERFACE_OPEN64
850 ifneq ($(INTERFACE64), 0)
856 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
862 ifeq ($(CORE), LOONGSON3A)
863 FCOMMON_OPT += -loongson3 -static
866 ifeq ($(CORE), LOONGSON3B)
867 FCOMMON_OPT += -loongson3 -static
878 ifeq ($(USE_OPENMP), 1)
879 FEXTRALIB += -lstdc++
884 ifeq ($(C_COMPILER), OPEN64)
886 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
892 ifeq ($(CORE), LOONGSON3A)
893 CCOMMON_OPT += -loongson3 -static
896 ifeq ($(CORE), LOONGSON3B)
897 CCOMMON_OPT += -loongson3 -static
910 ifeq ($(C_COMPILER), SUN)
919 ifeq ($(F_COMPILER), SUN)
920 CCOMMON_OPT += -DF_INTERFACE_SUN
926 ifeq ($(USE_OPENMP), 1)
927 FCOMMON_OPT += -xopenmp=parallel
931 ifeq ($(F_COMPILER), COMPAQ)
932 CCOMMON_OPT += -DF_INTERFACE_COMPAQ
933 ifeq ($(USE_OPENMP), 1)
934 FCOMMON_OPT += -openmp
940 ifneq ($(INTERFACE64), 0)
947 ifeq ($(NEED_PIC), 1)
948 ifeq ($(C_COMPILER), IBM)
949 CCOMMON_OPT += -qpic=large
953 ifeq ($(F_COMPILER), SUN)
960 ifeq ($(DYNAMIC_ARCH), 1)
961 CCOMMON_OPT += -DDYNAMIC_ARCH
964 ifeq ($(DYNAMIC_OLDER), 1)
965 CCOMMON_OPT += -DDYNAMIC_OLDER
968 ifeq ($(NO_LAPACK), 1)
969 CCOMMON_OPT += -DNO_LAPACK
970 #Disable LAPACK C interface
974 ifeq ($(NO_LAPACKE), 1)
975 CCOMMON_OPT += -DNO_LAPACKE
979 CCOMMON_OPT += -DNO_AVX
983 CCOMMON_OPT += -DNO_AVX
987 CCOMMON_OPT += -DNO_AVX2
990 ifeq ($(NO_AVX512), 1)
991 CCOMMON_OPT += -DNO_AVX512
995 CCOMMON_OPT += -DSMP_SERVER
997 ifeq ($(ARCH), mips64)
998 ifneq ($(CORE), LOONGSON3B)
999 USE_SIMPLE_THREADED_LEVEL3 = 1
1003 ifeq ($(USE_OPENMP), 1)
1004 # USE_SIMPLE_THREADED_LEVEL3 = 1
1006 CCOMMON_OPT += -DUSE_OPENMP
1009 ifeq ($(BIGNUMA), 1)
1010 CCOMMON_OPT += -DBIGNUMA
1015 ifeq ($(NO_WARMUP), 1)
1016 CCOMMON_OPT += -DNO_WARMUP
1019 ifeq ($(CONSISTENT_FPCSR), 1)
1020 CCOMMON_OPT += -DCONSISTENT_FPCSR
1023 # Only for development
1024 # CCOMMON_OPT += -DPARAMTEST
1025 # CCOMMON_OPT += -DPREFETCHTEST
1026 # CCOMMON_OPT += -DNO_SWITCHING
1030 CCOMMON_OPT += -DUSE_PAPI
1031 EXTRALIB += -lpapi -lperfctr
1034 ifdef DYNAMIC_THREADS
1035 CCOMMON_OPT += -DDYNAMIC_THREADS
1038 CCOMMON_OPT += -DMAX_CPU_NUMBER=$(NUM_THREADS)
1040 CCOMMON_OPT += -DMAX_PARALLEL_NUMBER=$(NUM_PARALLEL)
1042 ifdef USE_SIMPLE_THREADED_LEVEL3
1043 CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3
1047 CCOMMON_OPT += -DUSE_TLS
1050 CCOMMON_OPT += -DVERSION=\"$(VERSION)\"
1060 ifndef LIBNAMESUFFIX
1061 LIBNAMEBASE = $(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)
1063 LIBNAMEBASE = $(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)_$(LIBNAMESUFFIX)
1066 ifeq ($(OSNAME), CYGWIN_NT)
1067 LIBPREFIX = cyg$(LIBNAMEBASE)
1069 LIBPREFIX = lib$(LIBNAMEBASE)
1072 KERNELDIR = $(TOPDIR)/kernel/$(ARCH)
1074 include $(TOPDIR)/Makefile.$(ARCH)
1076 CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
1078 ifeq ($(CORE), PPC440)
1079 CCOMMON_OPT += -DALLOC_QALLOC
1082 ifeq ($(CORE), PPC440FP2)
1083 STATIC_ALLOCATION = 1
1086 ifneq ($(OSNAME), Linux)
1090 ifneq ($(ARCH), x86_64)
1091 ifneq ($(ARCH), x86)
1092 ifneq ($(CORE), LOONGSON3B)
1099 CCOMMON_OPT += -DNO_AFFINITY
1102 ifdef FUNCTION_PROFILE
1103 CCOMMON_OPT += -DFUNCTION_PROFILE
1106 ifdef HUGETLB_ALLOCATION
1107 CCOMMON_OPT += -DALLOC_HUGETLB
1110 ifdef HUGETLBFILE_ALLOCATION
1111 CCOMMON_OPT += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
1114 ifdef STATIC_ALLOCATION
1115 CCOMMON_OPT += -DALLOC_STATIC
1118 ifdef DEVICEDRIVER_ALLOCATION
1119 CCOMMON_OPT += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
1122 ifdef MIXED_MEMORY_ALLOCATION
1123 CCOMMON_OPT += -DMIXED_MEMORY_ALLOCATION
1126 ifeq ($(OSNAME), SunOS)
1143 REVISION = -r$(VERSION)
1144 MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
1159 FCOMMON_OPT = -O2 -frecursive
1162 override CFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
1163 override PFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
1165 override FFLAGS += $(COMMON_OPT) $(FCOMMON_OPT)
1166 override FPFLAGS += $(FCOMMON_OPT) $(COMMON_PROF)
1170 ifeq (,$(findstring PIC,$(FFLAGS)))
1171 override FFLAGS += -fPIC
1175 #For LAPACK Fortran codes.
1176 #Disable -fopenmp for LAPACK Fortran codes on Windows.
1178 LAPACK_FFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FFLAGS))
1179 LAPACK_FPFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FPFLAGS))
1181 LAPACK_FFLAGS := $(FFLAGS)
1182 LAPACK_FPFLAGS := $(FPFLAGS)
1185 LAPACK_CFLAGS = $(CFLAGS)
1186 LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
1188 ifneq ($(INTERFACE64), 0)
1189 LAPACK_CFLAGS += -DLAPACK_ILP64
1194 LAPACK_CFLAGS += -DOPENBLAS_OS_WINDOWS
1196 ifeq ($(C_COMPILER), LSB)
1197 LAPACK_CFLAGS += -DLAPACK_COMPLEX_STRUCTURE
1212 ifneq ($(DYNAMIC_ARCH), 1)
1214 LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
1215 LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
1217 LIBNAME = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
1218 LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
1222 LIBNAME = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
1223 LIBNAME_P = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
1225 LIBNAME = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
1226 LIBNAME_P = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
1231 LIBDLLNAME = $(LIBPREFIX).dll
1232 IMPLIBNAME = lib$(LIBNAMEBASE).dll.a
1233 ifneq ($(OSNAME), AIX)
1234 LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.so)
1236 LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.a)
1238 LIBDYNNAME = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
1239 LIBDEFNAME = $(LIBNAME:.$(LIBSUFFIX)=.def)
1240 LIBEXPNAME = $(LIBNAME:.$(LIBSUFFIX)=.exp)
1241 LIBZIPNAME = $(LIBNAME:.$(LIBSUFFIX)=.zip)
1243 LIBS = $(TOPDIR)/$(LIBNAME)
1244 LIBS_P = $(TOPDIR)/$(LIBNAME_P)
1247 LIB_COMPONENTS = BLAS
1248 ifneq ($(NO_CBLAS), 1)
1249 LIB_COMPONENTS += CBLAS
1252 ifneq ($(NO_LAPACK), 1)
1253 LIB_COMPONENTS += LAPACK
1254 ifneq ($(NO_LAPACKE), 1)
1255 LIB_COMPONENTS += LAPACKE
1257 ifeq ($(BUILD_RELAPACK), 1)
1258 LIB_COMPONENTS += ReLAPACK
1262 ifeq ($(ONLY_CBLAS), 1)
1263 LIB_COMPONENTS = CBLAS
1276 export NEED2UNDERSCORES
1281 export MAKEFILE_RULE
1312 export FUNCTION_PROFILE
1316 export SGEMM_UNROLL_M
1317 export SGEMM_UNROLL_N
1318 export DGEMM_UNROLL_M
1319 export DGEMM_UNROLL_N
1320 export QGEMM_UNROLL_M
1321 export QGEMM_UNROLL_N
1322 export CGEMM_UNROLL_M
1323 export CGEMM_UNROLL_N
1324 export ZGEMM_UNROLL_M
1325 export ZGEMM_UNROLL_N
1326 export XGEMM_UNROLL_M
1327 export XGEMM_UNROLL_N
1328 export CGEMM3M_UNROLL_M
1329 export CGEMM3M_UNROLL_N
1330 export ZGEMM3M_UNROLL_M
1331 export ZGEMM3M_UNROLL_N
1332 export XGEMM3M_UNROLL_M
1333 export XGEMM3M_UNROLL_N
1343 .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
1346 $(FC) $(FFLAGS) -c $< -o $(@F)
1349 $(FC) $(FPFLAGS) -pg -c $< -o $(@F)
1353 PATHSCALEPATH = /opt/pathscale/lib/3.1
1354 PGIPATH = /opt/pgi/linux86-64/7.1-5/lib
1356 PATHSCALEPATH = /opt/pathscale/lib/3.1/32
1357 PGIPATH = /opt/pgi/linux86/7.1-5/lib
1360 ACMLPATH = /opt/acml/4.3.0
1361 ifneq ($(OSNAME), Darwin)
1362 MKLPATH = /opt/intel/mkl/10.2.2.025/lib
1364 MKLPATH = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
1366 ATLASPATH = /opt/atlas/3.9.17/opteron
1367 FLAMEPATH = $(HOME)/flame/lib
1368 ifneq ($(OSNAME), SunOS)
1369 SUNPATH = /opt/sunstudio12.1
1371 SUNPATH = /opt/SUNWspro