2 # Include user definition
5 # TO suppress recursive includes
12 # If ARCH is not set, we use the host system's architecture for getarch compile options.
14 HOSTARCH := $(shell uname -m)
19 # Catch conflicting usage of ARCH in some BSD environments
22 else ifeq ($(ARCH), powerpc64)
24 else ifeq ($(ARCH), powerpc)
26 else ifeq ($(ARCH), i386)
28 else ifeq ($(ARCH), armv6)
30 else ifeq ($(ARCH), armv7)
32 else ifeq ($(ARCH), aarch64)
34 else ifeq ($(ARCH), zarch)
38 NETLIB_LAPACK_DIR = $(TOPDIR)/lapack-netlib
41 # - Only set if not specified on the command line or inherited from the environment.
42 # - CC is an implicit variable so neither '?=' or 'ifndef' can be used.
43 # http://stackoverflow.com/questions/4029274/mingw-and-make-variables
44 # - Default value is 'cc' which is not always a valid command (e.g. MinGW).
45 ifeq ($(origin CC),default)
47 # Check if $(CC) refers to a valid command and set the value to gcc if not
48 ifneq ($(findstring cmd.exe,$(SHELL)),)
49 ifeq ($(shell where $(CC) 2>NUL),)
53 ifeq ($(shell command -v $(CC) 2>/dev/null),)
54 ifeq ($(shell uname -s),Darwin)
56 # EXTRALIB += -Wl,-no_compact_unwind
63 endif # CC is set to default
65 # Default Fortran compiler (FC) is selected by f_check.
68 include $(TOPDIR)/Makefile.rule
70 include $(TOPDIR)/$(MAKEFILE_RULE)
74 # Beginning of system configuration
76 ifneq ($(BUILD_SINGLE),1)
77 ifneq ($(BUILD_DOUBLE),1)
78 ifneq ($(BUILD_COMPLEX),1)
79 ifneq ($(BUILD_COMPLEX16),1)
80 override BUILD_SINGLE=1
81 override BUILD_DOUBLE=1
82 override BUILD_COMPLEX=1
83 override BUILD_COMPLEX16=1
94 GETARCH_FLAGS := -DFORCE_$(TARGET)
95 GETARCH_FLAGS += -DUSER_TARGET
96 ifeq ($(TARGET), GENERIC)
97 ifeq ($(DYNAMIC_ARCH), 1)
98 override NO_EXPRECISION=1
104 # Force fallbacks for 32bit
107 ifeq ($(TARGET), HASWELL)
108 GETARCH_FLAGS := -DFORCE_NEHALEM
110 ifeq ($(TARGET), SKYLAKEX)
111 GETARCH_FLAGS := -DFORCE_NEHALEM
113 ifeq ($(TARGET), COOPERLAKE)
114 GETARCH_FLAGS := -DFORCE_NEHALEM
116 ifeq ($(TARGET), SANDYBRIDGE)
117 GETARCH_FLAGS := -DFORCE_NEHALEM
119 ifeq ($(TARGET), BULLDOZER)
120 GETARCH_FLAGS := -DFORCE_BARCELONA
122 ifeq ($(TARGET), PILEDRIVER)
123 GETARCH_FLAGS := -DFORCE_BARCELONA
125 ifeq ($(TARGET), STEAMROLLER)
126 GETARCH_FLAGS := -DFORCE_BARCELONA
128 ifeq ($(TARGET), EXCAVATOR)
129 GETARCH_FLAGS := -DFORCE_BARCELONA
131 ifeq ($(TARGET), ZEN)
132 GETARCH_FLAGS := -DFORCE_BARCELONA
134 ifeq ($(TARGET), ARMV8)
135 GETARCH_FLAGS := -DFORCE_ARMV7
137 ifeq ($(TARGET), POWER8)
138 GETARCH_FLAGS := -DFORCE_POWER6
143 #TARGET_CORE will override TARGET which is used in DYNAMIC_ARCH=1.
146 GETARCH_FLAGS := -DFORCE_$(TARGET_CORE)
149 # Force fallbacks for 32bit
152 ifeq ($(TARGET_CORE), HASWELL)
153 GETARCH_FLAGS := -DFORCE_NEHALEM
155 ifeq ($(TARGET_CORE), SKYLAKEX)
156 GETARCH_FLAGS := -DFORCE_NEHALEM
158 ifeq ($(TARGET_CORE), COOPERLAKE)
159 GETARCH_FLAGS := -DFORCE_NEHALEM
161 ifeq ($(TARGET_CORE), SANDYBRIDGE)
162 GETARCH_FLAGS := -DFORCE_NEHALEM
164 ifeq ($(TARGET_CORE), BULLDOZER)
165 GETARCH_FLAGS := -DFORCE_BARCELONA
167 ifeq ($(TARGET_CORE), PILEDRIVER)
168 GETARCH_FLAGS := -DFORCE_BARCELONA
170 ifeq ($(TARGET_CORE), STEAMROLLER)
171 GETARCH_FLAGS := -DFORCE_BARCELONA
173 ifeq ($(TARGET_CORE), EXCAVATOR)
174 GETARCH_FLAGS := -DFORCE_BARCELONA
176 ifeq ($(TARGET_CORE), ZEN)
177 GETARCH_FLAGS := -DFORCE_BARCELONA
182 # On x86_64 build getarch with march=native unless the compiler is PGI. This is required to detect AVX512 support in getarch.
183 ifeq ($(HOSTARCH), x86_64)
184 ifeq ($(findstring pgcc,$(HOSTCC)),)
185 GETARCH_FLAGS += -march=native
190 ifneq ($(INTERFACE64), 0)
191 GETARCH_FLAGS += -DUSE64BITINT
195 ifndef GEMM_MULTITHREAD_THRESHOLD
196 GEMM_MULTITHREAD_THRESHOLD=4
198 GETARCH_FLAGS += -DGEMM_MULTITHREAD_THRESHOLD=$(GEMM_MULTITHREAD_THRESHOLD)
201 GETARCH_FLAGS += -DNO_AVX
205 GETARCH_FLAGS += -DNO_AVX -DNO_AVX2 -DNO_AVX512
210 GETARCH_FLAGS += -DNO_AVX2
213 ifeq ($(NO_AVX512), 1)
214 GETARCH_FLAGS += -DNO_AVX512
221 ifeq ($(QUIET_MAKE), 1)
225 ifndef NO_PARALLEL_MAKE
228 GETARCH_FLAGS += -DNO_PARALLEL_MAKE=$(NO_PARALLEL_MAKE)
231 GETARCH_FLAGS += -DMAKE_NB_JOBS=$(MAKE_NB_JOBS)
234 ifeq ($(HOSTCC), loongcc)
235 GETARCH_FLAGS += -static
238 #if don't use Fortran, it will only compile CBLAS.
239 ifeq ($(ONLY_CBLAS), 1)
245 # This operation is expensive, so execution should be once.
246 ifndef GOTOBLAS_MAKEFILE
247 export GOTOBLAS_MAKEFILE = 1
249 # Generating Makefile.conf and config.h
250 DUMMY := $(shell $(MAKE) -C $(TOPDIR) -f Makefile.prebuild CC="$(CC)" FC="$(FC)" HOSTCC="$(HOSTCC)" HOST_CFLAGS="$(GETARCH_FLAGS)" CFLAGS="$(CFLAGS)" BINARY=$(BINARY) USE_OPENMP=$(USE_OPENMP) TARGET_CORE=$(TARGET_CORE) ONLY_CBLAS=$(ONLY_CBLAS) TARGET=$(TARGET) all)
253 include $(TOPDIR)/Makefile.conf
271 include $(TOPDIR)/Makefile_kernel.conf
281 NUM_THREADS = $(NUM_CORES)
284 ifeq ($(NUM_THREADS), 1)
285 override USE_THREAD = 0
286 override USE_OPENMP = 0
290 ifeq ($(USE_THREAD), 0)
296 ifeq ($(NUM_THREAD), 1)
313 AR ?= $(CROSS_SUFFIX)ar
314 AS ?= $(CROSS_SUFFIX)as
315 LD ?= $(CROSS_SUFFIX)ld
316 RANLIB ?= $(CROSS_SUFFIX)ranlib
317 NM = $(CROSS_SUFFIX)nm
318 DLLWRAP = $(CROSS_SUFFIX)dllwrap
319 OBJCOPY = $(CROSS_SUFFIX)objcopy
320 OBJCONV = $(CROSS_SUFFIX)objconv
323 # When fortran support was either not detected or actively deselected, only build BLAS.
324 ifeq ($(NOFORTRAN), 1)
329 ifeq ($(C_COMPILER), GCC)
330 GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
331 GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4)
332 GCCVERSIONGT5 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 5)
333 GCCVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 7)
334 GCCVERSIONGTEQ9 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 9)
335 GCCVERSIONGTEQ11 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 11)
336 GCCVERSIONGTEQ10 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 10)
337 # Note that the behavior of -dumpversion is compile-time-configurable for
338 # gcc-7.x and newer. Use -dumpfullversion there
339 ifeq ($(GCCVERSIONGTEQ7),1)
340 GCCDUMPVERSION_PARAM := -dumpfullversion
342 GCCDUMPVERSION_PARAM := -dumpversion
344 GCCMINORVERSIONGTEQ1 := $(shell expr `$(CC) $(GCCDUMPVERSION_PARAM) | cut -f2 -d.` \>= 1)
345 GCCMINORVERSIONGTEQ2 := $(shell expr `$(CC) $(GCCDUMPVERSION_PARAM) | cut -f2 -d.` \>= 2)
346 GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) $(GCCDUMPVERSION_PARAM) | cut -f2 -d.` \>= 7)
350 # OS dependent settings
353 ifeq ($(OSNAME), Darwin)
354 ifndef MACOSX_DEPLOYMENT_TARGET
355 export MACOSX_DEPLOYMENT_TARGET=10.8
360 ifneq (,$(findstring $(OSNAME), FreeBSD OpenBSD DragonFly))
364 ifeq ($(OSNAME), NetBSD)
368 ifeq ($(OSNAME), Linux)
373 ifeq ($(OSNAME), Android)
377 ifeq ($(OSNAME), AIX)
381 ifeq ($(OSNAME), WINNT)
385 EXTRALIB += -defaultlib:advapi32
391 ifeq ($(C_COMPILER), CLANG)
392 CCOMMON_OPT += -DMS_ABI
395 #Version tests for supporting specific features (MS_ABI, POWER9 intrinsics)
396 ifeq ($(GCCVERSIONGT4), 1)
397 # GCC Major version > 4
398 # It is compatible with MSVC ABI.
399 CCOMMON_OPT += -DMS_ABI
402 ifeq ($(GCCVERSIONGTEQ4), 1)
403 ifeq ($(GCCMINORVERSIONGTEQ7), 1)
405 # It is compatible with MSVC ABI.
406 CCOMMON_OPT += -DMS_ABI
410 # Ensure the correct stack alignment on Win32
411 # http://permalink.gmane.org/gmane.comp.lib.openblas.general/97
413 CCOMMON_OPT += -mincoming-stack-boundary=2
414 FCOMMON_OPT += -mincoming-stack-boundary=2
419 ifeq ($(OSNAME), Interix)
423 INTERIX_TOOL_DIR = /opt/gcc.3.3/i586-pc-interix3/bin
426 ifeq ($(OSNAME), CYGWIN_NT)
432 ifneq ($(OSNAME), WINNT)
433 ifneq ($(OSNAME), CYGWIN_NT)
434 ifneq ($(OSNAME), Interix)
435 ifneq ($(OSNAME), Android)
437 EXTRALIB += -lpthread
445 ifeq ($(OSNAME), $(filter $(OSNAME),WINNT CYGWIN_NT Interix))
450 CCOMMON_OPT += -DQUAD_PRECISION
455 ifneq ($(ARCH), x86_64)
461 CCOMMON_OPT += -DUTEST_CHECK
466 CCOMMON_OPT += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU)
469 MAX_STACK_ALLOC ?= 2048
470 ifneq ($(MAX_STACK_ALLOC), 0)
471 CCOMMON_OPT += -DMAX_STACK_ALLOC=$(MAX_STACK_ALLOC)
475 ifneq ($(USE_LOCKING), 0)
476 CCOMMON_OPT += -DUSE_LOCKING
481 # Architecture dependent settings
489 ifeq ($(CORE), generic)
493 ifndef NO_EXPRECISION
494 ifeq ($(F_COMPILER), GFORTRAN)
495 # ifeq logical or. GCC or LSB
496 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
498 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
499 FCOMMON_OPT += -m128bit-long-double
501 ifeq ($(C_COMPILER), CLANG)
503 CCOMMON_OPT += -DEXPRECISION
504 FCOMMON_OPT += -m128bit-long-double
510 ifeq ($(ARCH), x86_64)
512 ifeq ($(CORE), generic)
516 ifndef NO_EXPRECISION
517 ifeq ($(F_COMPILER), GFORTRAN)
518 # ifeq logical or. GCC or LSB
519 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
521 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
522 FCOMMON_OPT += -m128bit-long-double
524 ifeq ($(C_COMPILER), CLANG)
526 CCOMMON_OPT += -DEXPRECISION
527 FCOMMON_OPT += -m128bit-long-double
533 ifeq ($(C_COMPILER), INTEL)
534 CCOMMON_OPT += -wd981
538 ifeq ($(USE_OPENMP), 1)
541 ifeq ($(USE_THREAD), 0)
542 $(error OpenBLAS: Cannot set both USE_OPENMP=1 and USE_THREAD=0. The USE_THREAD=0 is only for building single thread version.)
545 # ifeq logical or. GCC or LSB
546 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
547 CCOMMON_OPT += -fopenmp
550 ifeq ($(C_COMPILER), CLANG)
551 CCOMMON_OPT += -fopenmp
554 ifeq ($(C_COMPILER), INTEL)
555 CCOMMON_OPT += -fopenmp
558 ifeq ($(C_COMPILER), PGI)
562 ifeq ($(C_COMPILER), OPEN64)
564 CEXTRALIB += -lstdc++
567 ifeq ($(C_COMPILER), PATHSCALE)
573 ifeq ($(DYNAMIC_ARCH), 1)
575 DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \
576 CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
579 ifeq ($(ARCH), x86_64)
580 DYNAMIC_CORE = PRESCOTT CORE2
581 ifeq ($(DYNAMIC_OLDER), 1)
582 DYNAMIC_CORE += PENRYN DUNNINGTON
584 DYNAMIC_CORE += NEHALEM
585 ifeq ($(DYNAMIC_OLDER), 1)
586 DYNAMIC_CORE += OPTERON OPTERON_SSE3
588 DYNAMIC_CORE += BARCELONA
589 ifeq ($(DYNAMIC_OLDER), 1)
590 DYNAMIC_CORE += BOBCAT ATOM NANO
593 DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER STEAMROLLER EXCAVATOR
595 ifneq ($(NO_AVX2), 1)
596 DYNAMIC_CORE += HASWELL ZEN
598 ifneq ($(NO_AVX512), 1)
599 ifneq ($(NO_AVX2), 1)
600 DYNAMIC_CORE += SKYLAKEX COOPERLAKE
606 override DYNAMIC_CORE = PRESCOTT $(DYNAMIC_LIST)
607 XCCOMMON_OPT = -DDYNAMIC_LIST -DDYN_PRESCOTT
608 XCCOMMON_OPT += $(foreach dcore,$(DYNAMIC_LIST),-DDYN_$(dcore))
609 CCOMMON_OPT += $(XCCOMMON_OPT)
610 #CCOMMON_OPT += -DDYNAMIC_LIST='$(DYNAMIC_LIST)'
613 ifeq ($(ARCH), arm64)
615 DYNAMIC_CORE += CORTEXA53
616 DYNAMIC_CORE += CORTEXA57
617 DYNAMIC_CORE += CORTEXA72
618 DYNAMIC_CORE += CORTEXA73
619 DYNAMIC_CORE += NEOVERSEN1
620 DYNAMIC_CORE += FALKOR
621 DYNAMIC_CORE += THUNDERX
622 DYNAMIC_CORE += THUNDERX2T99
623 DYNAMIC_CORE += TSV110
624 DYNAMIC_CORE += EMAG8180
625 DYNAMIC_CORE += THUNDERX3T110
628 ifeq ($(ARCH), zarch)
629 DYNAMIC_CORE = ZARCH_GENERIC
631 # if the compiler accepts -march=arch11 or -march=z13 and can compile a file
632 # with z13-specific inline assembly, then we can include support for Z13.
633 # note: -march=z13 is equivalent to -march=arch11 yet some compiler releases
634 # only support one or the other.
635 # note: LLVM version 6.x supported -march=z13 yet could not handle vector
636 # registers in inline assembly, so the check for supporting the -march flag is
638 ZARCH_TEST_COMPILE=-c $(TOPDIR)/kernel/zarch/damin_z13.c -I$(TOPDIR) -o /dev/null > /dev/null 2> /dev/null
639 ZARCH_CC_SUPPORTS_ARCH11=$(shell $(CC) -march=arch11 $(ZARCH_TEST_COMPILE) && echo 1)
640 ZARCH_CC_SUPPORTS_Z13=$(shell $(CC) -march=z13 $(ZARCH_TEST_COMPILE) && echo 1)
642 ifeq ($(or $(ZARCH_CC_SUPPORTS_ARCH11), $(ZARCH_CC_SUPPORTS_Z13)), 1)
644 CCOMMON_OPT += -DDYN_Z13
646 $(info OpenBLAS: Not building Z13 kernels because the compiler $(CC) does not support it)
649 # as above for z13, check for -march=arch12 and z14 support in the compiler.
650 ZARCH_CC_SUPPORTS_ARCH12=$(shell $(CC) -march=arch12 $(ZARCH_TEST_COMPILE) && echo 1)
651 ZARCH_CC_SUPPORTS_Z14=$(shell $(CC) -march=z14 $(ZARCH_TEST_COMPILE) && echo 1)
652 ifeq ($(or $(ZARCH_CC_SUPPORTS_ARCH12), $(ZARCH_CC_SUPPORTS_Z14)), 1)
654 CCOMMON_OPT += -DDYN_Z14
656 $(info OpenBLAS: Not building Z14 kernels because the compiler $(CC) does not support it)
661 ifeq ($(ARCH), power)
662 DYNAMIC_CORE = POWER6
663 DYNAMIC_CORE += POWER8
664 ifneq ($(C_COMPILER), GCC)
665 DYNAMIC_CORE += POWER9
666 DYNAMIC_CORE += POWER10
667 CCOMMON_OPT += -DHAVE_P10_SUPPORT
669 ifeq ($(C_COMPILER), GCC)
670 ifeq ($(GCCVERSIONGT5), 1)
671 DYNAMIC_CORE += POWER9
673 $(info, OpenBLAS: Your gcc version is too old to build the POWER9 kernels.)
675 LDVERSIONGTEQ35 := $(shell expr `ld --version | head -1 | cut -f2 -d "." | cut -f1 -d "-"` >= 35)
676 ifeq ($(GCCVERSIONGTEQ11)$(LDVERSIONGTEQ35), 11)
677 DYNAMIC_CORE += POWER10
678 CCOMMON_OPT += -DHAVE_P10_SUPPORT
679 else ifeq ($(GCCVERSIONGTEQ10), 1)
680 ifeq ($(GCCMINORVERSIONGTEQ2)$(LDVERSIONGTEQ35), 11)
681 DYNAMIC_CORE += POWER10
682 CCOMMON_OPT += -DHAVE_P10_SUPPORT
685 $(info, OpenBLAS: Your gcc version is too old to build the POWER10 kernels.)
690 # If DYNAMIC_CORE is not set, DYNAMIC_ARCH cannot do anything, so force it to empty
692 override DYNAMIC_ARCH=
700 ifeq ($(F_COMPILER), GFORTRAN)
701 ifeq ($(C_COMPILER), GCC)
703 # CCOMMON_OPT += -DEXPRECISION
708 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
712 ifeq ($(ARCH), alpha)
724 # If softfp abi is mentioned on the command line, force it.
725 ifeq ($(ARM_SOFTFP_ABI), 1)
726 CCOMMON_OPT += -mfloat-abi=softfp
727 FCOMMON_OPT += -mfloat-abi=softfp
730 ifeq ($(OSNAME), Android)
731 ifeq ($(ARM_SOFTFP_ABI), 1)
734 EXTRALIB += -Wl,-lm_hard
739 ifeq ($(ARCH), arm64)
743 ifneq ($(INTERFACE64), 0)
744 ifeq ($(F_COMPILER), GFORTRAN)
745 FCOMMON_OPT += -fdefault-integer-8
747 ifeq ($(F_COMPILER), FLANG)
754 ifeq ($(ARCH), riscv64)
761 # C Compiler dependent settings
765 # ifeq logical or. GCC or CLANG or LSB
766 # http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
767 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG LSB))
769 COMMON_PROF += -fno-inline
770 NO_UNINITIALIZED_WARN = -Wno-uninitialized
772 ifeq ($(QUIET_MAKE), 1)
773 CCOMMON_OPT += $(NO_UNINITIALIZED_WARN) -Wno-unused
778 ifeq ($(ARCH), $(filter $(ARCH),mips64))
780 CCOMMON_OPT += -mabi=64
782 CCOMMON_OPT += -mabi=n32
785 else ifeq ($(ARCH), $(filter $(ARCH),mips))
786 CCOMMON_OPT += -mabi=32
790 ifeq ($(CORE), LOONGSON3A)
791 CCOMMON_OPT += -march=mips64
792 FCOMMON_OPT += -march=mips64
795 ifeq ($(CORE), LOONGSON3B)
796 CCOMMON_OPT += -march=mips64
797 FCOMMON_OPT += -march=mips64
800 ifeq ($(CORE), MIPS24K)
801 CCOMMON_OPT += -mips32r2 -mtune=24kc $(MSA_FLAGS)
802 FCOMMON_OPT += -mips32r2 -mtune=24kc $(MSA_FLAGS)
805 ifeq ($(CORE), MIPS1004K)
806 CCOMMON_OPT += -mips32r2 $(MSA_FLAGS)
807 FCOMMON_OPT += -mips32r2 $(MSA_FLAGS)
810 ifeq ($(CORE), P5600)
811 CCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS)
812 FCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS)
815 ifeq ($(CORE), I6400)
816 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
817 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
820 ifeq ($(CORE), P6600)
821 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
822 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
825 ifeq ($(CORE), I6500)
826 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
827 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
830 ifeq ($(OSNAME), AIX)
836 ifndef BINARY_DEFINED
837 ifneq ($(OSNAME), AIX)
839 ifneq ($(ARCH), riscv64)
850 ifeq ($(C_COMPILER), PGI)
852 ifeq ($(ARCH), x86_64)
853 CCOMMON_OPT += -tp p7-64 -D__MMX__ -Mnollvm
855 ifeq ($(ARCH), power)
856 ifeq ($(CORE), POWER8)
857 CCOMMON_OPT += -tp pwr8
859 ifeq ($(CORE), POWER9)
860 CCOMMON_OPT += -tp pwr9
865 CCOMMON_OPT += -tp p7
869 ifeq ($(C_COMPILER), PATHSCALE)
878 # Fortran Compiler dependent settings
881 ifeq ($(F_COMPILER), FLANG)
882 CCOMMON_OPT += -DF_INTERFACE_FLANG
883 FCOMMON_OPT += -Mrecursive -Kieee
884 ifeq ($(OSNAME), Linux)
885 ifeq ($(ARCH), x86_64)
886 FLANG_VENDOR := $(shell `$(FC) --version|cut -f 1 -d "."|head -1`)
887 ifeq ($(FLANG_VENDOR),AOCC)
888 FCOMMON_OPT += -fno-unroll-loops
894 ifneq ($(INTERFACE64), 0)
902 ifeq ($(USE_OPENMP), 1)
903 FCOMMON_OPT += -fopenmp
907 ifeq ($(F_COMPILER), G77)
908 CCOMMON_OPT += -DF_INTERFACE_G77
910 ifndef NO_BINARY_MODE
911 ifneq ($(OSNAME), AIX)
921 ifeq ($(F_COMPILER), G95)
922 CCOMMON_OPT += -DF_INTERFACE_G95
924 ifneq ($(OSNAME), AIX)
925 ifndef NO_BINARY_MODE
932 ifneq ($(NO_LAPACKE), 1)
933 FCOMMON_OPT += -fno-second-underscore
938 ifeq ($(F_COMPILER), GFORTRAN)
939 CCOMMON_OPT += -DF_INTERFACE_GFORT
941 # make single-threaded LAPACK calls thread-safe #1847
942 FCOMMON_OPT += -frecursive
943 # work around ABI problem with passing single-character arguments
944 FCOMMON_OPT += -fno-optimize-sibling-calls
945 #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
946 ifneq ($(NO_LAPACK), 1)
947 EXTRALIB += -lgfortran
950 ifeq ($(ARCH), $(filter $(ARCH),mips64))
952 FCOMMON_OPT += -mabi=64
954 FCOMMON_OPT += -mabi=n32
956 else ifeq ($(ARCH), $(filter $(ARCH),mips))
957 FCOMMON_OPT += -mabi=32
961 ifneq ($(OSNAME), AIX)
962 ifneq ($(ARCH), riscv64)
967 ifneq ($(INTERFACE64), 0)
968 FCOMMON_OPT += -fdefault-integer-8
972 ifneq ($(OSNAME), AIX)
977 ifeq ($(USE_OPENMP), 1)
978 FCOMMON_OPT += -fopenmp
982 ifeq ($(F_COMPILER), INTEL)
983 CCOMMON_OPT += -DF_INTERFACE_INTEL
985 ifneq ($(INTERFACE64), 0)
989 FCOMMON_OPT += -recursive -fp-model strict -assume protect-parens
990 ifeq ($(USE_OPENMP), 1)
991 FCOMMON_OPT += -fopenmp
995 ifeq ($(F_COMPILER), FUJITSU)
996 CCOMMON_OPT += -DF_INTERFACE_FUJITSU
997 ifeq ($(USE_OPENMP), 1)
998 FCOMMON_OPT += -openmp
1002 ifeq ($(F_COMPILER), IBM)
1003 CCOMMON_OPT += -DF_INTERFACE_IBM
1004 # FCOMMON_OPT += -qarch=440
1008 ifneq ($(INTERFACE64), 0)
1009 FCOMMON_OPT += -qintsize=8
1015 ifeq ($(USE_OPENMP), 1)
1016 FCOMMON_OPT += -openmp
1020 ifeq ($(F_COMPILER), PGI)
1021 CCOMMON_OPT += -DF_INTERFACE_PGI
1022 COMMON_PROF += -DPGICOMPILER
1025 ifneq ($(INTERFACE64), 0)
1029 ifeq ($(ARCH), x86_64)
1030 FCOMMON_OPT += -tp p7-64
1032 ifeq ($(ARCH), power)
1033 ifeq ($(CORE), POWER8)
1034 FCOMMON_OPT += -tp pwr8
1036 ifeq ($(CORE), POWER9)
1037 FCOMMON_OPT += -tp pwr9
1042 FCOMMON_OPT += -tp p7
1044 FCOMMON_OPT += -Mrecursive
1045 ifeq ($(USE_OPENMP), 1)
1050 ifeq ($(F_COMPILER), PATHSCALE)
1051 CCOMMON_OPT += -DF_INTERFACE_PATHSCALE
1054 ifneq ($(INTERFACE64), 0)
1060 ifeq ($(USE_OPENMP), 1)
1065 ifeq ($(F_COMPILER), OPEN64)
1066 CCOMMON_OPT += -DF_INTERFACE_OPEN64
1069 ifneq ($(INTERFACE64), 0)
1075 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
1081 ifeq ($(CORE), LOONGSON3A)
1082 FCOMMON_OPT += -loongson3 -static
1085 ifeq ($(CORE), LOONGSON3B)
1086 FCOMMON_OPT += -loongson3 -static
1097 ifeq ($(USE_OPENMP), 1)
1098 FEXTRALIB += -lstdc++
1103 ifeq ($(C_COMPILER), OPEN64)
1105 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
1111 ifeq ($(CORE), LOONGSON3A)
1112 CCOMMON_OPT += -loongson3 -static
1115 ifeq ($(CORE), LOONGSON3B)
1116 CCOMMON_OPT += -loongson3 -static
1129 ifeq ($(C_COMPILER), SUN)
1138 ifeq ($(F_COMPILER), SUN)
1139 CCOMMON_OPT += -DF_INTERFACE_SUN
1145 ifeq ($(USE_OPENMP), 1)
1146 FCOMMON_OPT += -xopenmp=parallel
1150 ifeq ($(F_COMPILER), COMPAQ)
1151 CCOMMON_OPT += -DF_INTERFACE_COMPAQ
1152 ifeq ($(USE_OPENMP), 1)
1153 FCOMMON_OPT += -openmp
1159 ifneq ($(INTERFACE64), 0)
1166 ifeq ($(NEED_PIC), 1)
1167 ifeq ($(C_COMPILER), IBM)
1168 CCOMMON_OPT += -qpic=large
1170 CCOMMON_OPT += -fPIC
1172 ifeq ($(F_COMPILER), SUN)
1175 FCOMMON_OPT += -fPIC
1179 ifeq ($(DYNAMIC_ARCH), 1)
1180 CCOMMON_OPT += -DDYNAMIC_ARCH
1183 ifeq ($(DYNAMIC_OLDER), 1)
1184 CCOMMON_OPT += -DDYNAMIC_OLDER
1187 ifeq ($(NO_LAPACK), 1)
1188 CCOMMON_OPT += -DNO_LAPACK
1189 #Disable LAPACK C interface
1193 ifeq ($(NO_LAPACKE), 1)
1194 CCOMMON_OPT += -DNO_LAPACKE
1198 CCOMMON_OPT += -DNO_AVX
1202 CCOMMON_OPT += -DNO_AVX
1205 ifeq ($(NO_AVX2), 1)
1206 CCOMMON_OPT += -DNO_AVX2
1209 ifeq ($(NO_AVX512), 1)
1210 CCOMMON_OPT += -DNO_AVX512
1214 CCOMMON_OPT += -DSMP_SERVER
1216 ifeq ($(ARCH), mips64)
1217 ifneq ($(CORE), LOONGSON3B)
1218 USE_SIMPLE_THREADED_LEVEL3 = 1
1222 ifeq ($(USE_OPENMP), 1)
1223 # USE_SIMPLE_THREADED_LEVEL3 = 1
1225 CCOMMON_OPT += -DUSE_OPENMP
1228 ifeq ($(BIGNUMA), 1)
1229 CCOMMON_OPT += -DBIGNUMA
1234 ifeq ($(NO_WARMUP), 1)
1235 CCOMMON_OPT += -DNO_WARMUP
1238 ifeq ($(CONSISTENT_FPCSR), 1)
1239 CCOMMON_OPT += -DCONSISTENT_FPCSR
1242 # Only for development
1243 # CCOMMON_OPT += -DPARAMTEST
1244 # CCOMMON_OPT += -DPREFETCHTEST
1245 # CCOMMON_OPT += -DNO_SWITCHING
1249 CCOMMON_OPT += -DUSE_PAPI
1250 EXTRALIB += -lpapi -lperfctr
1253 ifdef DYNAMIC_THREADS
1254 CCOMMON_OPT += -DDYNAMIC_THREADS
1257 CCOMMON_OPT += -DMAX_CPU_NUMBER=$(NUM_THREADS)
1259 CCOMMON_OPT += -DMAX_PARALLEL_NUMBER=$(NUM_PARALLEL)
1261 ifdef USE_SIMPLE_THREADED_LEVEL3
1262 CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3
1265 ifeq ($(USE_TLS), 1)
1266 CCOMMON_OPT += -DUSE_TLS
1269 ifeq ($(BUILD_BFLOAT16), 1)
1270 CCOMMON_OPT += -DBUILD_BFLOAT16
1272 ifeq ($(BUILD_SINGLE), 1)
1273 CCOMMON_OPT += -DBUILD_SINGLE=1
1275 ifeq ($(BUILD_DOUBLE), 1)
1276 CCOMMON_OPT += -DBUILD_DOUBLE=1
1278 ifeq ($(BUILD_COMPLEX), 1)
1279 CCOMMON_OPT += -DBUILD_COMPLEX=1
1281 ifeq ($(BUILD_COMPLEX16), 1)
1282 CCOMMON_OPT += -DBUILD_COMPLEX16=1
1285 CCOMMON_OPT += -DVERSION=\"$(VERSION)\"
1295 ifndef LIBNAMESUFFIX
1296 LIBNAMEBASE = $(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)
1298 LIBNAMEBASE = $(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)_$(LIBNAMESUFFIX)
1301 ifeq ($(OSNAME), CYGWIN_NT)
1302 LIBPREFIX = cyg$(LIBNAMEBASE)
1304 LIBPREFIX = lib$(LIBNAMEBASE)
1307 KERNELDIR = $(TOPDIR)/kernel/$(ARCH)
1309 include $(TOPDIR)/Makefile.$(ARCH)
1311 ifneq ($(C_COMPILER), PGI)
1312 CCOMMON_OPT += -UASMNAME -UASMFNAME -UNAME -UCNAME -UCHAR_NAME -UCHAR_CNAME
1314 CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
1316 ifeq ($(CORE), PPC440)
1317 CCOMMON_OPT += -DALLOC_QALLOC
1320 ifeq ($(CORE), PPC440FP2)
1321 STATIC_ALLOCATION = 1
1324 ifneq ($(OSNAME), Linux)
1328 ifneq ($(ARCH), x86_64)
1329 ifneq ($(ARCH), x86)
1330 ifneq ($(CORE), LOONGSON3B)
1337 ifeq ($(NO_AFFINITY), 0)
1338 override undefine NO_AFFINITY
1340 CCOMMON_OPT += -DNO_AFFINITY
1344 ifdef FUNCTION_PROFILE
1345 CCOMMON_OPT += -DFUNCTION_PROFILE
1348 ifdef HUGETLB_ALLOCATION
1349 CCOMMON_OPT += -DALLOC_HUGETLB
1352 ifdef HUGETLBFILE_ALLOCATION
1353 CCOMMON_OPT += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
1356 ifdef STATIC_ALLOCATION
1357 CCOMMON_OPT += -DALLOC_STATIC
1360 ifdef DEVICEDRIVER_ALLOCATION
1361 CCOMMON_OPT += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
1364 ifdef MIXED_MEMORY_ALLOCATION
1365 CCOMMON_OPT += -DMIXED_MEMORY_ALLOCATION
1368 ifeq ($(OSNAME), SunOS)
1385 REVISION = -r$(VERSION)
1386 MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
1401 FCOMMON_OPT = -O2 -frecursive
1404 override CFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
1405 override PFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
1406 override FFLAGS += $(COMMON_OPT) $(FCOMMON_OPT)
1407 override FPFLAGS += $(FCOMMON_OPT) $(COMMON_PROF)
1411 ifeq (,$(findstring PIC,$(FFLAGS)))
1412 override FFLAGS += -fPIC
1416 #For LAPACK Fortran codes.
1417 #Disable -fopenmp for LAPACK Fortran codes on Windows.
1419 LAPACK_FFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FFLAGS))
1420 LAPACK_FPFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FPFLAGS))
1422 LAPACK_FFLAGS := $(FFLAGS)
1423 LAPACK_FPFLAGS := $(FPFLAGS)
1426 LAPACK_CFLAGS = $(CFLAGS)
1427 LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
1429 ifneq ($(INTERFACE64), 0)
1430 LAPACK_CFLAGS += -DLAPACK_ILP64
1435 LAPACK_CFLAGS += -DOPENBLAS_OS_WINDOWS
1437 ifeq ($(C_COMPILER), LSB)
1438 LAPACK_CFLAGS += -DLAPACK_COMPLEX_STRUCTURE
1453 ifneq ($(DYNAMIC_ARCH), 1)
1455 LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
1456 LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
1458 LIBNAME = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
1459 LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
1463 LIBNAME = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
1464 LIBNAME_P = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
1466 LIBNAME = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
1467 LIBNAME_P = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
1472 LIBDLLNAME = $(LIBPREFIX).dll
1473 IMPLIBNAME = lib$(LIBNAMEBASE).dll.a
1474 ifneq ($(OSNAME), AIX)
1475 LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.so)
1477 LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.a)
1479 LIBDYNNAME = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
1480 LIBDEFNAME = $(LIBNAME:.$(LIBSUFFIX)=.def)
1481 LIBEXPNAME = $(LIBNAME:.$(LIBSUFFIX)=.exp)
1482 LIBZIPNAME = $(LIBNAME:.$(LIBSUFFIX)=.zip)
1484 LIBS = $(TOPDIR)/$(LIBNAME)
1485 LIBS_P = $(TOPDIR)/$(LIBNAME_P)
1488 LIB_COMPONENTS = BLAS
1489 ifneq ($(NO_CBLAS), 1)
1490 LIB_COMPONENTS += CBLAS
1493 ifneq ($(NO_LAPACK), 1)
1494 LIB_COMPONENTS += LAPACK
1495 ifneq ($(NO_LAPACKE), 1)
1496 LIB_COMPONENTS += LAPACKE
1498 ifeq ($(BUILD_RELAPACK), 1)
1499 LIB_COMPONENTS += ReLAPACK
1503 ifeq ($(ONLY_CBLAS), 1)
1504 LIB_COMPONENTS = CBLAS
1511 export __BYTE_ORDER__
1519 export NEED2UNDERSCORES
1524 export MAKEFILE_RULE
1557 export FUNCTION_PROFILE
1560 export BUILD_BFLOAT16
1562 export SBGEMM_UNROLL_M
1563 export SBGEMM_UNROLL_N
1564 export SGEMM_UNROLL_M
1565 export SGEMM_UNROLL_N
1566 export DGEMM_UNROLL_M
1567 export DGEMM_UNROLL_N
1568 export QGEMM_UNROLL_M
1569 export QGEMM_UNROLL_N
1570 export CGEMM_UNROLL_M
1571 export CGEMM_UNROLL_N
1572 export ZGEMM_UNROLL_M
1573 export ZGEMM_UNROLL_N
1574 export XGEMM_UNROLL_M
1575 export XGEMM_UNROLL_N
1576 export CGEMM3M_UNROLL_M
1577 export CGEMM3M_UNROLL_N
1578 export ZGEMM3M_UNROLL_M
1579 export ZGEMM3M_UNROLL_N
1580 export XGEMM3M_UNROLL_M
1581 export XGEMM3M_UNROLL_N
1591 .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
1594 $(FC) $(FFLAGS) -c $< -o $(@F)
1597 $(FC) $(FPFLAGS) -pg -c $< -o $(@F)
1601 PATHSCALEPATH = /opt/pathscale/lib/3.1
1602 PGIPATH = /opt/pgi/linux86-64/7.1-5/lib
1604 PATHSCALEPATH = /opt/pathscale/lib/3.1/32
1605 PGIPATH = /opt/pgi/linux86/7.1-5/lib
1608 ACMLPATH = /opt/acml/4.3.0
1609 ifneq ($(OSNAME), Darwin)
1610 MKLPATH = /opt/intel/mkl/10.2.2.025/lib
1612 MKLPATH = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
1614 ATLASPATH = /opt/atlas/3.9.17/opteron
1615 FLAMEPATH = $(HOME)/flame/lib
1616 ifneq ($(OSNAME), SunOS)
1617 SUNPATH = /opt/sunstudio12.1
1619 SUNPATH = /opt/SUNWspro