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)
250 AR = $(CROSS_SUFFIX)ar
251 AS = $(CROSS_SUFFIX)as
252 LD = $(CROSS_SUFFIX)ld
253 RANLIB = $(CROSS_SUFFIX)ranlib
254 NM = $(CROSS_SUFFIX)nm
255 DLLWRAP = $(CROSS_SUFFIX)dllwrap
256 OBJCOPY = $(CROSS_SUFFIX)objcopy
257 OBJCONV = $(CROSS_SUFFIX)objconv
260 # For detect fortran failed, only build BLAS.
261 ifeq ($(NOFORTRAN), 1)
266 # OS dependent settings
269 ifeq ($(OSNAME), Darwin)
270 ifndef MACOSX_DEPLOYMENT_TARGET
271 export MACOSX_DEPLOYMENT_TARGET=10.8
276 ifneq (,$(findstring $(OSNAME), FreeBSD OpenBSD DragonFly))
280 ifeq ($(OSNAME), NetBSD)
284 ifeq ($(OSNAME), Linux)
289 ifeq ($(OSNAME), Android)
293 ifeq ($(OSNAME), AIX)
297 ifeq ($(OSNAME), WINNT)
301 EXTRALIB += -defaultlib:advapi32
307 ifeq ($(C_COMPILER), CLANG)
308 CCOMMON_OPT += -DMS_ABI
311 ifeq ($(C_COMPILER), GCC)
312 #Test for supporting MS_ABI
313 GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
314 GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4)
315 GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 7)
316 ifeq ($(GCCVERSIONGT4), 1)
317 # GCC Majar version > 4
318 # It is compatible with MSVC ABI.
319 CCOMMON_OPT += -DMS_ABI
322 ifeq ($(GCCVERSIONGTEQ4), 1)
323 ifeq ($(GCCMINORVERSIONGTEQ7), 1)
325 # It is compatible with MSVC ABI.
326 CCOMMON_OPT += -DMS_ABI
331 # Ensure the correct stack alignment on Win32
332 # http://permalink.gmane.org/gmane.comp.lib.openblas.general/97
334 CCOMMON_OPT += -mincoming-stack-boundary=2
335 FCOMMON_OPT += -mincoming-stack-boundary=2
340 ifeq ($(OSNAME), Interix)
344 INTERIX_TOOL_DIR = /opt/gcc.3.3/i586-pc-interix3/bin
347 ifeq ($(OSNAME), CYGWIN_NT)
353 ifneq ($(OSNAME), WINNT)
354 ifneq ($(OSNAME), CYGWIN_NT)
355 ifneq ($(OSNAME), Interix)
356 ifneq ($(OSNAME), Android)
358 EXTRALIB += -lpthread
366 ifeq ($(OSNAME), $(filter $(OSNAME),WINNT CYGWIN_NT Interix))
371 CCOMMON_OPT += -DQUAD_PRECISION
376 ifneq ($(ARCH), x86_64)
382 CCOMMON_OPT += -DUTEST_CHECK
387 CCOMMON_OPT += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU)
390 MAX_STACK_ALLOC ?= 2048
391 ifneq ($(MAX_STACK_ALLOC), 0)
392 CCOMMON_OPT += -DMAX_STACK_ALLOC=$(MAX_STACK_ALLOC)
396 ifneq ($(USE_LOCKING), 0)
397 CCOMMON_OPT += -DUSE_LOCKING
402 # Architecture dependent settings
410 ifeq ($(CORE), generic)
414 ifndef NO_EXPRECISION
415 ifeq ($(F_COMPILER), GFORTRAN)
416 # ifeq logical or. GCC or LSB
417 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
419 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
420 FCOMMON_OPT += -m128bit-long-double
422 ifeq ($(C_COMPILER), CLANG)
424 CCOMMON_OPT += -DEXPRECISION
425 FCOMMON_OPT += -m128bit-long-double
431 ifeq ($(ARCH), x86_64)
433 ifeq ($(CORE), generic)
437 ifndef NO_EXPRECISION
438 ifeq ($(F_COMPILER), GFORTRAN)
439 # ifeq logical or. GCC or LSB
440 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
442 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
443 FCOMMON_OPT += -m128bit-long-double
445 ifeq ($(C_COMPILER), CLANG)
447 CCOMMON_OPT += -DEXPRECISION
448 FCOMMON_OPT += -m128bit-long-double
454 ifeq ($(C_COMPILER), INTEL)
455 CCOMMON_OPT += -wd981
459 ifeq ($(USE_OPENMP), 1)
462 ifeq ($(USE_THREAD), 0)
463 $(error OpenBLAS: Cannot set both USE_OPENMP=1 and USE_THREAD=0. The USE_THREAD=0 is only for building single thread version.)
466 # ifeq logical or. GCC or LSB
467 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
468 CCOMMON_OPT += -fopenmp
471 ifeq ($(C_COMPILER), CLANG)
472 CCOMMON_OPT += -fopenmp
475 ifeq ($(C_COMPILER), INTEL)
476 CCOMMON_OPT += -fopenmp
479 ifeq ($(C_COMPILER), PGI)
483 ifeq ($(C_COMPILER), OPEN64)
485 CEXTRALIB += -lstdc++
488 ifeq ($(C_COMPILER), PATHSCALE)
494 ifeq ($(DYNAMIC_ARCH), 1)
496 DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \
497 CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
500 ifeq ($(ARCH), x86_64)
501 DYNAMIC_CORE = PRESCOTT CORE2
502 ifeq ($(DYNAMIC_OLDER), 1)
503 DYNAMIC_CORE += PENRYN DUNNINGTON
505 DYNAMIC_CORE += NEHALEM
506 ifeq ($(DYNAMIC_OLDER), 1)
507 DYNAMIC_CORE += OPTERON OPTERON_SSE3
509 DYNAMIC_CORE += BARCELONA
510 ifeq ($(DYNAMIC_OLDER), 1)
511 DYNAMIC_CORE += BOBCAT ATOM NANO
514 DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER STEAMROLLER EXCAVATOR
516 ifneq ($(NO_AVX2), 1)
517 DYNAMIC_CORE += HASWELL ZEN
519 ifneq ($(NO_AVX512), 1)
520 ifneq ($(NO_AVX2), 1)
521 DYNAMIC_CORE += SKYLAKEX
527 override DYNAMIC_CORE = PRESCOTT $(DYNAMIC_LIST)
528 XCCOMMON_OPT = -DDYNAMIC_LIST -DDYN_PRESCOTT
529 XCCOMMON_OPT += $(foreach dcore,$(DYNAMIC_LIST),-DDYN_$(dcore))
530 CCOMMON_OPT += $(XCCOMMON_OPT)
531 #CCOMMON_OPT += -DDYNAMIC_LIST='$(DYNAMIC_LIST)'
534 ifeq ($(ARCH), arm64)
536 DYNAMIC_CORE += CORTEXA57
537 DYNAMIC_CORE += THUNDERX
538 DYNAMIC_CORE += THUNDERX2T99
541 ifeq ($(ARCH), power)
542 DYNAMIC_CORE = POWER6
543 DYNAMIC_CORE += POWER8
544 DYNAMIC_CORE += POWER9
547 # If DYNAMIC_CORE is not set, DYNAMIC_ARCH cannot do anything, so force it to empty
549 override DYNAMIC_ARCH=
557 ifeq ($(F_COMPILER), GFORTRAN)
558 ifeq ($(C_COMPILER), GCC)
560 # CCOMMON_OPT += -DEXPRECISION
565 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
569 ifeq ($(ARCH), alpha)
581 # If softfp abi is mentioned on the command line, force it.
582 ifeq ($(ARM_SOFTFP_ABI), 1)
583 CCOMMON_OPT += -mfloat-abi=softfp
584 FCOMMON_OPT += -mfloat-abi=softfp
587 ifeq ($(OSNAME), Android)
588 ifeq ($(ARM_SOFTFP_ABI), 1)
591 EXTRALIB += -Wl,-lm_hard
596 ifeq ($(ARCH), arm64)
605 # C Compiler dependent settings
609 # ifeq logical or. GCC or CLANG or LSB
610 # http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
611 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG LSB))
613 COMMON_PROF += -fno-inline
614 NO_UNINITIALIZED_WARN = -Wno-uninitialized
616 ifeq ($(QUIET_MAKE), 1)
617 CCOMMON_OPT += $(NO_UNINITIALIZED_WARN) -Wno-unused
622 ifeq ($(ARCH), $(filter $(ARCH),mips64))
624 CCOMMON_OPT += -mabi=64
626 CCOMMON_OPT += -mabi=n32
629 else ifeq ($(ARCH), $(filter $(ARCH),mips))
630 CCOMMON_OPT += -mabi=32
634 ifeq ($(CORE), LOONGSON3A)
635 CCOMMON_OPT += -march=mips64
636 FCOMMON_OPT += -march=mips64
639 ifeq ($(CORE), LOONGSON3B)
640 CCOMMON_OPT += -march=mips64
641 FCOMMON_OPT += -march=mips64
644 ifeq ($(CORE), 1004K)
645 CCOMMON_OPT += -mips32r2 $(MSA_FLAGS)
646 FCOMMON_OPT += -mips32r2 $(MSA_FLAGS)
649 ifeq ($(CORE), P5600)
650 CCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS)
651 FCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS)
654 ifeq ($(CORE), I6400)
655 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
656 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
659 ifeq ($(CORE), P6600)
660 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
661 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
664 ifeq ($(CORE), I6500)
665 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
666 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
669 ifeq ($(OSNAME), AIX)
675 ifndef BINARY_DEFINED
676 ifneq ($(OSNAME), AIX)
687 ifeq ($(C_COMPILER), PGI)
689 CCOMMON_OPT += -tp p7-64
691 CCOMMON_OPT += -tp p7
695 ifeq ($(C_COMPILER), PATHSCALE)
704 # Fortran Compiler dependent settings
707 ifeq ($(F_COMPILER), FLANG)
708 CCOMMON_OPT += -DF_INTERFACE_FLANG
711 ifneq ($(INTERFACE64), 0)
719 ifeq ($(USE_OPENMP), 1)
720 FCOMMON_OPT += -fopenmp
724 ifeq ($(F_COMPILER), G77)
725 CCOMMON_OPT += -DF_INTERFACE_G77
727 ifndef NO_BINARY_MODE
728 ifneq ($(OSNAME), AIX)
738 ifeq ($(F_COMPILER), G95)
739 CCOMMON_OPT += -DF_INTERFACE_G95
741 ifneq ($(OSNAME), AIX)
742 ifndef NO_BINARY_MODE
752 ifeq ($(F_COMPILER), GFORTRAN)
753 CCOMMON_OPT += -DF_INTERFACE_GFORT
755 # make single-threaded LAPACK calls thread-safe #1847
756 FCOMMON_OPT += -frecursive
757 # work around ABI changes in gfortran 9 that break calls from C code
758 FCOMMON_OPT += -fno-optimize-sibling-calls
759 #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
760 ifneq ($(NO_LAPACK), 1)
761 EXTRALIB += -lgfortran
764 ifeq ($(ARCH), $(filter $(ARCH),mips64))
766 FCOMMON_OPT += -mabi=64
768 FCOMMON_OPT += -mabi=n32
770 else ifeq ($(ARCH), $(filter $(ARCH),mips))
771 FCOMMON_OPT += -mabi=32
775 ifneq ($(OSNAME), AIX)
779 ifneq ($(INTERFACE64), 0)
780 FCOMMON_OPT += -fdefault-integer-8
784 ifneq ($(OSNAME), AIX)
789 ifeq ($(USE_OPENMP), 1)
790 FCOMMON_OPT += -fopenmp
794 ifeq ($(F_COMPILER), INTEL)
795 CCOMMON_OPT += -DF_INTERFACE_INTEL
797 ifneq ($(INTERFACE64), 0)
801 ifeq ($(USE_OPENMP), 1)
802 FCOMMON_OPT += -fopenmp
806 ifeq ($(F_COMPILER), FUJITSU)
807 CCOMMON_OPT += -DF_INTERFACE_FUJITSU
808 ifeq ($(USE_OPENMP), 1)
809 FCOMMON_OPT += -openmp
813 ifeq ($(F_COMPILER), IBM)
814 CCOMMON_OPT += -DF_INTERFACE_IBM
815 # FCOMMON_OPT += -qarch=440
819 ifneq ($(INTERFACE64), 0)
820 FCOMMON_OPT += -qintsize=8
826 ifeq ($(USE_OPENMP), 1)
827 FCOMMON_OPT += -openmp
831 ifeq ($(F_COMPILER), PGI)
832 CCOMMON_OPT += -DF_INTERFACE_PGI
833 COMMON_PROF += -DPGICOMPILER
836 ifneq ($(INTERFACE64), 0)
840 FCOMMON_OPT += -tp p7-64
842 FCOMMON_OPT += -tp p7
844 ifeq ($(USE_OPENMP), 1)
849 ifeq ($(F_COMPILER), PATHSCALE)
850 CCOMMON_OPT += -DF_INTERFACE_PATHSCALE
853 ifneq ($(INTERFACE64), 0)
859 ifeq ($(USE_OPENMP), 1)
864 ifeq ($(F_COMPILER), OPEN64)
865 CCOMMON_OPT += -DF_INTERFACE_OPEN64
868 ifneq ($(INTERFACE64), 0)
874 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
880 ifeq ($(CORE), LOONGSON3A)
881 FCOMMON_OPT += -loongson3 -static
884 ifeq ($(CORE), LOONGSON3B)
885 FCOMMON_OPT += -loongson3 -static
896 ifeq ($(USE_OPENMP), 1)
897 FEXTRALIB += -lstdc++
902 ifeq ($(C_COMPILER), OPEN64)
904 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
910 ifeq ($(CORE), LOONGSON3A)
911 CCOMMON_OPT += -loongson3 -static
914 ifeq ($(CORE), LOONGSON3B)
915 CCOMMON_OPT += -loongson3 -static
928 ifeq ($(C_COMPILER), SUN)
937 ifeq ($(F_COMPILER), SUN)
938 CCOMMON_OPT += -DF_INTERFACE_SUN
944 ifeq ($(USE_OPENMP), 1)
945 FCOMMON_OPT += -xopenmp=parallel
949 ifeq ($(F_COMPILER), COMPAQ)
950 CCOMMON_OPT += -DF_INTERFACE_COMPAQ
951 ifeq ($(USE_OPENMP), 1)
952 FCOMMON_OPT += -openmp
958 ifneq ($(INTERFACE64), 0)
965 ifeq ($(NEED_PIC), 1)
966 ifeq ($(C_COMPILER), IBM)
967 CCOMMON_OPT += -qpic=large
971 ifeq ($(F_COMPILER), SUN)
978 ifeq ($(DYNAMIC_ARCH), 1)
979 CCOMMON_OPT += -DDYNAMIC_ARCH
982 ifeq ($(DYNAMIC_OLDER), 1)
983 CCOMMON_OPT += -DDYNAMIC_OLDER
986 ifeq ($(NO_LAPACK), 1)
987 CCOMMON_OPT += -DNO_LAPACK
988 #Disable LAPACK C interface
992 ifeq ($(NO_LAPACKE), 1)
993 CCOMMON_OPT += -DNO_LAPACKE
997 CCOMMON_OPT += -DNO_AVX
1001 CCOMMON_OPT += -DNO_AVX
1004 ifeq ($(NO_AVX2), 1)
1005 CCOMMON_OPT += -DNO_AVX2
1008 ifeq ($(NO_AVX512), 1)
1009 CCOMMON_OPT += -DNO_AVX512
1013 CCOMMON_OPT += -DSMP_SERVER
1015 ifeq ($(ARCH), mips64)
1016 ifneq ($(CORE), LOONGSON3B)
1017 USE_SIMPLE_THREADED_LEVEL3 = 1
1021 ifeq ($(USE_OPENMP), 1)
1022 # USE_SIMPLE_THREADED_LEVEL3 = 1
1024 CCOMMON_OPT += -DUSE_OPENMP
1027 ifeq ($(BIGNUMA), 1)
1028 CCOMMON_OPT += -DBIGNUMA
1033 ifeq ($(NO_WARMUP), 1)
1034 CCOMMON_OPT += -DNO_WARMUP
1037 ifeq ($(CONSISTENT_FPCSR), 1)
1038 CCOMMON_OPT += -DCONSISTENT_FPCSR
1041 # Only for development
1042 # CCOMMON_OPT += -DPARAMTEST
1043 # CCOMMON_OPT += -DPREFETCHTEST
1044 # CCOMMON_OPT += -DNO_SWITCHING
1048 CCOMMON_OPT += -DUSE_PAPI
1049 EXTRALIB += -lpapi -lperfctr
1052 ifdef DYNAMIC_THREADS
1053 CCOMMON_OPT += -DDYNAMIC_THREADS
1056 CCOMMON_OPT += -DMAX_CPU_NUMBER=$(NUM_THREADS)
1058 CCOMMON_OPT += -DMAX_PARALLEL_NUMBER=$(NUM_PARALLEL)
1060 ifdef USE_SIMPLE_THREADED_LEVEL3
1061 CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3
1065 CCOMMON_OPT += -DUSE_TLS
1068 CCOMMON_OPT += -DVERSION=\"$(VERSION)\"
1078 ifndef LIBNAMESUFFIX
1079 LIBNAMEBASE = $(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)
1081 LIBNAMEBASE = $(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)_$(LIBNAMESUFFIX)
1084 ifeq ($(OSNAME), CYGWIN_NT)
1085 LIBPREFIX = cyg$(LIBNAMEBASE)
1087 LIBPREFIX = lib$(LIBNAMEBASE)
1090 KERNELDIR = $(TOPDIR)/kernel/$(ARCH)
1092 include $(TOPDIR)/Makefile.$(ARCH)
1094 CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
1096 ifeq ($(CORE), PPC440)
1097 CCOMMON_OPT += -DALLOC_QALLOC
1100 ifeq ($(CORE), PPC440FP2)
1101 STATIC_ALLOCATION = 1
1104 ifneq ($(OSNAME), Linux)
1108 ifneq ($(ARCH), x86_64)
1109 ifneq ($(ARCH), x86)
1110 ifneq ($(CORE), LOONGSON3B)
1117 CCOMMON_OPT += -DNO_AFFINITY
1120 ifdef FUNCTION_PROFILE
1121 CCOMMON_OPT += -DFUNCTION_PROFILE
1124 ifdef HUGETLB_ALLOCATION
1125 CCOMMON_OPT += -DALLOC_HUGETLB
1128 ifdef HUGETLBFILE_ALLOCATION
1129 CCOMMON_OPT += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
1132 ifdef STATIC_ALLOCATION
1133 CCOMMON_OPT += -DALLOC_STATIC
1136 ifdef DEVICEDRIVER_ALLOCATION
1137 CCOMMON_OPT += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
1140 ifdef MIXED_MEMORY_ALLOCATION
1141 CCOMMON_OPT += -DMIXED_MEMORY_ALLOCATION
1144 ifeq ($(OSNAME), SunOS)
1161 REVISION = -r$(VERSION)
1162 MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
1177 FCOMMON_OPT = -O2 -frecursive
1180 override CFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
1181 override PFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
1183 override FFLAGS += $(COMMON_OPT) $(FCOMMON_OPT)
1184 override FPFLAGS += $(FCOMMON_OPT) $(COMMON_PROF)
1188 ifeq (,$(findstring PIC,$(FFLAGS)))
1189 override FFLAGS += -fPIC
1193 #For LAPACK Fortran codes.
1194 #Disable -fopenmp for LAPACK Fortran codes on Windows.
1196 LAPACK_FFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FFLAGS))
1197 LAPACK_FPFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FPFLAGS))
1199 LAPACK_FFLAGS := $(FFLAGS)
1200 LAPACK_FPFLAGS := $(FPFLAGS)
1203 LAPACK_CFLAGS = $(CFLAGS)
1204 LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
1206 ifneq ($(INTERFACE64), 0)
1207 LAPACK_CFLAGS += -DLAPACK_ILP64
1212 LAPACK_CFLAGS += -DOPENBLAS_OS_WINDOWS
1214 ifeq ($(C_COMPILER), LSB)
1215 LAPACK_CFLAGS += -DLAPACK_COMPLEX_STRUCTURE
1230 ifneq ($(DYNAMIC_ARCH), 1)
1232 LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
1233 LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
1235 LIBNAME = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
1236 LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
1240 LIBNAME = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
1241 LIBNAME_P = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
1243 LIBNAME = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
1244 LIBNAME_P = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
1249 LIBDLLNAME = $(LIBPREFIX).dll
1250 IMPLIBNAME = lib$(LIBNAMEBASE).dll.a
1251 ifneq ($(OSNAME), AIX)
1252 LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.so)
1254 LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.a)
1256 LIBDYNNAME = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
1257 LIBDEFNAME = $(LIBNAME:.$(LIBSUFFIX)=.def)
1258 LIBEXPNAME = $(LIBNAME:.$(LIBSUFFIX)=.exp)
1259 LIBZIPNAME = $(LIBNAME:.$(LIBSUFFIX)=.zip)
1261 LIBS = $(TOPDIR)/$(LIBNAME)
1262 LIBS_P = $(TOPDIR)/$(LIBNAME_P)
1265 LIB_COMPONENTS = BLAS
1266 ifneq ($(NO_CBLAS), 1)
1267 LIB_COMPONENTS += CBLAS
1270 ifneq ($(NO_LAPACK), 1)
1271 LIB_COMPONENTS += LAPACK
1272 ifneq ($(NO_LAPACKE), 1)
1273 LIB_COMPONENTS += LAPACKE
1275 ifeq ($(BUILD_RELAPACK), 1)
1276 LIB_COMPONENTS += ReLAPACK
1280 ifeq ($(ONLY_CBLAS), 1)
1281 LIB_COMPONENTS = CBLAS
1294 export NEED2UNDERSCORES
1299 export MAKEFILE_RULE
1330 export FUNCTION_PROFILE
1334 export SGEMM_UNROLL_M
1335 export SGEMM_UNROLL_N
1336 export DGEMM_UNROLL_M
1337 export DGEMM_UNROLL_N
1338 export QGEMM_UNROLL_M
1339 export QGEMM_UNROLL_N
1340 export CGEMM_UNROLL_M
1341 export CGEMM_UNROLL_N
1342 export ZGEMM_UNROLL_M
1343 export ZGEMM_UNROLL_N
1344 export XGEMM_UNROLL_M
1345 export XGEMM_UNROLL_N
1346 export CGEMM3M_UNROLL_M
1347 export CGEMM3M_UNROLL_N
1348 export ZGEMM3M_UNROLL_M
1349 export ZGEMM3M_UNROLL_N
1350 export XGEMM3M_UNROLL_M
1351 export XGEMM3M_UNROLL_N
1361 .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
1364 $(FC) $(FFLAGS) -c $< -o $(@F)
1367 $(FC) $(FPFLAGS) -pg -c $< -o $(@F)
1371 PATHSCALEPATH = /opt/pathscale/lib/3.1
1372 PGIPATH = /opt/pgi/linux86-64/7.1-5/lib
1374 PATHSCALEPATH = /opt/pathscale/lib/3.1/32
1375 PGIPATH = /opt/pgi/linux86/7.1-5/lib
1378 ACMLPATH = /opt/acml/4.3.0
1379 ifneq ($(OSNAME), Darwin)
1380 MKLPATH = /opt/intel/mkl/10.2.2.025/lib
1382 MKLPATH = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
1384 ATLASPATH = /opt/atlas/3.9.17/opteron
1385 FLAMEPATH = $(HOME)/flame/lib
1386 ifneq ($(OSNAME), SunOS)
1387 SUNPATH = /opt/sunstudio12.1
1389 SUNPATH = /opt/SUNWspro