Optimize cdot function for POWER10
[platform/upstream/openblas.git] / Makefile.system
1 #
2 # Include user definition
3 #
4
5 # TO suppress recursive includes
6 INCLUDED = 1
7
8 ifndef TOPDIR
9 TOPDIR = . 
10 endif
11
12  # If ARCH is not set, we use the host system's architecture for getarch compile options.
13 ifndef ARCH
14 HOSTARCH := $(shell uname -m)
15 else
16 HOSTARCH = $(ARCH)
17 endif
18
19 # Catch conflicting usage of ARCH in some BSD environments
20 ifeq ($(ARCH), amd64)
21 override ARCH=x86_64
22 else ifeq ($(ARCH), powerpc64)
23 override ARCH=power
24 else ifeq ($(ARCH), powerpc64le)
25 override ARCH=power
26 else ifeq ($(ARCH), powerpc)
27 override ARCH=power
28 else ifeq ($(ARCH), i386)
29 override ARCH=x86
30 else ifeq ($(ARCH), armv6)
31 override ARCH=arm
32 else ifeq ($(ARCH), armv7)
33 override ARCH=arm
34 else ifeq ($(ARCH), aarch64)
35 override ARCH=arm64
36 else ifeq ($(ARCH), zarch)
37 override ARCH=zarch
38 endif
39
40 NETLIB_LAPACK_DIR = $(TOPDIR)/lapack-netlib
41
42 # Default C compiler
43 # - Only set if not specified on the command line or inherited from the environment.
44 # - CC is an implicit variable so neither '?=' or 'ifndef' can be used.
45 #   http://stackoverflow.com/questions/4029274/mingw-and-make-variables
46 # - Default value is 'cc' which is not always a valid command (e.g. MinGW).
47 ifeq ($(origin CC),default)
48
49 # Check if $(CC) refers to a valid command and set the value to gcc if not
50 ifneq ($(findstring cmd.exe,$(SHELL)),)
51 ifeq ($(shell where $(CC) 2>NUL),)
52 CC = gcc
53 endif
54 else # POSIX-ish
55 ifeq ($(shell command -v $(CC) 2>/dev/null),)
56 ifeq ($(shell uname -s),Darwin)
57 CC = clang
58 # EXTRALIB += -Wl,-no_compact_unwind
59 else
60 CC = gcc
61 endif # Darwin
62 endif # CC exists
63 endif # Shell is sane
64
65 endif # CC is set to default
66
67 # Default Fortran compiler (FC) is selected by f_check.
68
69 ifndef MAKEFILE_RULE
70 include $(TOPDIR)/Makefile.rule
71 else
72 include $(TOPDIR)/$(MAKEFILE_RULE)
73 endif
74
75 #
76 #  Beginning of system configuration
77 #
78 ifneq ($(BUILD_SINGLE),1)
79 ifneq ($(BUILD_DOUBLE),1)
80 ifneq ($(BUILD_COMPLEX),1)
81 ifneq ($(BUILD_COMPLEX16),1)
82 override BUILD_SINGLE=1
83 override BUILD_DOUBLE=1
84 override BUILD_COMPLEX=1
85 override BUILD_COMPLEX16=1
86 endif
87 endif
88 endif
89 endif
90
91 ifndef HOSTCC
92 HOSTCC   = $(CC)
93 endif
94
95 ifdef TARGET
96 GETARCH_FLAGS := -DFORCE_$(TARGET)
97 GETARCH_FLAGS += -DUSER_TARGET
98 ifeq ($(TARGET), GENERIC)
99 ifeq ($(DYNAMIC_ARCH), 1)
100 override NO_EXPRECISION=1
101 export NO_EXPRECiSION
102 endif
103 endif
104 endif
105
106 # Force fallbacks for 32bit
107
108 ifeq ($(BINARY), 32)
109 ifeq ($(TARGET), HASWELL)
110 GETARCH_FLAGS := -DFORCE_NEHALEM
111 endif
112 ifeq ($(TARGET), SKYLAKEX)
113 GETARCH_FLAGS := -DFORCE_NEHALEM
114 endif
115 ifeq ($(TARGET), COOPERLAKE)
116 GETARCH_FLAGS := -DFORCE_NEHALEM
117 endif
118 ifeq ($(TARGET), SANDYBRIDGE)
119 GETARCH_FLAGS := -DFORCE_NEHALEM
120 endif
121 ifeq ($(TARGET), BULLDOZER)
122 GETARCH_FLAGS := -DFORCE_BARCELONA
123 endif
124 ifeq ($(TARGET), PILEDRIVER)
125 GETARCH_FLAGS := -DFORCE_BARCELONA
126 endif
127 ifeq ($(TARGET), STEAMROLLER)
128 GETARCH_FLAGS := -DFORCE_BARCELONA
129 endif
130 ifeq ($(TARGET), EXCAVATOR)
131 GETARCH_FLAGS := -DFORCE_BARCELONA
132 endif
133 ifeq ($(TARGET), ZEN)
134 GETARCH_FLAGS := -DFORCE_BARCELONA
135 endif
136 ifeq ($(TARGET), ARMV8)
137 GETARCH_FLAGS := -DFORCE_ARMV7
138 endif
139 ifeq ($(TARGET), POWER8)
140 GETARCH_FLAGS := -DFORCE_POWER6
141 endif
142 endif
143
144
145 #TARGET_CORE will override TARGET which is used in DYNAMIC_ARCH=1.
146 #
147 ifdef TARGET_CORE
148 GETARCH_FLAGS := -DFORCE_$(TARGET_CORE)
149 endif
150
151 # Force fallbacks for 32bit
152
153 ifeq ($(BINARY), 32)
154 ifeq ($(TARGET_CORE), HASWELL)
155 GETARCH_FLAGS := -DFORCE_NEHALEM
156 endif
157 ifeq ($(TARGET_CORE), SKYLAKEX)
158 GETARCH_FLAGS := -DFORCE_NEHALEM
159 endif
160 ifeq ($(TARGET_CORE), COOPERLAKE)
161 GETARCH_FLAGS := -DFORCE_NEHALEM
162 endif
163 ifeq ($(TARGET_CORE), SANDYBRIDGE)
164 GETARCH_FLAGS := -DFORCE_NEHALEM
165 endif
166 ifeq ($(TARGET_CORE), BULLDOZER)
167 GETARCH_FLAGS := -DFORCE_BARCELONA
168 endif
169 ifeq ($(TARGET_CORE), PILEDRIVER)
170 GETARCH_FLAGS := -DFORCE_BARCELONA
171 endif
172 ifeq ($(TARGET_CORE), STEAMROLLER)
173 GETARCH_FLAGS := -DFORCE_BARCELONA
174 endif
175 ifeq ($(TARGET_CORE), EXCAVATOR)
176 GETARCH_FLAGS := -DFORCE_BARCELONA
177 endif
178 ifeq ($(TARGET_CORE), ZEN)
179 GETARCH_FLAGS := -DFORCE_BARCELONA
180 endif
181 endif
182
183
184 # On x86_64 build getarch with march=native unless the compiler is PGI. This is required to detect AVX512 support in getarch.
185 ifeq ($(HOSTARCH), x86_64)
186 ifeq ($(findstring pgcc,$(HOSTCC))$(findstring nvc,$(HOSTCC)),)
187 GETARCH_FLAGS += -march=native
188 endif
189 endif
190
191 ifdef INTERFACE64
192 ifneq ($(INTERFACE64), 0)
193 GETARCH_FLAGS   += -DUSE64BITINT
194 endif
195 endif
196
197 ifndef GEMM_MULTITHREAD_THRESHOLD
198 GEMM_MULTITHREAD_THRESHOLD=4
199 endif
200 GETARCH_FLAGS   += -DGEMM_MULTITHREAD_THRESHOLD=$(GEMM_MULTITHREAD_THRESHOLD)
201
202 ifeq ($(NO_AVX), 1)
203 GETARCH_FLAGS   += -DNO_AVX
204 endif
205
206 ifeq ($(BINARY), 32)
207 GETARCH_FLAGS   += -DNO_AVX -DNO_AVX2 -DNO_AVX512
208 NO_AVX512 = 1
209 endif
210
211 ifeq ($(NO_AVX2), 1)
212 GETARCH_FLAGS   += -DNO_AVX2
213 endif
214
215 ifeq ($(NO_AVX512), 1)
216 GETARCH_FLAGS   += -DNO_AVX512
217 endif
218
219 ifeq ($(DEBUG), 1)
220 GETARCH_FLAGS   += -g
221 endif
222
223 ifeq ($(QUIET_MAKE), 1)
224 MAKE += -s
225 endif
226
227 ifndef NO_PARALLEL_MAKE
228 NO_PARALLEL_MAKE=0
229 endif
230 GETARCH_FLAGS   += -DNO_PARALLEL_MAKE=$(NO_PARALLEL_MAKE)
231
232 ifdef MAKE_NB_JOBS
233 GETARCH_FLAGS += -DMAKE_NB_JOBS=$(MAKE_NB_JOBS)
234 endif
235
236 ifeq ($(HOSTCC), loongcc)
237 GETARCH_FLAGS  += -static
238 endif
239
240 #if don't use Fortran, it will only compile CBLAS.
241 ifeq ($(ONLY_CBLAS), 1)
242 NO_LAPACK = 1
243 else
244 ONLY_CBLAS = 0
245 endif
246
247 # This operation is expensive, so execution should be once.
248 ifndef GOTOBLAS_MAKEFILE
249 export GOTOBLAS_MAKEFILE = 1
250
251 # Generating Makefile.conf and config.h
252 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
254 ifndef TARGET_CORE
255 include $(TOPDIR)/Makefile.conf
256 else
257 HAVE_NEON=
258 HAVE_VFP=
259 HAVE_VFPV3=
260 HAVE_VFPV4=
261 HAVE_MMX=
262 HAVE_SSE=
263 HAVE_SSE2=
264 HAVE_SSE3=
265 HAVE_SSSE3=
266 HAVE_SSE4_1=
267 HAVE_SSE4_2=
268 HAVE_SSE4A=
269 HAVE_SSE5=
270 HAVE_AVX=
271 HAVE_AVX2=
272 HAVE_FMA3=
273 include $(TOPDIR)/Makefile_kernel.conf
274 endif
275
276 endif
277
278 ifndef NUM_PARALLEL
279 NUM_PARALLEL = 1
280 endif
281
282 ifndef NUM_THREADS
283 NUM_THREADS = $(NUM_CORES)
284 endif
285
286 ifeq ($(NUM_THREADS), 1)
287 override USE_THREAD = 0
288 override USE_OPENMP = 0
289 endif
290
291 ifdef USE_THREAD
292 ifeq ($(USE_THREAD), 0)
293 SMP =
294 else
295 SMP = 1
296 endif
297 else
298 ifeq ($(NUM_THREAD), 1)
299 SMP =
300 else
301 SMP = 1
302 endif
303 endif
304
305 ifeq ($(SMP), 1)
306 USE_LOCKING = 
307 endif
308
309 ifndef NEED_PIC
310 NEED_PIC = 1
311 endif
312
313 ARFLAGS =
314 CPP     = $(COMPILER) -E
315 AR      ?= $(CROSS_SUFFIX)ar
316 AS      ?= $(CROSS_SUFFIX)as
317 LD      ?= $(CROSS_SUFFIX)ld
318 RANLIB  ?= $(CROSS_SUFFIX)ranlib
319 NM      = $(CROSS_SUFFIX)nm
320 DLLWRAP = $(CROSS_SUFFIX)dllwrap
321 OBJCOPY = $(CROSS_SUFFIX)objcopy
322 OBJCONV = $(CROSS_SUFFIX)objconv
323
324
325 # When fortran support was either not detected or actively deselected, only build BLAS.
326 ifeq ($(NOFORTRAN), 1)
327 NO_LAPACK = 1
328 override FEXTRALIB = 
329 endif
330
331 ifeq ($(C_COMPILER), GCC)
332 GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
333 GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4)
334 GCCVERSIONGT5 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 5)
335 GCCVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 7)
336 GCCVERSIONGTEQ9 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 9)
337 GCCVERSIONGTEQ11 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 11)
338 GCCVERSIONGTEQ10 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 10)
339 # Note that the behavior of -dumpversion is compile-time-configurable for
340 # gcc-7.x and newer. Use -dumpfullversion there
341 ifeq ($(GCCVERSIONGTEQ7),1)
342         GCCDUMPVERSION_PARAM := -dumpfullversion
343 else
344         GCCDUMPVERSION_PARAM := -dumpversion
345 endif
346 GCCMINORVERSIONGTEQ1 := $(shell expr `$(CC) $(GCCDUMPVERSION_PARAM) | cut -f2 -d.` \>= 1)
347 GCCMINORVERSIONGTEQ2 := $(shell expr `$(CC) $(GCCDUMPVERSION_PARAM) | cut -f2 -d.` \>= 2)
348 GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) $(GCCDUMPVERSION_PARAM) | cut -f2 -d.` \>= 7)
349 endif
350
351 #
352 #  OS dependent settings
353 #
354
355 ifeq ($(OSNAME), Darwin)
356 ifndef MACOSX_DEPLOYMENT_TARGET
357 export MACOSX_DEPLOYMENT_TARGET=10.8
358 endif
359 MD5SUM = md5 -r
360 endif
361
362 ifneq (,$(findstring $(OSNAME), FreeBSD OpenBSD DragonFly))
363 MD5SUM = md5 -r
364 endif
365
366 ifeq ($(OSNAME), NetBSD)
367 MD5SUM = md5 -n
368 endif
369
370 ifeq ($(OSNAME), Linux)
371 EXTRALIB        += -lm
372 NO_EXPRECISION = 1
373 endif
374
375 ifeq ($(OSNAME), Android)
376 EXTRALIB        += -lm
377 endif
378
379 ifeq ($(OSNAME), AIX)
380 EXTRALIB        += -lm
381 endif
382
383 ifeq ($(OSNAME), WINNT)
384 NEED_PIC = 0
385 NO_EXPRECISION = 1
386
387 EXTRALIB        += -defaultlib:advapi32
388
389 SUFFIX  = obj
390 PSUFFIX = pobj
391 LIBSUFFIX = a
392
393 ifeq ($(C_COMPILER), CLANG)
394 CCOMMON_OPT     += -DMS_ABI
395 endif
396
397 #Version tests for supporting specific features (MS_ABI, POWER9 intrinsics)
398 ifeq ($(GCCVERSIONGT4), 1)
399 # GCC Major version > 4
400 # It is compatible with MSVC ABI.
401 CCOMMON_OPT     += -DMS_ABI
402 endif
403
404 ifeq ($(GCCVERSIONGTEQ4), 1)
405 ifeq ($(GCCMINORVERSIONGTEQ7), 1)
406 # GCC Version >=4.7
407 # It is compatible with MSVC ABI.
408 CCOMMON_OPT     += -DMS_ABI
409 endif
410 endif
411
412 # Ensure the correct stack alignment on Win32
413 # http://permalink.gmane.org/gmane.comp.lib.openblas.general/97
414 ifeq ($(ARCH), x86)
415 CCOMMON_OPT += -mincoming-stack-boundary=2
416 FCOMMON_OPT += -mincoming-stack-boundary=2
417 endif
418
419 endif
420
421 ifeq ($(OSNAME), Interix)
422 NEED_PIC = 0
423 NO_EXPRECISION = 1
424
425 INTERIX_TOOL_DIR = /opt/gcc.3.3/i586-pc-interix3/bin
426 endif
427
428 ifeq ($(OSNAME), CYGWIN_NT)
429 NEED_PIC = 0
430 NO_EXPRECISION = 1
431 OS_CYGWIN_NT = 1
432 endif
433
434 ifneq ($(OSNAME), WINNT)
435 ifneq ($(OSNAME), CYGWIN_NT)
436 ifneq ($(OSNAME), Interix)
437 ifneq ($(OSNAME), Android)
438 ifdef SMP
439 EXTRALIB   += -lpthread
440 endif
441 endif
442 endif
443 endif
444 endif
445
446 # ifeq logical or
447 ifeq ($(OSNAME), $(filter $(OSNAME),WINNT CYGWIN_NT Interix))
448 OS_WINDOWS=1
449 endif
450
451 ifdef QUAD_PRECISION
452 CCOMMON_OPT     += -DQUAD_PRECISION
453 NO_EXPRECISION = 1
454 endif
455
456 ifneq ($(ARCH), x86)
457 ifneq ($(ARCH), x86_64)
458 NO_EXPRECISION = 1
459 endif
460 endif
461
462 ifdef UTEST_CHECK
463 CCOMMON_OPT     += -DUTEST_CHECK
464 SANITY_CHECK = 1
465 endif
466
467 ifdef SANITY_CHECK
468 CCOMMON_OPT     += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU)
469 endif
470
471 MAX_STACK_ALLOC ?= 2048
472 ifneq ($(MAX_STACK_ALLOC), 0)
473 CCOMMON_OPT     += -DMAX_STACK_ALLOC=$(MAX_STACK_ALLOC)
474 endif
475
476 ifdef USE_LOCKING
477 ifneq ($(USE_LOCKING), 0)
478 CCOMMON_OPT     += -DUSE_LOCKING
479 endif
480 endif
481
482 #
483 #  Architecture dependent settings
484 #
485
486 ifeq ($(ARCH), x86)
487 ifndef BINARY
488 NO_BINARY_MODE  = 1
489 endif
490
491 ifeq ($(CORE), generic)
492 NO_EXPRECISION = 1
493 endif
494
495 ifndef NO_EXPRECISION
496 ifeq ($(F_COMPILER), GFORTRAN)
497 # ifeq logical or. GCC or LSB
498 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
499 EXPRECISION     = 1
500 CCOMMON_OPT     += -DEXPRECISION -m128bit-long-double
501 FCOMMON_OPT     += -m128bit-long-double
502 endif
503 ifeq ($(C_COMPILER), CLANG)
504 EXPRECISION     = 1
505 CCOMMON_OPT     += -DEXPRECISION
506 FCOMMON_OPT     += -m128bit-long-double
507 endif
508 endif
509 endif
510 endif
511
512 ifeq ($(ARCH), x86_64)
513
514 ifeq ($(CORE), generic)
515 NO_EXPRECISION = 1
516 endif
517
518 ifndef NO_EXPRECISION
519 ifeq ($(F_COMPILER), GFORTRAN)
520 # ifeq logical or. GCC or LSB
521 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
522 EXPRECISION     = 1
523 CCOMMON_OPT     += -DEXPRECISION -m128bit-long-double
524 FCOMMON_OPT     += -m128bit-long-double
525 endif
526 ifeq ($(C_COMPILER), CLANG)
527 EXPRECISION     = 1
528 CCOMMON_OPT     += -DEXPRECISION
529 FCOMMON_OPT     += -m128bit-long-double
530 endif
531 endif
532 endif
533 endif
534
535 ifeq ($(C_COMPILER), INTEL)
536 CCOMMON_OPT    += -wd981
537 endif
538
539
540 ifeq ($(USE_OPENMP), 1)
541
542 #check
543 ifeq ($(USE_THREAD), 0)
544 $(error OpenBLAS: Cannot set both USE_OPENMP=1 and USE_THREAD=0. The USE_THREAD=0 is only for building single thread version.)
545 endif
546
547 # ifeq logical or. GCC or LSB
548 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
549 CCOMMON_OPT    += -fopenmp
550 endif
551
552 ifeq ($(C_COMPILER), CLANG)
553 CCOMMON_OPT    += -fopenmp
554 endif
555
556 ifeq ($(C_COMPILER), INTEL)
557 CCOMMON_OPT    += -fopenmp
558 endif
559
560 ifeq ($(C_COMPILER), PGI)
561 CCOMMON_OPT    += -mp
562 endif
563
564 ifeq ($(C_COMPILER), OPEN64)
565 CCOMMON_OPT    += -mp
566 CEXTRALIB   += -lstdc++
567 endif
568
569 ifeq ($(C_COMPILER), PATHSCALE)
570 CCOMMON_OPT    += -mp
571 endif
572 endif
573
574
575 ifeq ($(DYNAMIC_ARCH), 1)
576 ifeq ($(ARCH), x86)
577 DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \
578                CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
579 endif
580
581 ifeq ($(ARCH), x86_64)
582 DYNAMIC_CORE = PRESCOTT CORE2 
583 ifeq ($(DYNAMIC_OLDER), 1)
584 DYNAMIC_CORE += PENRYN DUNNINGTON 
585 endif
586 DYNAMIC_CORE += NEHALEM 
587 ifeq ($(DYNAMIC_OLDER), 1)
588 DYNAMIC_CORE += OPTERON OPTERON_SSE3 
589 endif
590 DYNAMIC_CORE += BARCELONA 
591 ifeq ($(DYNAMIC_OLDER), 1)
592 DYNAMIC_CORE += BOBCAT ATOM NANO
593 endif
594 ifneq ($(NO_AVX), 1)
595 DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER STEAMROLLER EXCAVATOR
596 endif
597 ifneq ($(NO_AVX2), 1)
598 DYNAMIC_CORE += HASWELL ZEN
599 endif
600 ifneq ($(NO_AVX512), 1)
601 ifneq ($(NO_AVX2), 1)
602 DYNAMIC_CORE += SKYLAKEX COOPERLAKE
603 endif
604 endif
605 endif
606
607 ifdef DYNAMIC_LIST
608 override DYNAMIC_CORE = PRESCOTT $(DYNAMIC_LIST)
609 XCCOMMON_OPT = -DDYNAMIC_LIST -DDYN_PRESCOTT
610 XCCOMMON_OPT += $(foreach dcore,$(DYNAMIC_LIST),-DDYN_$(dcore))
611 CCOMMON_OPT += $(XCCOMMON_OPT)
612 #CCOMMON_OPT    += -DDYNAMIC_LIST='$(DYNAMIC_LIST)'
613 endif
614
615 ifeq ($(ARCH), arm64)
616 DYNAMIC_CORE =  ARMV8
617 DYNAMIC_CORE += CORTEXA53
618 DYNAMIC_CORE += CORTEXA57
619 DYNAMIC_CORE += CORTEXA72
620 DYNAMIC_CORE += CORTEXA73
621 DYNAMIC_CORE += NEOVERSEN1
622 DYNAMIC_CORE += FALKOR
623 DYNAMIC_CORE += THUNDERX
624 DYNAMIC_CORE += THUNDERX2T99
625 DYNAMIC_CORE += TSV110
626 DYNAMIC_CORE += EMAG8180
627 DYNAMIC_CORE += THUNDERX3T110
628 endif
629
630 ifeq ($(ARCH), mips64)
631 DYNAMIC_CORE = LOONGSON3R3 LOONGSON3R4
632 endif
633
634 ifeq ($(ARCH), zarch)
635 DYNAMIC_CORE = ZARCH_GENERIC
636
637 # if the compiler accepts -march=arch11 or -march=z13 and can compile a file
638 # with z13-specific inline assembly, then we can include support for Z13.
639 # note: -march=z13 is equivalent to -march=arch11 yet some compiler releases
640 # only support one or the other.
641 # note: LLVM version 6.x supported -march=z13 yet could not handle vector
642 # registers in inline assembly, so the check for supporting the -march flag is
643 # not enough.
644 ZARCH_TEST_COMPILE=-c $(TOPDIR)/kernel/zarch/damin_z13.c -I$(TOPDIR) -o /dev/null > /dev/null 2> /dev/null
645 ZARCH_CC_SUPPORTS_ARCH11=$(shell $(CC) -march=arch11 $(ZARCH_TEST_COMPILE) && echo 1)
646 ZARCH_CC_SUPPORTS_Z13=$(shell $(CC) -march=z13 $(ZARCH_TEST_COMPILE) && echo 1)
647
648 ifeq ($(or $(ZARCH_CC_SUPPORTS_ARCH11), $(ZARCH_CC_SUPPORTS_Z13)), 1)
649 DYNAMIC_CORE += Z13
650 CCOMMON_OPT += -DDYN_Z13
651 else
652 $(info OpenBLAS: Not building Z13 kernels because the compiler $(CC) does not support it)
653 endif
654
655 # as above for z13, check for -march=arch12 and z14 support in the compiler.
656 ZARCH_CC_SUPPORTS_ARCH12=$(shell $(CC) -march=arch12 $(ZARCH_TEST_COMPILE) && echo 1)
657 ZARCH_CC_SUPPORTS_Z14=$(shell $(CC) -march=z14 $(ZARCH_TEST_COMPILE) && echo 1)
658 ifeq ($(or $(ZARCH_CC_SUPPORTS_ARCH12), $(ZARCH_CC_SUPPORTS_Z14)), 1)
659 DYNAMIC_CORE += Z14
660 CCOMMON_OPT += -DDYN_Z14
661 else
662 $(info OpenBLAS: Not building Z14 kernels because the compiler $(CC) does not support it)
663 endif
664
665 endif # ARCH zarch
666
667 ifeq ($(ARCH), power)
668 ifneq ($(C_COMPILER), PGI)
669 DYNAMIC_CORE = POWER6
670 DYNAMIC_CORE += POWER8
671 ifneq ($(C_COMPILER), GCC)
672 DYNAMIC_CORE += POWER9
673 DYNAMIC_CORE += POWER10
674 CCOMMON_OPT += -DHAVE_P10_SUPPORT
675 endif
676 ifeq ($(C_COMPILER), GCC)
677 ifeq ($(GCCVERSIONGT5), 1)
678 DYNAMIC_CORE += POWER9
679 else
680 $(info, OpenBLAS: Your gcc version is too old to build the POWER9 kernels.)
681 endif
682 LDVERSIONGTEQ35 := $(shell expr `$(CC) -Wl,--version 2> /dev/null | head -1 | cut -f2 -d "." | cut -f1 -d "-"` \>= 35)
683 ifeq ($(GCCVERSIONGTEQ11)$(LDVERSIONGTEQ35), 11)
684 DYNAMIC_CORE += POWER10
685 CCOMMON_OPT += -DHAVE_P10_SUPPORT
686 else ifeq ($(GCCVERSIONGTEQ10), 1)
687 ifeq ($(GCCMINORVERSIONGTEQ2)$(LDVERSIONGTEQ35), 11)
688 DYNAMIC_CORE += POWER10
689 CCOMMON_OPT += -DHAVE_P10_SUPPORT
690 endif
691 else
692 $(info, OpenBLAS: Your gcc version is too old to build the POWER10 kernels.)
693 endif
694 endif
695 else
696 DYNAMIC_CORE = POWER8
697 DYNAMIC_CORE += POWER9
698 endif
699 endif
700
701 # If DYNAMIC_CORE is not set, DYNAMIC_ARCH cannot do anything, so force it to empty
702 ifndef DYNAMIC_CORE
703 override DYNAMIC_ARCH=
704 endif
705 endif
706
707 ifeq ($(ARCH), ia64)
708 NO_BINARY_MODE  = 1
709 BINARY_DEFINED  = 1
710
711 ifeq ($(F_COMPILER), GFORTRAN)
712 ifeq ($(C_COMPILER), GCC)
713 # EXPRECISION   = 1
714 # CCOMMON_OPT   += -DEXPRECISION
715 endif
716 endif
717 endif
718
719 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
720 NO_BINARY_MODE  = 1
721 endif
722
723 ifeq ($(ARCH), alpha)
724 NO_BINARY_MODE  = 1
725 BINARY_DEFINED  = 1
726 endif
727
728 ifeq ($(ARCH), arm)
729 NO_BINARY_MODE  = 1
730 BINARY_DEFINED  = 1
731
732 CCOMMON_OPT += -marm
733 FCOMMON_OPT += -marm
734
735 # If softfp abi is mentioned on the command line, force it.
736 ifeq ($(ARM_SOFTFP_ABI), 1)
737 CCOMMON_OPT += -mfloat-abi=softfp
738 FCOMMON_OPT += -mfloat-abi=softfp
739 endif
740
741 ifeq ($(OSNAME), Android)
742 ifeq ($(ARM_SOFTFP_ABI), 1)
743 EXTRALIB        += -lm
744 else
745 EXTRALIB        += -Wl,-lm_hard
746 endif
747 endif
748 endif
749
750 ifeq ($(ARCH), arm64)
751 NO_BINARY_MODE  = 1
752 BINARY_DEFINED  = 1
753 ifdef INTERFACE64
754 ifneq ($(INTERFACE64), 0)
755 ifeq ($(F_COMPILER), GFORTRAN)
756 FCOMMON_OPT +=  -fdefault-integer-8
757 endif
758 ifeq ($(F_COMPILER), FLANG)
759 FCOMMON_OPT += -i8
760 endif
761 endif
762 endif
763 endif
764
765 ifeq ($(ARCH), riscv64)
766 NO_BINARY_MODE  = 1
767 BINARY_DEFINED  = 1
768 endif
769
770
771 #
772 #  C Compiler dependent settings
773 #
774
775
776 # ifeq logical or. GCC or CLANG or LSB
777 # http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
778 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG LSB))
779 CCOMMON_OPT += -Wall
780 COMMON_PROF += -fno-inline
781 NO_UNINITIALIZED_WARN =  -Wno-uninitialized
782
783 ifeq ($(QUIET_MAKE), 1)
784 CCOMMON_OPT += $(NO_UNINITIALIZED_WARN) -Wno-unused
785 endif
786
787 ifdef NO_BINARY_MODE
788
789 ifeq ($(ARCH), $(filter $(ARCH),mips64))
790 ifdef BINARY64
791 CCOMMON_OPT += -mabi=64
792 else
793 CCOMMON_OPT += -mabi=n32
794 endif
795 BINARY_DEFINED = 1
796 else ifeq ($(ARCH), $(filter $(ARCH),mips))
797 CCOMMON_OPT += -mabi=32
798 BINARY_DEFINED = 1
799 endif
800
801 ifeq ($(CORE), $(filter $(CORE),LOONGSON3R3 LOONGSON3R4))
802 CCOMMON_OPT += -march=loongson3a
803 FCOMMON_OPT += -march=loongson3a
804 endif
805
806 ifeq ($(CORE), MIPS24K)
807 CCOMMON_OPT += -mips32r2 -mtune=24kc  $(MSA_FLAGS)
808 FCOMMON_OPT += -mips32r2 -mtune=24kc  $(MSA_FLAGS)
809 endif
810
811 ifeq ($(CORE), MIPS1004K)
812 CCOMMON_OPT += -mips32r2   $(MSA_FLAGS)
813 FCOMMON_OPT += -mips32r2   $(MSA_FLAGS)
814 endif
815
816 ifeq ($(CORE), P5600)
817 CCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600  $(MSA_FLAGS)
818 FCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600  $(MSA_FLAGS)
819 endif
820
821 ifeq ($(CORE), I6400)
822 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
823 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
824 endif
825
826 ifeq ($(CORE), P6600)
827 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
828 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
829 endif
830
831 ifeq ($(CORE), I6500)
832 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
833 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
834 endif
835
836 ifeq ($(OSNAME), AIX)
837 BINARY_DEFINED = 1
838 endif
839
840 endif
841
842 ifndef BINARY_DEFINED
843 ifneq ($(OSNAME), AIX)
844 ifdef BINARY64
845 ifneq ($(ARCH), riscv64)
846 CCOMMON_OPT += -m64
847 endif
848 else
849 CCOMMON_OPT += -m32
850 endif
851 endif
852 endif
853
854 endif
855
856 ifeq ($(C_COMPILER), PGI)
857 PGCVERSIONGT20 := $(shell expr `$(CC) --version|sed -n "2p" |sed -e "s/[^0-9.]//g" |cut -d "." -f 1` \> 20)
858 PGCVERSIONGTEQ20 := $(shell expr `$(CC) --version|sed -n "2p" |sed -e "s/[^0-9.]//g" |cut -d "." -f 1` \>= 20)
859 PGCMINORVERSIONGE11 := $(shell expr `$(CC) --version|sed -n "2p" |sed -e "s/[^0-9.]//g" |cut -c 4-5` == 11)
860 PGCVERSIONCHECK := $(PGCVERSIONGT20)$(PGCVERSIONEQ20)$(PGCMINORVERSIONGE11)
861 ifeq ($(PGCVERSIONCHECK), $(filter $(PGCVERSIONCHECK), 110 111 011))
862 NEWPGI := 1
863 endif
864 ifdef BINARY64
865 ifeq ($(ARCH), x86_64)
866 CCOMMON_OPT += -tp p7-64
867 ifneq ($(NEWPGI),1)
868 CCOMMON_OPT +=  -D__MMX__ -Mnollvm
869 endif
870 else
871 ifeq ($(ARCH), power)
872 ifeq ($(CORE), POWER8)
873 CCOMMON_OPT += -tp pwr8
874 endif
875 ifeq ($(CORE), POWER9)
876 CCOMMON_OPT += -tp pwr9
877 endif
878 endif
879 endif
880 else
881 CCOMMON_OPT += -tp p7
882 endif
883 endif
884
885 ifeq ($(C_COMPILER), PATHSCALE)
886 ifdef BINARY64
887 CCOMMON_OPT += -m64
888 else
889 CCOMMON_OPT += -m32
890 endif
891 endif
892
893 #
894 #  Fortran Compiler dependent settings
895 #
896
897 ifeq ($(F_COMPILER), FLANG)
898 CCOMMON_OPT += -DF_INTERFACE_FLANG
899 FCOMMON_OPT += -Mrecursive -Kieee
900 ifeq ($(OSNAME), Linux)
901 ifeq ($(ARCH), x86_64)
902 FLANG_VENDOR := $(shell `$(FC) --version|cut -f 1 -d "."|head -1`)
903 ifeq ($(FLANG_VENDOR),AOCC)
904 FCOMMON_OPT += -fno-unroll-loops
905 endif
906 endif
907 endif
908 ifdef BINARY64
909 ifdef INTERFACE64
910 ifneq ($(INTERFACE64), 0)
911 FCOMMON_OPT += -i8
912 endif
913 endif
914 FCOMMON_OPT += -Wall
915 else
916 FCOMMON_OPT += -Wall
917 endif
918 ifeq ($(USE_OPENMP), 1)
919 FCOMMON_OPT += -fopenmp
920 endif
921 endif
922
923 ifeq ($(F_COMPILER), G77)
924 CCOMMON_OPT += -DF_INTERFACE_G77
925 FCOMMON_OPT += -Wall
926 ifndef NO_BINARY_MODE
927 ifneq ($(OSNAME), AIX)
928 ifdef BINARY64
929 FCOMMON_OPT += -m64
930 else
931 FCOMMON_OPT += -m32
932 endif
933 endif
934 endif
935 endif
936
937 ifeq ($(F_COMPILER), G95)
938 CCOMMON_OPT += -DF_INTERFACE_G95
939 FCOMMON_OPT += -Wall
940 ifneq ($(OSNAME), AIX)
941 ifndef NO_BINARY_MODE
942 ifdef BINARY64
943 FCOMMON_OPT += -m64
944 else
945 FCOMMON_OPT += -m32
946 endif
947 endif
948 ifneq ($(NO_LAPACKE), 1)
949 FCOMMON_OPT += -fno-second-underscore
950 endif
951 endif
952 endif
953
954 ifeq ($(F_COMPILER), GFORTRAN)
955 CCOMMON_OPT += -DF_INTERFACE_GFORT
956 FCOMMON_OPT += -Wall
957 # make single-threaded LAPACK calls thread-safe #1847
958 FCOMMON_OPT += -frecursive
959 # work around ABI problem with passing single-character arguments
960 FCOMMON_OPT += -fno-optimize-sibling-calls
961 #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
962 ifneq ($(NO_LAPACK), 1)
963 EXTRALIB += -lgfortran
964 endif
965 ifdef NO_BINARY_MODE
966 ifeq ($(ARCH), $(filter $(ARCH),mips64))
967 ifdef BINARY64
968 FCOMMON_OPT += -mabi=64
969 else
970 FCOMMON_OPT += -mabi=n32
971 endif
972 else ifeq ($(ARCH), $(filter $(ARCH),mips))
973 FCOMMON_OPT += -mabi=32
974 endif
975 else
976 ifdef BINARY64
977 ifneq ($(OSNAME), AIX)
978 ifneq ($(ARCH), riscv64)
979 FCOMMON_OPT += -m64
980 endif
981 endif
982 ifdef INTERFACE64
983 ifneq ($(INTERFACE64), 0)
984 FCOMMON_OPT +=  -fdefault-integer-8
985 endif
986 endif
987 else
988 ifneq ($(OSNAME), AIX)
989 FCOMMON_OPT += -m32
990 endif
991 endif
992 endif
993 ifeq ($(USE_OPENMP), 1)
994 FCOMMON_OPT += -fopenmp
995 endif
996 endif
997
998 ifeq ($(F_COMPILER), INTEL)
999 CCOMMON_OPT += -DF_INTERFACE_INTEL
1000 ifdef INTERFACE64
1001 ifneq ($(INTERFACE64), 0)
1002 FCOMMON_OPT += -i8
1003 endif
1004 endif
1005 FCOMMON_OPT += -recursive -fp-model strict -assume protect-parens
1006 ifeq ($(USE_OPENMP), 1)
1007 FCOMMON_OPT += -fopenmp
1008 endif
1009 endif
1010
1011 ifeq ($(F_COMPILER), FUJITSU)
1012 CCOMMON_OPT += -DF_INTERFACE_FUJITSU
1013 ifeq ($(USE_OPENMP), 1)
1014 FCOMMON_OPT += -openmp
1015 endif
1016 endif
1017
1018 ifeq ($(F_COMPILER), IBM)
1019 CCOMMON_OPT += -DF_INTERFACE_IBM
1020 # FCOMMON_OPT   += -qarch=440
1021 ifdef BINARY64
1022 FCOMMON_OPT += -q64
1023 ifdef INTERFACE64
1024 ifneq ($(INTERFACE64), 0)
1025 FCOMMON_OPT += -qintsize=8
1026 endif
1027 endif
1028 else
1029 FCOMMON_OPT += -q32
1030 endif
1031 ifeq ($(USE_OPENMP), 1)
1032 FCOMMON_OPT += -openmp
1033 endif
1034 endif
1035
1036 ifeq ($(F_COMPILER), PGI)
1037 CCOMMON_OPT  += -DF_INTERFACE_PGI
1038 COMMON_PROF +=  -DPGICOMPILER
1039 ifdef BINARY64
1040 ifdef INTERFACE64
1041 ifneq ($(INTERFACE64), 0)
1042 FCOMMON_OPT += -i8
1043 endif
1044 endif
1045 ifeq ($(ARCH), x86_64)
1046 FCOMMON_OPT += -tp p7-64
1047 else
1048 ifeq ($(ARCH), power)
1049 ifeq ($(CORE), POWER6)
1050 $(warning NVIDIA HPC compilers do not support POWER6.)
1051 endif
1052 ifeq ($(CORE), POWER8)
1053 FCOMMON_OPT += -tp pwr8
1054 endif
1055 ifeq ($(CORE), POWER9)
1056 FCOMMON_OPT += -tp pwr9
1057 endif
1058 ifeq ($(CORE), POWER10)
1059 $(warning NVIDIA HPC compilers do not support POWER10.)
1060 endif
1061 endif
1062 endif
1063 else
1064 FCOMMON_OPT += -tp p7
1065 endif
1066 FCOMMON_OPT += -Mrecursive -Kieee
1067 ifeq ($(USE_OPENMP), 1)
1068 FCOMMON_OPT += -mp
1069 endif
1070 endif
1071
1072 ifeq ($(F_COMPILER), PATHSCALE)
1073 CCOMMON_OPT  += -DF_INTERFACE_PATHSCALE
1074 ifdef BINARY64
1075 ifdef INTERFACE64
1076 ifneq ($(INTERFACE64), 0)
1077 FCOMMON_OPT += -i8
1078 endif
1079 endif
1080 endif
1081  
1082 ifeq ($(USE_OPENMP), 1)
1083 FCOMMON_OPT += -mp
1084 endif
1085 endif
1086
1087 ifeq ($(F_COMPILER), OPEN64)
1088 CCOMMON_OPT  += -DF_INTERFACE_OPEN64
1089 ifdef BINARY64
1090 ifdef INTERFACE64
1091 ifneq ($(INTERFACE64), 0)
1092 FCOMMON_OPT += -i8
1093 endif
1094 endif
1095 endif
1096
1097 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
1098 ifndef BINARY64
1099 FCOMMON_OPT += -n32
1100 else
1101 FCOMMON_OPT += -n64
1102 endif
1103 ifeq ($(CORE), LOONGSON3R3)
1104 FCOMMON_OPT += -loongson3 -static
1105 endif
1106
1107 ifeq ($(CORE), LOONGSON3R4)
1108 FCOMMON_OPT += -loongson3 -static
1109 endif
1110
1111 else
1112 ifndef BINARY64
1113 FCOMMON_OPT += -m32
1114 else
1115 FCOMMON_OPT += -m64
1116 endif
1117 endif
1118
1119 ifeq ($(USE_OPENMP), 1)
1120 FEXTRALIB   += -lstdc++
1121 FCOMMON_OPT += -mp
1122 endif
1123 endif
1124
1125 ifeq ($(C_COMPILER), OPEN64)
1126
1127 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
1128 ifndef BINARY64
1129 CCOMMON_OPT += -n32
1130 else
1131 CCOMMON_OPT += -n64
1132 endif
1133 ifeq ($(CORE), LOONGSON3R3)
1134 CCOMMON_OPT += -loongson3 -static
1135 endif
1136
1137 ifeq ($(CORE), LOONGSON3R4)
1138 CCOMMON_OPT += -loongson3 -static
1139 endif
1140
1141 else
1142
1143 ifndef BINARY64
1144 CCOMMON_OPT += -m32
1145 else
1146 CCOMMON_OPT += -m64
1147 endif
1148 endif
1149 endif
1150
1151 ifeq ($(C_COMPILER), SUN)
1152 CCOMMON_OPT  += -w
1153 ifeq ($(ARCH), x86)
1154 CCOMMON_OPT  += -m32
1155 else
1156 ifdef BINARY64
1157 CCOMMON_OPT  += -m64
1158 else
1159 CCOMMON_OPT  += -m32
1160 endif
1161 endif
1162 endif
1163
1164 ifeq ($(F_COMPILER), SUN)
1165 CCOMMON_OPT  += -DF_INTERFACE_SUN
1166 FCOMMON_OPT  += -ftrap=%none -xrecursive
1167 ifeq ($(ARCH), x86)
1168 FCOMMON_OPT  += -m32
1169 else
1170 ifdef BINARY64
1171 FCOMMON_OPT  += -m64
1172 else
1173 FCOMMON_OPT  += -m32
1174 endif
1175 endif
1176 ifeq ($(USE_OPENMP), 1)
1177 FCOMMON_OPT += -xopenmp=parallel
1178 endif
1179 endif
1180
1181 ifeq ($(F_COMPILER), COMPAQ)
1182 CCOMMON_OPT  += -DF_INTERFACE_COMPAQ
1183 ifeq ($(USE_OPENMP), 1)
1184 FCOMMON_OPT += -openmp
1185 endif
1186 endif
1187
1188 ifdef BINARY64
1189 ifdef INTERFACE64
1190 ifneq ($(INTERFACE64), 0)
1191 CCOMMON_OPT     +=
1192 #-DUSE64BITINT
1193 endif
1194 endif
1195 endif
1196
1197 ifeq ($(NEED_PIC), 1)
1198 ifeq ($(C_COMPILER), IBM)
1199 CCOMMON_OPT += -qpic=large
1200 else
1201 CCOMMON_OPT += -fPIC
1202 endif
1203 ifeq ($(F_COMPILER), SUN)
1204 FCOMMON_OPT  += -pic
1205 else
1206 FCOMMON_OPT += -fPIC
1207 endif
1208 endif
1209
1210 ifeq ($(DYNAMIC_ARCH), 1)
1211 CCOMMON_OPT     += -DDYNAMIC_ARCH
1212 endif
1213
1214 ifeq ($(DYNAMIC_OLDER), 1)
1215 CCOMMON_OPT     += -DDYNAMIC_OLDER
1216 endif
1217
1218 ifeq ($(NO_LAPACK), 1)
1219 CCOMMON_OPT     += -DNO_LAPACK
1220 #Disable LAPACK C interface
1221 NO_LAPACKE = 1
1222 endif
1223
1224 ifeq ($(NO_LAPACKE), 1)
1225 CCOMMON_OPT     += -DNO_LAPACKE
1226 endif
1227
1228 ifeq ($(NO_AVX), 1)
1229 CCOMMON_OPT     += -DNO_AVX
1230 endif
1231
1232 ifeq ($(ARCH), x86)
1233 CCOMMON_OPT     += -DNO_AVX
1234 endif
1235
1236 ifeq ($(NO_AVX2), 1)
1237 CCOMMON_OPT     += -DNO_AVX2
1238 endif
1239
1240 ifeq ($(NO_AVX512), 1)
1241 CCOMMON_OPT     += -DNO_AVX512
1242 endif
1243
1244 ifdef SMP
1245 CCOMMON_OPT     += -DSMP_SERVER
1246
1247 ifeq ($(ARCH), mips64)
1248 USE_SIMPLE_THREADED_LEVEL3 = 1
1249 endif
1250
1251 ifeq ($(USE_OPENMP), 1)
1252 # USE_SIMPLE_THREADED_LEVEL3 = 1
1253 # NO_AFFINITY = 1
1254 CCOMMON_OPT     += -DUSE_OPENMP
1255 endif
1256
1257 ifeq ($(BIGNUMA), 1)
1258 CCOMMON_OPT     += -DBIGNUMA
1259 endif
1260
1261 endif
1262
1263 ifeq ($(NO_WARMUP), 1)
1264 CCOMMON_OPT     += -DNO_WARMUP
1265 endif
1266
1267 ifeq ($(CONSISTENT_FPCSR), 1)
1268 CCOMMON_OPT     += -DCONSISTENT_FPCSR
1269 endif
1270
1271 # Only for development
1272 # CCOMMON_OPT    += -DPARAMTEST
1273 # CCOMMON_OPT    += -DPREFETCHTEST
1274 # CCOMMON_OPT    += -DNO_SWITCHING
1275 # USE_PAPI = 1
1276
1277 ifdef USE_PAPI
1278 CCOMMON_OPT      += -DUSE_PAPI
1279 EXTRALIB         += -lpapi -lperfctr
1280 endif
1281
1282 ifdef BUFFERSIZE
1283 CCOMMON_OPT      += -DBUFFERSIZE=$(BUFFERSIZE)
1284 endif
1285
1286 ifdef DYNAMIC_THREADS
1287 CCOMMON_OPT      += -DDYNAMIC_THREADS
1288 endif
1289
1290 CCOMMON_OPT     += -DMAX_CPU_NUMBER=$(NUM_THREADS)
1291
1292 CCOMMON_OPT     += -DMAX_PARALLEL_NUMBER=$(NUM_PARALLEL)
1293
1294 ifdef USE_SIMPLE_THREADED_LEVEL3
1295 CCOMMON_OPT     += -DUSE_SIMPLE_THREADED_LEVEL3
1296 endif
1297
1298 ifeq ($(USE_TLS), 1)
1299 CCOMMON_OPT += -DUSE_TLS
1300 endif
1301
1302 ifeq ($(BUILD_BFLOAT16), 1)
1303 CCOMMON_OPT += -DBUILD_BFLOAT16
1304 endif
1305 ifeq ($(BUILD_SINGLE), 1)
1306 CCOMMON_OPT += -DBUILD_SINGLE=1
1307 endif
1308 ifeq ($(BUILD_DOUBLE), 1)
1309 CCOMMON_OPT += -DBUILD_DOUBLE=1
1310 endif
1311 ifeq ($(BUILD_COMPLEX), 1)
1312 CCOMMON_OPT += -DBUILD_COMPLEX=1
1313 endif
1314 ifeq ($(BUILD_COMPLEX16), 1)
1315 CCOMMON_OPT += -DBUILD_COMPLEX16=1
1316 endif
1317
1318 CCOMMON_OPT += -DVERSION=\"$(VERSION)\"
1319
1320 ifndef SYMBOLPREFIX
1321 SYMBOLPREFIX =
1322 endif
1323
1324 ifndef SYMBOLSUFFIX
1325 SYMBOLSUFFIX =
1326 endif
1327
1328 ifndef LIBSONAMEBASE
1329 LIBSONAMEBASE = openblas
1330 endif
1331
1332 ifndef LIBNAMESUFFIX
1333 LIBNAMEBASE = $(SYMBOLPREFIX)$(LIBSONAMEBASE)$(SYMBOLSUFFIX)
1334 else
1335 LIBNAMEBASE = $(SYMBOLPREFIX)$(LIBSONAMEBASE)$(SYMBOLSUFFIX)_$(LIBNAMESUFFIX)
1336 endif
1337
1338 ifeq ($(OSNAME), CYGWIN_NT)
1339 LIBPREFIX = cyg$(LIBNAMEBASE)
1340 else
1341 LIBPREFIX = lib$(LIBNAMEBASE)
1342 endif
1343
1344 KERNELDIR       = $(TOPDIR)/kernel/$(ARCH)
1345
1346 include $(TOPDIR)/Makefile.$(ARCH)
1347
1348 ifneq ($(C_COMPILER), PGI)
1349 ifneq ($(C_COMPILER), SUN)
1350 CCOMMON_OPT     += -UASMNAME -UASMFNAME -UNAME -UCNAME -UCHAR_NAME -UCHAR_CNAME
1351 endif
1352 endif
1353 CCOMMON_OPT     += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
1354
1355 ifeq ($(CORE), PPC440)
1356 CCOMMON_OPT     += -DALLOC_QALLOC
1357 endif
1358
1359 ifeq ($(CORE), PPC440FP2)
1360 STATIC_ALLOCATION = 1
1361 endif
1362
1363 ifneq ($(OSNAME), Linux)
1364 NO_AFFINITY = 1
1365 endif
1366
1367 ifneq ($(ARCH), x86_64)
1368 ifneq ($(ARCH), x86)
1369 NO_AFFINITY = 1
1370 endif
1371 endif
1372
1373 ifdef NO_AFFINITY
1374 ifeq ($(NO_AFFINITY), 0)
1375 override undefine NO_AFFINITY
1376 else
1377 CCOMMON_OPT     += -DNO_AFFINITY
1378 endif
1379 endif
1380
1381 ifdef FUNCTION_PROFILE
1382 CCOMMON_OPT     += -DFUNCTION_PROFILE
1383 endif
1384
1385 ifdef HUGETLB_ALLOCATION
1386 CCOMMON_OPT     += -DALLOC_HUGETLB
1387 endif
1388
1389 ifdef HUGETLBFILE_ALLOCATION
1390 CCOMMON_OPT     += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
1391 endif
1392
1393 ifdef STATIC_ALLOCATION
1394 CCOMMON_OPT     += -DALLOC_STATIC
1395 endif
1396
1397 ifdef DEVICEDRIVER_ALLOCATION
1398 CCOMMON_OPT     += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
1399 endif
1400
1401 ifdef MIXED_MEMORY_ALLOCATION
1402 CCOMMON_OPT     += -DMIXED_MEMORY_ALLOCATION
1403 endif
1404
1405 ifeq ($(OSNAME), SunOS)
1406 TAR     = gtar
1407 PATCH   = gpatch
1408 GREP    = ggrep
1409 AWK     = nawk
1410 else
1411 TAR     = tar
1412 PATCH   = patch
1413 GREP    = grep
1414 AWK     = awk
1415 endif
1416
1417 ifndef MD5SUM
1418 MD5SUM  = md5sum
1419 endif
1420
1421
1422 REVISION = -r$(VERSION)
1423 MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
1424
1425 ifeq ($(DEBUG), 1)
1426 COMMON_OPT += -g
1427 endif
1428
1429 ifeq ($(DEBUG), 1)
1430 FCOMMON_OPT += -g
1431 endif
1432
1433 ifndef COMMON_OPT
1434 COMMON_OPT = -O2
1435 endif
1436
1437 ifndef FCOMMON_OPT
1438 FCOMMON_OPT = -O2 -frecursive
1439 endif
1440
1441 override CFLAGS     += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
1442 override PFLAGS     += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
1443 override FFLAGS     += $(COMMON_OPT) $(FCOMMON_OPT)
1444 override FPFLAGS    += $(FCOMMON_OPT) $(COMMON_PROF)
1445 #MAKEOVERRIDES =
1446
1447 ifdef NEED_PIC
1448 ifeq (,$(findstring PIC,$(FFLAGS)))
1449 override FFLAGS += -fPIC
1450 endif
1451 endif
1452
1453 #For LAPACK Fortran codes.
1454 #Disable -fopenmp for LAPACK Fortran codes on Windows.
1455 ifdef OS_WINDOWS
1456 LAPACK_FFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FFLAGS))
1457 LAPACK_FPFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FPFLAGS))
1458 else
1459 LAPACK_FFLAGS := $(FFLAGS)
1460 LAPACK_FPFLAGS := $(FPFLAGS)
1461 endif
1462
1463 LAPACK_CFLAGS = $(CFLAGS)
1464 LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
1465 ifdef INTERFACE64
1466 ifneq ($(INTERFACE64), 0)
1467 LAPACK_CFLAGS +=  -DLAPACK_ILP64
1468 endif
1469 endif
1470
1471 ifdef OS_WINDOWS
1472 LAPACK_CFLAGS +=  -DOPENBLAS_OS_WINDOWS
1473 endif
1474 ifeq ($(C_COMPILER), LSB)
1475 LAPACK_CFLAGS +=  -DLAPACK_COMPLEX_STRUCTURE
1476 endif
1477
1478 ifndef SUFFIX
1479 SUFFIX  = o
1480 endif
1481
1482 ifndef PSUFFIX
1483 PSUFFIX = po
1484 endif
1485
1486 ifndef LIBSUFFIX
1487 LIBSUFFIX = a
1488 endif
1489
1490 ifneq ($(DYNAMIC_ARCH), 1)
1491 ifndef SMP
1492 LIBNAME         = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
1493 LIBNAME_P       = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
1494 else
1495 LIBNAME         = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
1496 LIBNAME_P       = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
1497 endif
1498 else
1499 ifndef SMP
1500 LIBNAME         = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
1501 LIBNAME_P       = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
1502 else
1503 LIBNAME         = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
1504 LIBNAME_P       = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
1505 endif
1506 endif
1507
1508
1509 LIBDLLNAME   = $(LIBPREFIX).dll
1510 IMPLIBNAME   = lib$(LIBNAMEBASE).dll.a
1511 ifneq ($(OSNAME), AIX)
1512 LIBSONAME    = $(LIBNAME:.$(LIBSUFFIX)=.so)
1513 else
1514 LIBSONAME    = $(LIBNAME:.$(LIBSUFFIX)=.a)
1515 endif
1516 LIBDYNNAME   = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
1517 LIBDEFNAME   = $(LIBNAME:.$(LIBSUFFIX)=.def)
1518 LIBEXPNAME   = $(LIBNAME:.$(LIBSUFFIX)=.exp)
1519 LIBZIPNAME   = $(LIBNAME:.$(LIBSUFFIX)=.zip)
1520
1521 LIBS            = $(TOPDIR)/$(LIBNAME)
1522 LIBS_P          = $(TOPDIR)/$(LIBNAME_P)
1523
1524
1525 LIB_COMPONENTS = BLAS
1526 ifneq ($(NO_CBLAS), 1)
1527 LIB_COMPONENTS += CBLAS
1528 endif
1529
1530 ifneq ($(NO_LAPACK), 1)
1531 LIB_COMPONENTS += LAPACK
1532 ifneq ($(NO_LAPACKE), 1)
1533 LIB_COMPONENTS += LAPACKE
1534 endif
1535 ifeq ($(BUILD_RELAPACK), 1)
1536 LIB_COMPONENTS += ReLAPACK
1537 endif
1538 endif
1539
1540 ifeq ($(ONLY_CBLAS), 1)
1541 LIB_COMPONENTS = CBLAS
1542 endif
1543
1544 export OSNAME
1545 export ARCH
1546 export CORE
1547 export LIBCORE
1548 export __BYTE_ORDER__
1549 export ELF_VERSION
1550 export PGCPATH
1551 export CONFIG
1552 export CC
1553 export FC
1554 export BU
1555 export FU
1556 export NEED2UNDERSCORES
1557 export USE_THREAD
1558 export NUM_THREADS
1559 export NUM_CORES
1560 export SMP
1561 export MAKEFILE_RULE
1562 export NEED_PIC
1563 export BINARY
1564 export BINARY32
1565 export BINARY64
1566 export F_COMPILER
1567 export C_COMPILER
1568 export USE_OPENMP
1569 export CROSS
1570 export CROSS_SUFFIX
1571 export NOFORTRAN
1572 export NO_FBLAS
1573 export EXTRALIB
1574 export CEXTRALIB
1575 export FEXTRALIB
1576 export HAVE_SSE
1577 export HAVE_SSE2
1578 export HAVE_SSE3
1579 export HAVE_SSSE3
1580 export HAVE_SSE4_1
1581 export HAVE_SSE4_2
1582 export HAVE_SSE4A
1583 export HAVE_SSE5
1584 export HAVE_AVX
1585 export HAVE_AVX2
1586 export HAVE_FMA3
1587 export HAVE_VFP
1588 export HAVE_VFPV3
1589 export HAVE_VFPV4
1590 export HAVE_NEON
1591 export HAVE_MSA
1592 export MSA_FLAGS
1593 export KERNELDIR
1594 export FUNCTION_PROFILE
1595 export TARGET_CORE
1596 export NO_AVX512
1597 export NO_AVX2
1598 export BUILD_BFLOAT16
1599
1600 export SBGEMM_UNROLL_M
1601 export SBGEMM_UNROLL_N
1602 export SGEMM_UNROLL_M
1603 export SGEMM_UNROLL_N
1604 export DGEMM_UNROLL_M
1605 export DGEMM_UNROLL_N
1606 export QGEMM_UNROLL_M
1607 export QGEMM_UNROLL_N
1608 export CGEMM_UNROLL_M
1609 export CGEMM_UNROLL_N
1610 export ZGEMM_UNROLL_M
1611 export ZGEMM_UNROLL_N
1612 export XGEMM_UNROLL_M
1613 export XGEMM_UNROLL_N
1614 export CGEMM3M_UNROLL_M
1615 export CGEMM3M_UNROLL_N
1616 export ZGEMM3M_UNROLL_M
1617 export ZGEMM3M_UNROLL_N
1618 export XGEMM3M_UNROLL_M
1619 export XGEMM3M_UNROLL_N
1620
1621
1622 ifdef USE_CUDA
1623 export CUDADIR
1624 export CUCC
1625 export CUFLAGS
1626 export CULIB
1627 endif
1628
1629 .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
1630
1631 .f.$(SUFFIX):
1632         $(FC) $(FFLAGS) -c $<  -o $(@F)
1633
1634 .f.$(PSUFFIX):
1635         $(FC) $(FPFLAGS) -pg -c $<  -o $(@F)
1636
1637
1638 ifdef BINARY64
1639 PATHSCALEPATH   = /opt/pathscale/lib/3.1
1640 PGIPATH         = /opt/pgi/linux86-64/7.1-5/lib
1641 else
1642 PATHSCALEPATH   = /opt/pathscale/lib/3.1/32
1643 PGIPATH         = /opt/pgi/linux86/7.1-5/lib
1644 endif
1645
1646 ACMLPATH        = /opt/acml/4.3.0
1647 ifneq ($(OSNAME), Darwin)
1648 MKLPATH         = /opt/intel/mkl/10.2.2.025/lib
1649 else
1650 MKLPATH         = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
1651 endif
1652 ATLASPATH       = /opt/atlas/3.9.17/opteron
1653 FLAMEPATH       = $(HOME)/flame/lib
1654 ifneq ($(OSNAME), SunOS)
1655 SUNPATH         = /opt/sunstudio12.1
1656 else
1657 SUNPATH         = /opt/SUNWspro
1658 endif