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 ifeq ($(ARCH), power)
532 DYNAMIC_CORE = POWER6
533 DYNAMIC_CORE += POWER8
534 DYNAMIC_CORE += POWER9
537 # If DYNAMIC_CORE is not set, DYNAMIC_ARCH cannot do anything, so force it to empty
539 override DYNAMIC_ARCH=
547 ifeq ($(F_COMPILER), GFORTRAN)
548 ifeq ($(C_COMPILER), GCC)
550 # CCOMMON_OPT += -DEXPRECISION
555 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
559 ifeq ($(ARCH), alpha)
571 # If softfp abi is mentioned on the command line, force it.
572 ifeq ($(ARM_SOFTFP_ABI), 1)
573 CCOMMON_OPT += -mfloat-abi=softfp
574 FCOMMON_OPT += -mfloat-abi=softfp
577 ifeq ($(OSNAME), Android)
578 ifeq ($(ARM_SOFTFP_ABI), 1)
581 EXTRALIB += -Wl,-lm_hard
586 ifeq ($(ARCH), arm64)
595 # C Compiler dependent settings
599 # ifeq logical or. GCC or CLANG or LSB
600 # http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
601 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG LSB))
603 COMMON_PROF += -fno-inline
604 NO_UNINITIALIZED_WARN = -Wno-uninitialized
606 ifeq ($(QUIET_MAKE), 1)
607 CCOMMON_OPT += $(NO_UNINITIALIZED_WARN) -Wno-unused
612 ifeq ($(ARCH), $(filter $(ARCH),mips64))
614 CCOMMON_OPT += -mabi=64
616 CCOMMON_OPT += -mabi=n32
619 else ifeq ($(ARCH), $(filter $(ARCH),mips))
620 CCOMMON_OPT += -mabi=32
624 ifeq ($(CORE), LOONGSON3A)
625 CCOMMON_OPT += -march=mips64
626 FCOMMON_OPT += -march=mips64
629 ifeq ($(CORE), LOONGSON3B)
630 CCOMMON_OPT += -march=mips64
631 FCOMMON_OPT += -march=mips64
634 ifeq ($(CORE), 1004K)
635 CCOMMON_OPT += -mips32r2 $(MSA_FLAGS)
636 FCOMMON_OPT += -mips32r2 $(MSA_FLAGS)
639 ifeq ($(CORE), P5600)
640 CCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS)
641 FCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS)
644 ifeq ($(CORE), I6400)
645 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
646 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
649 ifeq ($(CORE), P6600)
650 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
651 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
654 ifeq ($(CORE), I6500)
655 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
656 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
659 ifeq ($(OSNAME), AIX)
665 ifndef BINARY_DEFINED
666 ifneq ($(OSNAME), AIX)
677 ifeq ($(C_COMPILER), PGI)
679 CCOMMON_OPT += -tp p7-64
681 CCOMMON_OPT += -tp p7
685 ifeq ($(C_COMPILER), PATHSCALE)
694 # Fortran Compiler dependent settings
697 ifeq ($(F_COMPILER), FLANG)
698 CCOMMON_OPT += -DF_INTERFACE_FLANG
701 ifneq ($(INTERFACE64), 0)
709 ifeq ($(USE_OPENMP), 1)
710 FCOMMON_OPT += -fopenmp
714 ifeq ($(F_COMPILER), G77)
715 CCOMMON_OPT += -DF_INTERFACE_G77
717 ifndef NO_BINARY_MODE
718 ifneq ($(OSNAME), AIX)
728 ifeq ($(F_COMPILER), G95)
729 CCOMMON_OPT += -DF_INTERFACE_G95
731 ifneq ($(OSNAME), AIX)
732 ifndef NO_BINARY_MODE
742 ifeq ($(F_COMPILER), GFORTRAN)
743 CCOMMON_OPT += -DF_INTERFACE_GFORT
745 # make single-threaded LAPACK calls thread-safe #1847
746 FCOMMON_OPT += -frecursive
747 #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
748 ifneq ($(NO_LAPACK), 1)
749 EXTRALIB += -lgfortran
752 ifeq ($(ARCH), $(filter $(ARCH),mips64))
754 FCOMMON_OPT += -mabi=64
756 FCOMMON_OPT += -mabi=n32
758 else ifeq ($(ARCH), $(filter $(ARCH),mips))
759 FCOMMON_OPT += -mabi=32
763 ifneq ($(OSNAME), AIX)
767 ifneq ($(INTERFACE64), 0)
768 FCOMMON_OPT += -fdefault-integer-8
772 ifneq ($(OSNAME), AIX)
777 ifeq ($(USE_OPENMP), 1)
778 FCOMMON_OPT += -fopenmp
782 ifeq ($(F_COMPILER), INTEL)
783 CCOMMON_OPT += -DF_INTERFACE_INTEL
785 ifneq ($(INTERFACE64), 0)
789 ifeq ($(USE_OPENMP), 1)
790 FCOMMON_OPT += -fopenmp
794 ifeq ($(F_COMPILER), FUJITSU)
795 CCOMMON_OPT += -DF_INTERFACE_FUJITSU
796 ifeq ($(USE_OPENMP), 1)
797 FCOMMON_OPT += -openmp
801 ifeq ($(F_COMPILER), IBM)
802 CCOMMON_OPT += -DF_INTERFACE_IBM
803 # FCOMMON_OPT += -qarch=440
807 ifneq ($(INTERFACE64), 0)
808 FCOMMON_OPT += -qintsize=8
814 ifeq ($(USE_OPENMP), 1)
815 FCOMMON_OPT += -openmp
819 ifeq ($(F_COMPILER), PGI)
820 CCOMMON_OPT += -DF_INTERFACE_PGI
821 COMMON_PROF += -DPGICOMPILER
824 ifneq ($(INTERFACE64), 0)
828 FCOMMON_OPT += -tp p7-64
830 FCOMMON_OPT += -tp p7
832 ifeq ($(USE_OPENMP), 1)
837 ifeq ($(F_COMPILER), PATHSCALE)
838 CCOMMON_OPT += -DF_INTERFACE_PATHSCALE
841 ifneq ($(INTERFACE64), 0)
847 ifeq ($(USE_OPENMP), 1)
852 ifeq ($(F_COMPILER), OPEN64)
853 CCOMMON_OPT += -DF_INTERFACE_OPEN64
856 ifneq ($(INTERFACE64), 0)
862 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
868 ifeq ($(CORE), LOONGSON3A)
869 FCOMMON_OPT += -loongson3 -static
872 ifeq ($(CORE), LOONGSON3B)
873 FCOMMON_OPT += -loongson3 -static
884 ifeq ($(USE_OPENMP), 1)
885 FEXTRALIB += -lstdc++
890 ifeq ($(C_COMPILER), OPEN64)
892 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
898 ifeq ($(CORE), LOONGSON3A)
899 CCOMMON_OPT += -loongson3 -static
902 ifeq ($(CORE), LOONGSON3B)
903 CCOMMON_OPT += -loongson3 -static
916 ifeq ($(C_COMPILER), SUN)
925 ifeq ($(F_COMPILER), SUN)
926 CCOMMON_OPT += -DF_INTERFACE_SUN
932 ifeq ($(USE_OPENMP), 1)
933 FCOMMON_OPT += -xopenmp=parallel
937 ifeq ($(F_COMPILER), COMPAQ)
938 CCOMMON_OPT += -DF_INTERFACE_COMPAQ
939 ifeq ($(USE_OPENMP), 1)
940 FCOMMON_OPT += -openmp
946 ifneq ($(INTERFACE64), 0)
953 ifeq ($(NEED_PIC), 1)
954 ifeq ($(C_COMPILER), IBM)
955 CCOMMON_OPT += -qpic=large
959 ifeq ($(F_COMPILER), SUN)
966 ifeq ($(DYNAMIC_ARCH), 1)
967 CCOMMON_OPT += -DDYNAMIC_ARCH
970 ifeq ($(DYNAMIC_OLDER), 1)
971 CCOMMON_OPT += -DDYNAMIC_OLDER
974 ifeq ($(NO_LAPACK), 1)
975 CCOMMON_OPT += -DNO_LAPACK
976 #Disable LAPACK C interface
980 ifeq ($(NO_LAPACKE), 1)
981 CCOMMON_OPT += -DNO_LAPACKE
985 CCOMMON_OPT += -DNO_AVX
989 CCOMMON_OPT += -DNO_AVX
993 CCOMMON_OPT += -DNO_AVX2
996 ifeq ($(NO_AVX512), 1)
997 CCOMMON_OPT += -DNO_AVX512
1001 CCOMMON_OPT += -DSMP_SERVER
1003 ifeq ($(ARCH), mips64)
1004 ifneq ($(CORE), LOONGSON3B)
1005 USE_SIMPLE_THREADED_LEVEL3 = 1
1009 ifeq ($(USE_OPENMP), 1)
1010 # USE_SIMPLE_THREADED_LEVEL3 = 1
1012 CCOMMON_OPT += -DUSE_OPENMP
1015 ifeq ($(BIGNUMA), 1)
1016 CCOMMON_OPT += -DBIGNUMA
1021 ifeq ($(NO_WARMUP), 1)
1022 CCOMMON_OPT += -DNO_WARMUP
1025 ifeq ($(CONSISTENT_FPCSR), 1)
1026 CCOMMON_OPT += -DCONSISTENT_FPCSR
1029 # Only for development
1030 # CCOMMON_OPT += -DPARAMTEST
1031 # CCOMMON_OPT += -DPREFETCHTEST
1032 # CCOMMON_OPT += -DNO_SWITCHING
1036 CCOMMON_OPT += -DUSE_PAPI
1037 EXTRALIB += -lpapi -lperfctr
1040 ifdef DYNAMIC_THREADS
1041 CCOMMON_OPT += -DDYNAMIC_THREADS
1044 CCOMMON_OPT += -DMAX_CPU_NUMBER=$(NUM_THREADS)
1046 CCOMMON_OPT += -DMAX_PARALLEL_NUMBER=$(NUM_PARALLEL)
1048 ifdef USE_SIMPLE_THREADED_LEVEL3
1049 CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3
1053 CCOMMON_OPT += -DUSE_TLS
1056 CCOMMON_OPT += -DVERSION=\"$(VERSION)\"
1066 ifndef LIBNAMESUFFIX
1067 LIBNAMEBASE = $(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)
1069 LIBNAMEBASE = $(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)_$(LIBNAMESUFFIX)
1072 ifeq ($(OSNAME), CYGWIN_NT)
1073 LIBPREFIX = cyg$(LIBNAMEBASE)
1075 LIBPREFIX = lib$(LIBNAMEBASE)
1078 KERNELDIR = $(TOPDIR)/kernel/$(ARCH)
1080 include $(TOPDIR)/Makefile.$(ARCH)
1082 CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
1084 ifeq ($(CORE), PPC440)
1085 CCOMMON_OPT += -DALLOC_QALLOC
1088 ifeq ($(CORE), PPC440FP2)
1089 STATIC_ALLOCATION = 1
1092 ifneq ($(OSNAME), Linux)
1096 ifneq ($(ARCH), x86_64)
1097 ifneq ($(ARCH), x86)
1098 ifneq ($(CORE), LOONGSON3B)
1105 CCOMMON_OPT += -DNO_AFFINITY
1108 ifdef FUNCTION_PROFILE
1109 CCOMMON_OPT += -DFUNCTION_PROFILE
1112 ifdef HUGETLB_ALLOCATION
1113 CCOMMON_OPT += -DALLOC_HUGETLB
1116 ifdef HUGETLBFILE_ALLOCATION
1117 CCOMMON_OPT += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
1120 ifdef STATIC_ALLOCATION
1121 CCOMMON_OPT += -DALLOC_STATIC
1124 ifdef DEVICEDRIVER_ALLOCATION
1125 CCOMMON_OPT += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
1128 ifdef MIXED_MEMORY_ALLOCATION
1129 CCOMMON_OPT += -DMIXED_MEMORY_ALLOCATION
1132 ifeq ($(OSNAME), SunOS)
1149 REVISION = -r$(VERSION)
1150 MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
1165 FCOMMON_OPT = -O2 -frecursive
1168 override CFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
1169 override PFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
1171 override FFLAGS += $(COMMON_OPT) $(FCOMMON_OPT)
1172 override FPFLAGS += $(FCOMMON_OPT) $(COMMON_PROF)
1176 ifeq (,$(findstring PIC,$(FFLAGS)))
1177 override FFLAGS += -fPIC
1181 #For LAPACK Fortran codes.
1182 #Disable -fopenmp for LAPACK Fortran codes on Windows.
1184 LAPACK_FFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FFLAGS))
1185 LAPACK_FPFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FPFLAGS))
1187 LAPACK_FFLAGS := $(FFLAGS)
1188 LAPACK_FPFLAGS := $(FPFLAGS)
1191 LAPACK_CFLAGS = $(CFLAGS)
1192 LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
1194 ifneq ($(INTERFACE64), 0)
1195 LAPACK_CFLAGS += -DLAPACK_ILP64
1200 LAPACK_CFLAGS += -DOPENBLAS_OS_WINDOWS
1202 ifeq ($(C_COMPILER), LSB)
1203 LAPACK_CFLAGS += -DLAPACK_COMPLEX_STRUCTURE
1218 ifneq ($(DYNAMIC_ARCH), 1)
1220 LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
1221 LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
1223 LIBNAME = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
1224 LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
1228 LIBNAME = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
1229 LIBNAME_P = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
1231 LIBNAME = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
1232 LIBNAME_P = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
1237 LIBDLLNAME = $(LIBPREFIX).dll
1238 IMPLIBNAME = lib$(LIBNAMEBASE).dll.a
1239 ifneq ($(OSNAME), AIX)
1240 LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.so)
1242 LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.a)
1244 LIBDYNNAME = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
1245 LIBDEFNAME = $(LIBNAME:.$(LIBSUFFIX)=.def)
1246 LIBEXPNAME = $(LIBNAME:.$(LIBSUFFIX)=.exp)
1247 LIBZIPNAME = $(LIBNAME:.$(LIBSUFFIX)=.zip)
1249 LIBS = $(TOPDIR)/$(LIBNAME)
1250 LIBS_P = $(TOPDIR)/$(LIBNAME_P)
1253 LIB_COMPONENTS = BLAS
1254 ifneq ($(NO_CBLAS), 1)
1255 LIB_COMPONENTS += CBLAS
1258 ifneq ($(NO_LAPACK), 1)
1259 LIB_COMPONENTS += LAPACK
1260 ifneq ($(NO_LAPACKE), 1)
1261 LIB_COMPONENTS += LAPACKE
1263 ifeq ($(BUILD_RELAPACK), 1)
1264 LIB_COMPONENTS += ReLAPACK
1268 ifeq ($(ONLY_CBLAS), 1)
1269 LIB_COMPONENTS = CBLAS
1282 export NEED2UNDERSCORES
1287 export MAKEFILE_RULE
1318 export FUNCTION_PROFILE
1322 export SGEMM_UNROLL_M
1323 export SGEMM_UNROLL_N
1324 export DGEMM_UNROLL_M
1325 export DGEMM_UNROLL_N
1326 export QGEMM_UNROLL_M
1327 export QGEMM_UNROLL_N
1328 export CGEMM_UNROLL_M
1329 export CGEMM_UNROLL_N
1330 export ZGEMM_UNROLL_M
1331 export ZGEMM_UNROLL_N
1332 export XGEMM_UNROLL_M
1333 export XGEMM_UNROLL_N
1334 export CGEMM3M_UNROLL_M
1335 export CGEMM3M_UNROLL_N
1336 export ZGEMM3M_UNROLL_M
1337 export ZGEMM3M_UNROLL_N
1338 export XGEMM3M_UNROLL_M
1339 export XGEMM3M_UNROLL_N
1349 .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
1352 $(FC) $(FFLAGS) -c $< -o $(@F)
1355 $(FC) $(FPFLAGS) -pg -c $< -o $(@F)
1359 PATHSCALEPATH = /opt/pathscale/lib/3.1
1360 PGIPATH = /opt/pgi/linux86-64/7.1-5/lib
1362 PATHSCALEPATH = /opt/pathscale/lib/3.1/32
1363 PGIPATH = /opt/pgi/linux86/7.1-5/lib
1366 ACMLPATH = /opt/acml/4.3.0
1367 ifneq ($(OSNAME), Darwin)
1368 MKLPATH = /opt/intel/mkl/10.2.2.025/lib
1370 MKLPATH = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
1372 ATLASPATH = /opt/atlas/3.9.17/opteron
1373 FLAMEPATH = $(HOME)/flame/lib
1374 ifneq ($(OSNAME), SunOS)
1375 SUNPATH = /opt/sunstudio12.1
1377 SUNPATH = /opt/SUNWspro