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