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
101 #TARGET_CORE will override TARGET which is used in DYNAMIC_ARCH=1.
104 GETARCH_FLAGS := -DFORCE_$(TARGET_CORE)
107 # Force fallbacks for 32bit
110 ifeq ($(TARGET_CORE), HASWELL)
111 GETARCH_FLAGS := -DFORCE_NEHALEM
113 ifeq ($(TARGET_CORE), SKYLAKEX)
114 GETARCH_FLAGS := -DFORCE_NEHALEM
116 ifeq ($(TARGET_CORE), SANDYBRIDGE)
117 GETARCH_FLAGS := -DFORCE_NEHALEM
119 ifeq ($(TARGET_CORE), BULLDOZER)
120 GETARCH_FLAGS := -DFORCE_BARCELONA
122 ifeq ($(TARGET_CORE), PILEDRIVER)
123 GETARCH_FLAGS := -DFORCE_BARCELONA
125 ifeq ($(TARGET_CORE), STEAMROLLER)
126 GETARCH_FLAGS := -DFORCE_BARCELONA
128 ifeq ($(TARGET_CORE), EXCAVATOR)
129 GETARCH_FLAGS := -DFORCE_BARCELONA
131 ifeq ($(TARGET_CORE), ZEN)
132 GETARCH_FLAGS := -DFORCE_BARCELONA
140 ifneq ($(INTERFACE64), 0)
141 GETARCH_FLAGS += -DUSE64BITINT
145 ifndef GEMM_MULTITHREAD_THRESHOLD
146 GEMM_MULTITHREAD_THRESHOLD=4
148 GETARCH_FLAGS += -DGEMM_MULTITHREAD_THRESHOLD=$(GEMM_MULTITHREAD_THRESHOLD)
151 GETARCH_FLAGS += -DNO_AVX
155 GETARCH_FLAGS += -DNO_AVX
159 GETARCH_FLAGS += -DNO_AVX2
162 ifeq ($(NO_AVX512), 1)
163 GETARCH_FLAGS += -DNO_AVX512
170 ifeq ($(QUIET_MAKE), 1)
174 ifndef NO_PARALLEL_MAKE
177 GETARCH_FLAGS += -DNO_PARALLEL_MAKE=$(NO_PARALLEL_MAKE)
180 GETARCH_FLAGS += -DMAKE_NB_JOBS=$(MAKE_NB_JOBS)
183 ifeq ($(HOSTCC), loongcc)
184 GETARCH_FLAGS += -static
187 #if don't use Fortran, it will only compile CBLAS.
188 ifeq ($(ONLY_CBLAS), 1)
194 # This operation is expensive, so execution should be once.
195 ifndef GOTOBLAS_MAKEFILE
196 export GOTOBLAS_MAKEFILE = 1
198 # Generating Makefile.conf and config.h
199 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)
202 include $(TOPDIR)/Makefile.conf
204 include $(TOPDIR)/Makefile_kernel.conf
214 NUM_THREADS = $(NUM_CORES)
217 ifeq ($(NUM_THREADS), 1)
218 override USE_THREAD = 0
219 override USE_OPENMP = 0
223 ifeq ($(USE_THREAD), 0)
229 ifeq ($(NUM_THREAD), 1)
242 AR = $(CROSS_SUFFIX)ar
243 AS = $(CROSS_SUFFIX)as
244 LD = $(CROSS_SUFFIX)ld
245 RANLIB = $(CROSS_SUFFIX)ranlib
246 NM = $(CROSS_SUFFIX)nm
247 DLLWRAP = $(CROSS_SUFFIX)dllwrap
248 OBJCOPY = $(CROSS_SUFFIX)objcopy
249 OBJCONV = $(CROSS_SUFFIX)objconv
252 # For detect fortran failed, only build BLAS.
253 ifeq ($(NOFORTRAN), 1)
258 # OS dependent settings
261 ifeq ($(OSNAME), Darwin)
262 ifndef MACOSX_DEPLOYMENT_TARGET
263 export MACOSX_DEPLOYMENT_TARGET=10.8
268 ifneq (,$(findstring $(OSNAME), FreeBSD OpenBSD DragonFly))
272 ifeq ($(OSNAME), NetBSD)
276 ifeq ($(OSNAME), Linux)
281 ifeq ($(OSNAME), Android)
285 ifeq ($(OSNAME), AIX)
289 ifeq ($(OSNAME), WINNT)
293 EXTRALIB += -defaultlib:advapi32
299 ifeq ($(C_COMPILER), CLANG)
300 CCOMMON_OPT += -DMS_ABI
303 ifeq ($(C_COMPILER), GCC)
304 #Test for supporting MS_ABI
305 GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
306 GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4)
307 GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 7)
308 ifeq ($(GCCVERSIONGT4), 1)
309 # GCC Majar version > 4
310 # It is compatible with MSVC ABI.
311 CCOMMON_OPT += -DMS_ABI
314 ifeq ($(GCCVERSIONGTEQ4), 1)
315 ifeq ($(GCCMINORVERSIONGTEQ7), 1)
317 # It is compatible with MSVC ABI.
318 CCOMMON_OPT += -DMS_ABI
323 # Ensure the correct stack alignment on Win32
324 # http://permalink.gmane.org/gmane.comp.lib.openblas.general/97
326 CCOMMON_OPT += -mincoming-stack-boundary=2
327 FCOMMON_OPT += -mincoming-stack-boundary=2
332 ifeq ($(OSNAME), Interix)
336 INTERIX_TOOL_DIR = /opt/gcc.3.3/i586-pc-interix3/bin
339 ifeq ($(OSNAME), CYGWIN_NT)
345 ifneq ($(OSNAME), WINNT)
346 ifneq ($(OSNAME), CYGWIN_NT)
347 ifneq ($(OSNAME), Interix)
348 ifneq ($(OSNAME), Android)
350 EXTRALIB += -lpthread
358 ifeq ($(OSNAME), $(filter $(OSNAME),WINNT CYGWIN_NT Interix))
363 CCOMMON_OPT += -DQUAD_PRECISION
368 ifneq ($(ARCH), x86_64)
374 CCOMMON_OPT += -DUTEST_CHECK
379 CCOMMON_OPT += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU)
382 MAX_STACK_ALLOC ?= 2048
383 ifneq ($(MAX_STACK_ALLOC), 0)
384 CCOMMON_OPT += -DMAX_STACK_ALLOC=$(MAX_STACK_ALLOC)
388 # Architecture dependent settings
396 ifeq ($(CORE), generic)
400 ifndef NO_EXPRECISION
401 ifeq ($(F_COMPILER), GFORTRAN)
402 # ifeq logical or. GCC or LSB
403 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
405 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
406 FCOMMON_OPT += -m128bit-long-double
408 ifeq ($(C_COMPILER), CLANG)
410 CCOMMON_OPT += -DEXPRECISION
411 FCOMMON_OPT += -m128bit-long-double
417 ifeq ($(ARCH), x86_64)
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 ($(C_COMPILER), INTEL)
441 CCOMMON_OPT += -wd981
445 ifeq ($(USE_OPENMP), 1)
448 ifeq ($(USE_THREAD), 0)
449 $(error OpenBLAS: Cannot set both USE_OPENMP=1 and USE_THREAD=0. The USE_THREAD=0 is only for building single thread version.)
452 # ifeq logical or. GCC or LSB
453 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
454 CCOMMON_OPT += -fopenmp
457 ifeq ($(C_COMPILER), CLANG)
458 CCOMMON_OPT += -fopenmp
461 ifeq ($(C_COMPILER), INTEL)
462 CCOMMON_OPT += -fopenmp
465 ifeq ($(C_COMPILER), PGI)
469 ifeq ($(C_COMPILER), OPEN64)
471 CEXTRALIB += -lstdc++
474 ifeq ($(C_COMPILER), PATHSCALE)
480 ifeq ($(DYNAMIC_ARCH), 1)
482 DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \
483 CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
486 ifeq ($(ARCH), x86_64)
487 DYNAMIC_CORE = PRESCOTT CORE2
488 ifeq ($(DYNAMIC_OLDER), 1)
489 DYNAMIC_CORE += PENRYN DUNNINGTON
491 DYNAMIC_CORE += NEHALEM
492 ifeq ($(DYNAMIC_OLDER), 1)
493 DYNAMIC_CORE += OPTERON OPTERON_SSE3
495 DYNAMIC_CORE += BARCELONA
496 ifeq ($(DYNAMIC_OLDER), 1)
497 DYNAMIC_CORE += BOBCAT ATOM NANO
500 DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER STEAMROLLER EXCAVATOR
502 ifneq ($(NO_AVX2), 1)
503 DYNAMIC_CORE += HASWELL ZEN
505 ifneq ($(NO_AVX512), 1)
506 ifneq ($(NO_AVX2), 1)
507 DYNAMIC_CORE += SKYLAKEX
513 override DYNAMIC_CORE = PRESCOTT $(DYNAMIC_LIST)
514 XCCOMMON_OPT = -DDYNAMIC_LIST -DDYN_PRESCOTT
515 XCCOMMON_OPT += $(foreach dcore,$(DYNAMIC_LIST),-DDYN_$(dcore))
516 CCOMMON_OPT += $(XCCOMMON_OPT)
517 #CCOMMON_OPT += -DDYNAMIC_LIST='$(DYNAMIC_LIST)'
520 ifeq ($(ARCH), arm64)
522 DYNAMIC_CORE += CORTEXA57
523 DYNAMIC_CORE += THUNDERX
524 DYNAMIC_CORE += THUNDERX2T99
527 # If DYNAMIC_CORE is not set, DYNAMIC_ARCH cannot do anything, so force it to empty
529 override DYNAMIC_ARCH=
537 ifeq ($(F_COMPILER), GFORTRAN)
538 ifeq ($(C_COMPILER), GCC)
540 # CCOMMON_OPT += -DEXPRECISION
545 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
549 ifeq ($(ARCH), alpha)
561 # If softfp abi is mentioned on the command line, force it.
562 ifeq ($(ARM_SOFTFP_ABI), 1)
563 CCOMMON_OPT += -mfloat-abi=softfp
564 FCOMMON_OPT += -mfloat-abi=softfp
567 ifeq ($(OSNAME), Android)
568 ifeq ($(ARM_SOFTFP_ABI), 1)
571 EXTRALIB += -Wl,-lm_hard
576 ifeq ($(ARCH), arm64)
585 # C Compiler dependent settings
589 # ifeq logical or. GCC or CLANG or LSB
590 # http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
591 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG LSB))
593 COMMON_PROF += -fno-inline
594 NO_UNINITIALIZED_WARN = -Wno-uninitialized
596 ifeq ($(QUIET_MAKE), 1)
597 CCOMMON_OPT += $(NO_UNINITIALIZED_WARN) -Wno-unused
602 ifeq ($(ARCH), $(filter $(ARCH),mips64))
604 CCOMMON_OPT += -mabi=64
606 CCOMMON_OPT += -mabi=n32
609 else ifeq ($(ARCH), $(filter $(ARCH),mips))
610 CCOMMON_OPT += -mabi=32
614 ifeq ($(CORE), LOONGSON3A)
615 CCOMMON_OPT += -march=mips64
616 FCOMMON_OPT += -march=mips64
619 ifeq ($(CORE), LOONGSON3B)
620 CCOMMON_OPT += -march=mips64
621 FCOMMON_OPT += -march=mips64
624 ifeq ($(CORE), 1004K)
625 CCOMMON_OPT += -mips32r2 $(MSA_FLAGS)
626 FCOMMON_OPT += -mips32r2 $(MSA_FLAGS)
629 ifeq ($(CORE), P5600)
630 CCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS)
631 FCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS)
634 ifeq ($(CORE), I6400)
635 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
636 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
639 ifeq ($(CORE), P6600)
640 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
641 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
644 ifeq ($(CORE), I6500)
645 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
646 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
649 ifeq ($(OSNAME), AIX)
655 ifndef BINARY_DEFINED
656 ifneq ($(OSNAME), AIX)
667 ifeq ($(C_COMPILER), PGI)
669 CCOMMON_OPT += -tp p7-64
671 CCOMMON_OPT += -tp p7
675 ifeq ($(C_COMPILER), PATHSCALE)
684 # Fortran Compiler dependent settings
687 ifeq ($(F_COMPILER), FLANG)
688 CCOMMON_OPT += -DF_INTERFACE_FLANG
691 ifneq ($(INTERFACE64), 0)
699 ifeq ($(USE_OPENMP), 1)
700 FCOMMON_OPT += -fopenmp
704 ifeq ($(F_COMPILER), G77)
705 CCOMMON_OPT += -DF_INTERFACE_G77
707 ifndef NO_BINARY_MODE
708 ifneq ($(OSNAME), AIX)
718 ifeq ($(F_COMPILER), G95)
719 CCOMMON_OPT += -DF_INTERFACE_G95
721 ifneq ($(OSNAME), AIX)
722 ifndef NO_BINARY_MODE
732 ifeq ($(F_COMPILER), GFORTRAN)
733 CCOMMON_OPT += -DF_INTERFACE_GFORT
735 # make single-threaded LAPACK calls thread-safe #1847
736 FCOMMON_OPT += -frecursive
737 #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
738 ifneq ($(NO_LAPACK), 1)
739 EXTRALIB += -lgfortran
742 ifeq ($(ARCH), $(filter $(ARCH),mips64))
744 FCOMMON_OPT += -mabi=64
746 FCOMMON_OPT += -mabi=n32
748 else ifeq ($(ARCH), $(filter $(ARCH),mips))
749 FCOMMON_OPT += -mabi=32
753 ifneq ($(OSNAME), AIX)
757 ifneq ($(INTERFACE64), 0)
758 FCOMMON_OPT += -fdefault-integer-8
762 ifneq ($(OSNAME), AIX)
767 ifeq ($(USE_OPENMP), 1)
768 FCOMMON_OPT += -fopenmp
772 ifeq ($(F_COMPILER), INTEL)
773 CCOMMON_OPT += -DF_INTERFACE_INTEL
775 ifneq ($(INTERFACE64), 0)
779 ifeq ($(USE_OPENMP), 1)
780 FCOMMON_OPT += -fopenmp
784 ifeq ($(F_COMPILER), FUJITSU)
785 CCOMMON_OPT += -DF_INTERFACE_FUJITSU
786 ifeq ($(USE_OPENMP), 1)
787 FCOMMON_OPT += -openmp
791 ifeq ($(F_COMPILER), IBM)
792 CCOMMON_OPT += -DF_INTERFACE_IBM
793 # FCOMMON_OPT += -qarch=440
797 ifneq ($(INTERFACE64), 0)
798 FCOMMON_OPT += -qintsize=8
804 ifeq ($(USE_OPENMP), 1)
805 FCOMMON_OPT += -openmp
809 ifeq ($(F_COMPILER), PGI)
810 CCOMMON_OPT += -DF_INTERFACE_PGI
811 COMMON_PROF += -DPGICOMPILER
814 ifneq ($(INTERFACE64), 0)
818 FCOMMON_OPT += -tp p7-64
820 FCOMMON_OPT += -tp p7
822 ifeq ($(USE_OPENMP), 1)
827 ifeq ($(F_COMPILER), PATHSCALE)
828 CCOMMON_OPT += -DF_INTERFACE_PATHSCALE
831 ifneq ($(INTERFACE64), 0)
837 ifeq ($(USE_OPENMP), 1)
842 ifeq ($(F_COMPILER), OPEN64)
843 CCOMMON_OPT += -DF_INTERFACE_OPEN64
846 ifneq ($(INTERFACE64), 0)
852 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
858 ifeq ($(CORE), LOONGSON3A)
859 FCOMMON_OPT += -loongson3 -static
862 ifeq ($(CORE), LOONGSON3B)
863 FCOMMON_OPT += -loongson3 -static
874 ifeq ($(USE_OPENMP), 1)
875 FEXTRALIB += -lstdc++
880 ifeq ($(C_COMPILER), OPEN64)
882 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
888 ifeq ($(CORE), LOONGSON3A)
889 CCOMMON_OPT += -loongson3 -static
892 ifeq ($(CORE), LOONGSON3B)
893 CCOMMON_OPT += -loongson3 -static
906 ifeq ($(C_COMPILER), SUN)
915 ifeq ($(F_COMPILER), SUN)
916 CCOMMON_OPT += -DF_INTERFACE_SUN
922 ifeq ($(USE_OPENMP), 1)
923 FCOMMON_OPT += -xopenmp=parallel
927 ifeq ($(F_COMPILER), COMPAQ)
928 CCOMMON_OPT += -DF_INTERFACE_COMPAQ
929 ifeq ($(USE_OPENMP), 1)
930 FCOMMON_OPT += -openmp
936 ifneq ($(INTERFACE64), 0)
943 ifeq ($(NEED_PIC), 1)
944 ifeq ($(C_COMPILER), IBM)
945 CCOMMON_OPT += -qpic=large
949 ifeq ($(F_COMPILER), SUN)
956 ifeq ($(DYNAMIC_ARCH), 1)
957 CCOMMON_OPT += -DDYNAMIC_ARCH
960 ifeq ($(DYNAMIC_OLDER), 1)
961 CCOMMON_OPT += -DDYNAMIC_OLDER
964 ifeq ($(NO_LAPACK), 1)
965 CCOMMON_OPT += -DNO_LAPACK
966 #Disable LAPACK C interface
970 ifeq ($(NO_LAPACKE), 1)
971 CCOMMON_OPT += -DNO_LAPACKE
975 CCOMMON_OPT += -DNO_AVX
979 CCOMMON_OPT += -DNO_AVX
983 CCOMMON_OPT += -DNO_AVX2
986 ifeq ($(NO_AVX512), 1)
987 CCOMMON_OPT += -DNO_AVX512
991 CCOMMON_OPT += -DSMP_SERVER
993 ifeq ($(ARCH), mips64)
994 ifneq ($(CORE), LOONGSON3B)
995 USE_SIMPLE_THREADED_LEVEL3 = 1
999 ifeq ($(USE_OPENMP), 1)
1000 # USE_SIMPLE_THREADED_LEVEL3 = 1
1002 CCOMMON_OPT += -DUSE_OPENMP
1005 ifeq ($(BIGNUMA), 1)
1006 CCOMMON_OPT += -DBIGNUMA
1011 ifeq ($(NO_WARMUP), 1)
1012 CCOMMON_OPT += -DNO_WARMUP
1015 ifeq ($(CONSISTENT_FPCSR), 1)
1016 CCOMMON_OPT += -DCONSISTENT_FPCSR
1019 # Only for development
1020 # CCOMMON_OPT += -DPARAMTEST
1021 # CCOMMON_OPT += -DPREFETCHTEST
1022 # CCOMMON_OPT += -DNO_SWITCHING
1026 CCOMMON_OPT += -DUSE_PAPI
1027 EXTRALIB += -lpapi -lperfctr
1030 ifdef DYNAMIC_THREADS
1031 CCOMMON_OPT += -DDYNAMIC_THREADS
1034 CCOMMON_OPT += -DMAX_CPU_NUMBER=$(NUM_THREADS)
1036 CCOMMON_OPT += -DMAX_PARALLEL_NUMBER=$(NUM_PARALLEL)
1038 ifdef USE_SIMPLE_THREADED_LEVEL3
1039 CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3
1043 CCOMMON_OPT += -DUSE_TLS
1046 CCOMMON_OPT += -DVERSION=\"$(VERSION)\"
1056 ifndef LIBNAMESUFFIX
1057 LIBNAMEBASE = $(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)
1059 LIBNAMEBASE = $(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)_$(LIBNAMESUFFIX)
1062 ifeq ($(OSNAME), CYGWIN_NT)
1063 LIBPREFIX = cyg$(LIBNAMEBASE)
1065 LIBPREFIX = lib$(LIBNAMEBASE)
1068 KERNELDIR = $(TOPDIR)/kernel/$(ARCH)
1070 include $(TOPDIR)/Makefile.$(ARCH)
1072 CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
1074 ifeq ($(CORE), PPC440)
1075 CCOMMON_OPT += -DALLOC_QALLOC
1078 ifeq ($(CORE), PPC440FP2)
1079 STATIC_ALLOCATION = 1
1082 ifneq ($(OSNAME), Linux)
1086 ifneq ($(ARCH), x86_64)
1087 ifneq ($(ARCH), x86)
1088 ifneq ($(CORE), LOONGSON3B)
1095 CCOMMON_OPT += -DNO_AFFINITY
1098 ifdef FUNCTION_PROFILE
1099 CCOMMON_OPT += -DFUNCTION_PROFILE
1102 ifdef HUGETLB_ALLOCATION
1103 CCOMMON_OPT += -DALLOC_HUGETLB
1106 ifdef HUGETLBFILE_ALLOCATION
1107 CCOMMON_OPT += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
1110 ifdef STATIC_ALLOCATION
1111 CCOMMON_OPT += -DALLOC_STATIC
1114 ifdef DEVICEDRIVER_ALLOCATION
1115 CCOMMON_OPT += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
1118 ifdef MIXED_MEMORY_ALLOCATION
1119 CCOMMON_OPT += -DMIXED_MEMORY_ALLOCATION
1122 ifeq ($(OSNAME), SunOS)
1139 REVISION = -r$(VERSION)
1140 MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
1155 FCOMMON_OPT = -O2 -frecursive
1158 override CFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
1159 override PFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
1161 override FFLAGS += $(COMMON_OPT) $(FCOMMON_OPT)
1162 override FPFLAGS += $(FCOMMON_OPT) $(COMMON_PROF)
1166 ifeq (,$(findstring PIC,$(FFLAGS)))
1167 override FFLAGS += -fPIC
1171 #For LAPACK Fortran codes.
1172 #Disable -fopenmp for LAPACK Fortran codes on Windows.
1174 LAPACK_FFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FFLAGS))
1175 LAPACK_FPFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FPFLAGS))
1177 LAPACK_FFLAGS := $(FFLAGS)
1178 LAPACK_FPFLAGS := $(FPFLAGS)
1181 LAPACK_CFLAGS = $(CFLAGS)
1182 LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
1184 ifneq ($(INTERFACE64), 0)
1185 LAPACK_CFLAGS += -DLAPACK_ILP64
1190 LAPACK_CFLAGS += -DOPENBLAS_OS_WINDOWS
1192 ifeq ($(C_COMPILER), LSB)
1193 LAPACK_CFLAGS += -DLAPACK_COMPLEX_STRUCTURE
1208 ifneq ($(DYNAMIC_ARCH), 1)
1210 LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
1211 LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
1213 LIBNAME = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
1214 LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
1218 LIBNAME = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
1219 LIBNAME_P = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
1221 LIBNAME = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
1222 LIBNAME_P = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
1227 LIBDLLNAME = $(LIBPREFIX).dll
1228 IMPLIBNAME = lib$(LIBNAMEBASE).dll.a
1229 ifneq ($(OSNAME), AIX)
1230 LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.so)
1232 LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.a)
1234 LIBDYNNAME = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
1235 LIBDEFNAME = $(LIBNAME:.$(LIBSUFFIX)=.def)
1236 LIBEXPNAME = $(LIBNAME:.$(LIBSUFFIX)=.exp)
1237 LIBZIPNAME = $(LIBNAME:.$(LIBSUFFIX)=.zip)
1239 LIBS = $(TOPDIR)/$(LIBNAME)
1240 LIBS_P = $(TOPDIR)/$(LIBNAME_P)
1243 LIB_COMPONENTS = BLAS
1244 ifneq ($(NO_CBLAS), 1)
1245 LIB_COMPONENTS += CBLAS
1248 ifneq ($(NO_LAPACK), 1)
1249 LIB_COMPONENTS += LAPACK
1250 ifneq ($(NO_LAPACKE), 1)
1251 LIB_COMPONENTS += LAPACKE
1253 ifeq ($(BUILD_RELAPACK), 1)
1254 LIB_COMPONENTS += ReLAPACK
1258 ifeq ($(ONLY_CBLAS), 1)
1259 LIB_COMPONENTS = CBLAS
1272 export NEED2UNDERSCORES
1277 export MAKEFILE_RULE
1308 export FUNCTION_PROFILE
1312 export SGEMM_UNROLL_M
1313 export SGEMM_UNROLL_N
1314 export DGEMM_UNROLL_M
1315 export DGEMM_UNROLL_N
1316 export QGEMM_UNROLL_M
1317 export QGEMM_UNROLL_N
1318 export CGEMM_UNROLL_M
1319 export CGEMM_UNROLL_N
1320 export ZGEMM_UNROLL_M
1321 export ZGEMM_UNROLL_N
1322 export XGEMM_UNROLL_M
1323 export XGEMM_UNROLL_N
1324 export CGEMM3M_UNROLL_M
1325 export CGEMM3M_UNROLL_N
1326 export ZGEMM3M_UNROLL_M
1327 export ZGEMM3M_UNROLL_N
1328 export XGEMM3M_UNROLL_M
1329 export XGEMM3M_UNROLL_N
1339 .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
1342 $(FC) $(FFLAGS) -c $< -o $(@F)
1345 $(FC) $(FPFLAGS) -pg -c $< -o $(@F)
1349 PATHSCALEPATH = /opt/pathscale/lib/3.1
1350 PGIPATH = /opt/pgi/linux86-64/7.1-5/lib
1352 PATHSCALEPATH = /opt/pathscale/lib/3.1/32
1353 PGIPATH = /opt/pgi/linux86/7.1-5/lib
1356 ACMLPATH = /opt/acml/4.3.0
1357 ifneq ($(OSNAME), Darwin)
1358 MKLPATH = /opt/intel/mkl/10.2.2.025/lib
1360 MKLPATH = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
1362 ATLASPATH = /opt/atlas/3.9.17/opteron
1363 FLAMEPATH = $(HOME)/flame/lib
1364 ifneq ($(OSNAME), SunOS)
1365 SUNPATH = /opt/sunstudio12.1
1367 SUNPATH = /opt/SUNWspro