Rewrite glibc version check
[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 NETLIB_LAPACK_DIR = $(TOPDIR)/lapack-netlib
13
14 # Default C compiler
15 # - Only set if not specified on the command line or inherited from the environment.
16 # - CC is an implicit variable so neither '?=' or 'ifndef' can be used.
17 #   http://stackoverflow.com/questions/4029274/mingw-and-make-variables
18 # - Default value is 'cc' which is not always a valid command (e.g. MinGW).
19 ifeq ($(origin CC),default)
20
21 # Check if $(CC) refers to a valid command and set the value to gcc if not
22 ifneq ($(findstring cmd.exe,$(SHELL)),)
23 ifeq ($(shell where $(CC) 2>NUL),)
24 CC = gcc
25 endif
26 else # POSIX-ish
27 ifeq ($(shell command -v $(CC) 2>/dev/null),)
28 ifeq ($(shell uname -s),Darwin)
29 CC = clang
30 # EXTRALIB += -Wl,-no_compact_unwind
31 else
32 CC = gcc
33 endif # Darwin
34 endif # CC exists
35 endif # Shell is sane
36
37 endif # CC is set to default
38
39 # Default Fortran compiler (FC) is selected by f_check.
40
41 ifndef MAKEFILE_RULE
42 include $(TOPDIR)/Makefile.rule
43 else
44 include $(TOPDIR)/$(MAKEFILE_RULE)
45 endif
46
47 #
48 #  Beginning of system configuration
49 #
50
51 ifndef HOSTCC
52 HOSTCC   = $(CC)
53 endif
54
55 ifdef TARGET
56 GETARCH_FLAGS := -DFORCE_$(TARGET)
57 endif
58
59 # Force fallbacks for 32bit
60
61 ifeq ($(BINARY), 32)
62 ifeq ($(TARGET), HASWELL)
63 GETARCH_FLAGS := -DFORCE_NEHALEM
64 endif
65 ifeq ($(TARGET), SKYLAKEX)
66 GETARCH_FLAGS := -DFORCE_NEHALEM
67 endif
68 ifeq ($(TARGET), SANDYBRIDGE)
69 GETARCH_FLAGS := -DFORCE_NEHALEM
70 endif
71 ifeq ($(TARGET), BULLDOZER)
72 GETARCH_FLAGS := -DFORCE_BARCELONA
73 endif
74 ifeq ($(TARGET), PILEDRIVER)
75 GETARCH_FLAGS := -DFORCE_BARCELONA
76 endif
77 ifeq ($(TARGET), STEAMROLLER)
78 GETARCH_FLAGS := -DFORCE_BARCELONA
79 endif
80 ifeq ($(TARGET), EXCAVATOR)
81 GETARCH_FLAGS := -DFORCE_BARCELONA
82 endif
83 ifeq ($(TARGET), ZEN)
84 GETARCH_FLAGS := -DFORCE_BARCELONA
85 endif
86 endif
87
88
89 #TARGET_CORE will override TARGET which is used in DYNAMIC_ARCH=1.
90 #
91 ifdef TARGET_CORE
92 GETARCH_FLAGS := -DFORCE_$(TARGET_CORE)
93 endif
94
95 # Force fallbacks for 32bit
96
97 ifeq ($(BINARY), 32)
98 ifeq ($(TARGET_CORE), HASWELL)
99 GETARCH_FLAGS := -DFORCE_NEHALEM
100 endif
101 ifeq ($(TARGET_CORE), SKYLAKEX)
102 GETARCH_FLAGS := -DFORCE_NEHALEM
103 endif
104 ifeq ($(TARGET_CORE), SANDYBRIDGE)
105 GETARCH_FLAGS := -DFORCE_NEHALEM
106 endif
107 ifeq ($(TARGET_CORE), BULLDOZER)
108 GETARCH_FLAGS := -DFORCE_BARCELONA
109 endif
110 ifeq ($(TARGET_CORE), PILEDRIVER)
111 GETARCH_FLAGS := -DFORCE_BARCELONA
112 endif
113 ifeq ($(TARGET_CORE), STEAMROLLER)
114 GETARCH_FLAGS := -DFORCE_BARCELONA
115 endif
116 ifeq ($(TARGET_CORE), EXCAVATOR)
117 GETARCH_FLAGS := -DFORCE_BARCELONA
118 endif
119 ifeq ($(TARGET_CORE), ZEN)
120 GETARCH_FLAGS := -DFORCE_BARCELONA
121 endif
122 endif
123
124
125
126
127 ifdef INTERFACE64
128 ifneq ($(INTERFACE64), 0)
129 GETARCH_FLAGS   += -DUSE64BITINT
130 endif
131 endif
132
133 ifndef GEMM_MULTITHREAD_THRESHOLD
134 GEMM_MULTITHREAD_THRESHOLD=4
135 endif
136 GETARCH_FLAGS   += -DGEMM_MULTITHREAD_THRESHOLD=$(GEMM_MULTITHREAD_THRESHOLD)
137
138 ifeq ($(NO_AVX), 1)
139 GETARCH_FLAGS   += -DNO_AVX
140 endif
141
142 ifeq ($(BINARY), 32)
143 GETARCH_FLAGS   += -DNO_AVX
144 endif
145
146 ifeq ($(NO_AVX2), 1)
147 GETARCH_FLAGS   += -DNO_AVX2
148 endif
149
150 ifeq ($(NO_AVX512), 1)
151 GETARCH_FLAGS   += -DNO_AVX512
152 endif
153
154 ifeq ($(DEBUG), 1)
155 GETARCH_FLAGS   += -g
156 endif
157
158 ifeq ($(QUIET_MAKE), 1)
159 MAKE += -s
160 endif
161
162 ifndef NO_PARALLEL_MAKE
163 NO_PARALLEL_MAKE=0
164 endif
165 GETARCH_FLAGS   += -DNO_PARALLEL_MAKE=$(NO_PARALLEL_MAKE)
166
167 ifdef MAKE_NB_JOBS
168 GETARCH_FLAGS += -DMAKE_NB_JOBS=$(MAKE_NB_JOBS)
169 endif
170
171 ifeq ($(HOSTCC), loongcc)
172 GETARCH_FLAGS  += -static
173 endif
174
175 #if don't use Fortran, it will only compile CBLAS.
176 ifeq ($(ONLY_CBLAS), 1)
177 NO_LAPACK = 1
178 else
179 ONLY_CBLAS = 0
180 endif
181
182 # This operation is expensive, so execution should be once.
183 ifndef GOTOBLAS_MAKEFILE
184 export GOTOBLAS_MAKEFILE = 1
185
186 # Generating Makefile.conf and config.h
187 DUMMY := $(shell $(MAKE) -C $(TOPDIR) -f Makefile.prebuild CC="$(CC)" FC="$(FC)" HOSTCC="$(HOSTCC)" CFLAGS="$(GETARCH_FLAGS)" BINARY=$(BINARY) USE_OPENMP=$(USE_OPENMP) TARGET_CORE=$(TARGET_CORE) ONLY_CBLAS=$(ONLY_CBLAS) TARGET=$(TARGET) all)
188
189 ifndef TARGET_CORE
190 include $(TOPDIR)/Makefile.conf
191 else
192 include $(TOPDIR)/Makefile_kernel.conf
193 endif
194
195 endif
196
197 ifndef NUM_PARALLEL
198 NUM_PARALLEL = 1
199 endif
200
201 ifndef NUM_THREADS
202 NUM_THREADS = $(NUM_CORES)
203 endif
204
205 ifeq ($(NUM_THREADS), 1)
206 override USE_THREAD = 0
207 override USE_OPENMP = 0
208 endif
209
210 ifdef USE_THREAD
211 ifeq ($(USE_THREAD), 0)
212 SMP =
213 else
214 SMP = 1
215 endif
216 else
217 ifeq ($(NUM_THREAD), 1)
218 SMP =
219 else
220 SMP = 1
221 endif
222 endif
223
224 ifndef NEED_PIC
225 NEED_PIC = 1
226 endif
227
228 ARFLAGS =
229 CPP     = $(COMPILER) -E
230 AR      = $(CROSS_SUFFIX)ar
231 AS      = $(CROSS_SUFFIX)as
232 LD      = $(CROSS_SUFFIX)ld
233 RANLIB  = $(CROSS_SUFFIX)ranlib
234 NM      = $(CROSS_SUFFIX)nm
235 DLLWRAP = $(CROSS_SUFFIX)dllwrap
236 OBJCOPY = $(CROSS_SUFFIX)objcopy
237 OBJCONV = $(CROSS_SUFFIX)objconv
238
239
240 # For detect fortran failed, only build BLAS.
241 ifeq ($(NOFORTRAN), 1)
242 NO_LAPACK = 1
243 endif
244
245 #
246 #  OS dependent settings
247 #
248
249 ifeq ($(OSNAME), Darwin)
250 ifndef MACOSX_DEPLOYMENT_TARGET
251 export MACOSX_DEPLOYMENT_TARGET=10.8
252 endif
253 MD5SUM = md5 -r
254 endif
255
256 ifneq (,$(findstring $(OSNAME), FreeBSD OpenBSD DragonFly))
257 MD5SUM = md5 -r
258 endif
259
260 ifeq ($(OSNAME), NetBSD)
261 MD5SUM = md5 -n
262 endif
263
264 ifeq ($(OSNAME), Linux)
265 EXTRALIB        += -lm
266 NO_EXPRECISION = 1
267 endif
268
269 ifeq ($(OSNAME), Android)
270 EXTRALIB        += -lm
271 endif
272
273 ifeq ($(OSNAME), AIX)
274 EXTRALIB        += -lm
275 endif
276
277 ifeq ($(OSNAME), WINNT)
278 NEED_PIC = 0
279 NO_EXPRECISION = 1
280
281 EXTRALIB        += -defaultlib:advapi32
282
283 SUFFIX  = obj
284 PSUFFIX = pobj
285 LIBSUFFIX = a
286
287 ifeq ($(C_COMPILER), CLANG)
288 CCOMMON_OPT     += -DMS_ABI
289 endif
290
291 ifeq ($(C_COMPILER), GCC)
292 #Test for supporting MS_ABI
293 GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
294 GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4)
295 GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 7)
296 ifeq ($(GCCVERSIONGT4), 1)
297 # GCC Majar version > 4
298 # It is compatible with MSVC ABI.
299 CCOMMON_OPT     += -DMS_ABI
300 endif
301
302 ifeq ($(GCCVERSIONGTEQ4), 1)
303 ifeq ($(GCCMINORVERSIONGTEQ7), 1)
304 # GCC Version >=4.7
305 # It is compatible with MSVC ABI.
306 CCOMMON_OPT     += -DMS_ABI
307 endif
308 endif
309 endif
310
311 # Ensure the correct stack alignment on Win32
312 # http://permalink.gmane.org/gmane.comp.lib.openblas.general/97
313 ifeq ($(ARCH), x86)
314 CCOMMON_OPT += -mincoming-stack-boundary=2
315 FCOMMON_OPT += -mincoming-stack-boundary=2
316 endif
317
318 endif
319
320 ifeq ($(OSNAME), Interix)
321 NEED_PIC = 0
322 NO_EXPRECISION = 1
323
324 INTERIX_TOOL_DIR = /opt/gcc.3.3/i586-pc-interix3/bin
325 endif
326
327 ifeq ($(OSNAME), CYGWIN_NT)
328 NEED_PIC = 0
329 NO_EXPRECISION = 1
330 OS_CYGWIN_NT = 1
331 endif
332
333 ifneq ($(OSNAME), WINNT)
334 ifneq ($(OSNAME), CYGWIN_NT)
335 ifneq ($(OSNAME), Interix)
336 ifneq ($(OSNAME), Android)
337 ifdef SMP
338 EXTRALIB   += -lpthread
339 endif
340 endif
341 endif
342 endif
343 endif
344
345 # ifeq logical or
346 ifeq ($(OSNAME), $(filter $(OSNAME),WINNT CYGWIN_NT Interix))
347 OS_WINDOWS=1
348 endif
349
350 ifdef QUAD_PRECISION
351 CCOMMON_OPT     += -DQUAD_PRECISION
352 NO_EXPRECISION = 1
353 endif
354
355 ifneq ($(ARCH), x86)
356 ifneq ($(ARCH), x86_64)
357 NO_EXPRECISION = 1
358 endif
359 endif
360
361 ifdef UTEST_CHECK
362 CCOMMON_OPT     += -DUTEST_CHECK
363 SANITY_CHECK = 1
364 endif
365
366 ifdef SANITY_CHECK
367 CCOMMON_OPT     += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU)
368 endif
369
370 MAX_STACK_ALLOC ?= 2048
371 ifneq ($(MAX_STACK_ALLOC), 0)
372 CCOMMON_OPT     += -DMAX_STACK_ALLOC=$(MAX_STACK_ALLOC)
373 endif
374
375 #
376 #  Architecture dependent settings
377 #
378
379 ifeq ($(ARCH), x86)
380 ifndef BINARY
381 NO_BINARY_MODE  = 1
382 endif
383
384 ifeq ($(CORE), generic)
385 NO_EXPRECISION = 1
386 endif
387
388 ifndef NO_EXPRECISION
389 ifeq ($(F_COMPILER), GFORTRAN)
390 # ifeq logical or. GCC or LSB
391 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
392 EXPRECISION     = 1
393 CCOMMON_OPT     += -DEXPRECISION -m128bit-long-double
394 FCOMMON_OPT     += -m128bit-long-double
395 endif
396 ifeq ($(C_COMPILER), CLANG)
397 EXPRECISION     = 1
398 CCOMMON_OPT     += -DEXPRECISION
399 FCOMMON_OPT     += -m128bit-long-double
400 endif
401 endif
402 endif
403 endif
404
405 ifeq ($(ARCH), x86_64)
406
407 ifeq ($(CORE), generic)
408 NO_EXPRECISION = 1
409 endif
410
411 ifndef NO_EXPRECISION
412 ifeq ($(F_COMPILER), GFORTRAN)
413 # ifeq logical or. GCC or LSB
414 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
415 EXPRECISION     = 1
416 CCOMMON_OPT     += -DEXPRECISION -m128bit-long-double
417 FCOMMON_OPT     += -m128bit-long-double
418 endif
419 ifeq ($(C_COMPILER), CLANG)
420 EXPRECISION     = 1
421 CCOMMON_OPT     += -DEXPRECISION
422 FCOMMON_OPT     += -m128bit-long-double
423 endif
424 endif
425 endif
426 endif
427
428 ifeq ($(C_COMPILER), INTEL)
429 CCOMMON_OPT    += -wd981
430 endif
431
432
433 ifeq ($(USE_OPENMP), 1)
434
435 #check
436 ifeq ($(USE_THREAD), 0)
437 $(error OpenBLAS: Cannot set both USE_OPENMP=1 and USE_THREAD=0. The USE_THREAD=0 is only for building single thread version.)
438 endif
439
440 # ifeq logical or. GCC or LSB
441 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
442 CCOMMON_OPT    += -fopenmp
443 endif
444
445 ifeq ($(C_COMPILER), CLANG)
446 CCOMMON_OPT    += -fopenmp
447 endif
448
449 ifeq ($(C_COMPILER), INTEL)
450 CCOMMON_OPT    += -fopenmp
451 endif
452
453 ifeq ($(C_COMPILER), PGI)
454 CCOMMON_OPT    += -mp
455 endif
456
457 ifeq ($(C_COMPILER), OPEN64)
458 CCOMMON_OPT    += -mp
459 CEXTRALIB   += -lstdc++
460 endif
461
462 ifeq ($(C_COMPILER), PATHSCALE)
463 CCOMMON_OPT    += -mp
464 endif
465 endif
466
467
468 ifeq ($(DYNAMIC_ARCH), 1)
469 ifeq ($(ARCH), x86)
470 DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \
471                CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
472 endif
473
474 ifeq ($(ARCH), x86_64)
475 DYNAMIC_CORE = PRESCOTT CORE2 
476 ifeq ($(DYNAMIC_OLDER), 1)
477 DYNAMIC_CORE += PENRYN DUNNINGTON 
478 endif
479 DYNAMIC_CORE += NEHALEM 
480 ifeq ($(DYNAMIC_OLDER), 1)
481 DYNAMIC_CORE += OPTERON OPTERON_SSE3 
482 endif
483 DYNAMIC_CORE += BARCELONA 
484 ifeq ($(DYNAMIC_OLDER), 1)
485 DYNAMIC_CORE += BOBCAT ATOM NANO
486 endif
487 ifneq ($(NO_AVX), 1)
488 DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER STEAMROLLER EXCAVATOR
489 endif
490 ifneq ($(NO_AVX2), 1)
491 DYNAMIC_CORE += HASWELL ZEN
492 endif
493 ifneq ($(NO_AVX512), 1)
494 ifneq ($(NO_AVX2), 1)
495 DYNAMIC_CORE += SKYLAKEX
496 endif
497 endif
498 endif
499
500 ifdef DYNAMIC_LIST
501 override DYNAMIC_CORE = PRESCOTT $(DYNAMIC_LIST)
502 XCCOMMON_OPT = -DDYNAMIC_LIST -DDYN_PRESCOTT
503 XCCOMMON_OPT += $(foreach dcore,$(DYNAMIC_LIST),-DDYN_$(dcore))
504 CCOMMON_OPT += $(XCCOMMON_OPT)
505 #CCOMMON_OPT    += -DDYNAMIC_LIST='$(DYNAMIC_LIST)'
506 endif
507
508 # If DYNAMIC_CORE is not set, DYNAMIC_ARCH cannot do anything, so force it to empty
509 ifndef DYNAMIC_CORE
510 override DYNAMIC_ARCH=
511 endif
512 endif
513
514 ifeq ($(ARCH), ia64)
515 NO_BINARY_MODE  = 1
516 BINARY_DEFINED  = 1
517
518 ifeq ($(F_COMPILER), GFORTRAN)
519 ifeq ($(C_COMPILER), GCC)
520 # EXPRECISION   = 1
521 # CCOMMON_OPT   += -DEXPRECISION
522 endif
523 endif
524 endif
525
526 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
527 NO_BINARY_MODE  = 1
528 endif
529
530 ifeq ($(ARCH), alpha)
531 NO_BINARY_MODE  = 1
532 BINARY_DEFINED  = 1
533 endif
534
535 ifeq ($(ARCH), arm)
536 NO_BINARY_MODE  = 1
537 BINARY_DEFINED  = 1
538
539 CCOMMON_OPT += -marm
540 FCOMMON_OPT += -marm
541
542 # If softfp abi is mentioned on the command line, force it.
543 ifeq ($(ARM_SOFTFP_ABI), 1)
544 CCOMMON_OPT += -mfloat-abi=softfp
545 FCOMMON_OPT += -mfloat-abi=softfp
546 endif
547
548 ifeq ($(OSNAME), Android)
549 ifeq ($(ARM_SOFTFP_ABI), 1)
550 EXTRALIB        += -lm
551 else
552 EXTRALIB        += -Wl,-lm_hard
553 endif
554 endif
555 endif
556
557 ifeq ($(ARCH), arm64)
558 NO_BINARY_MODE  = 1
559 BINARY_DEFINED  = 1
560 endif
561
562
563
564
565 #
566 #  C Compiler dependent settings
567 #
568
569
570 # ifeq logical or. GCC or CLANG or LSB
571 # http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
572 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG LSB))
573 CCOMMON_OPT += -Wall
574 COMMON_PROF += -fno-inline
575 NO_UNINITIALIZED_WARN =  -Wno-uninitialized
576
577 ifeq ($(QUIET_MAKE), 1)
578 CCOMMON_OPT += $(NO_UNINITIALIZED_WARN) -Wno-unused
579 endif
580
581 ifdef NO_BINARY_MODE
582
583 ifeq ($(ARCH), $(filter $(ARCH),mips64))
584 ifdef BINARY64
585 CCOMMON_OPT += -mabi=64
586 else
587 CCOMMON_OPT += -mabi=n32
588 endif
589 BINARY_DEFINED = 1
590 else ifeq ($(ARCH), $(filter $(ARCH),mips))
591 CCOMMON_OPT += -mabi=32
592 BINARY_DEFINED = 1
593 endif
594
595 ifeq ($(CORE), LOONGSON3A)
596 CCOMMON_OPT += -march=mips64
597 FCOMMON_OPT += -march=mips64
598 endif
599
600 ifeq ($(CORE), LOONGSON3B)
601 CCOMMON_OPT += -march=mips64
602 FCOMMON_OPT += -march=mips64
603 endif
604
605 ifeq ($(CORE), 1004K)
606 CCOMMON_OPT += -mips32r2   $(MSA_FLAGS)
607 FCOMMON_OPT += -mips32r2   $(MSA_FLAGS)
608 endif
609
610 ifeq ($(CORE), P5600)
611 CCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600  $(MSA_FLAGS)
612 FCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600  $(MSA_FLAGS)
613 endif
614
615 ifeq ($(CORE), I6400)
616 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
617 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
618 endif
619
620 ifeq ($(CORE), P6600)
621 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
622 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
623 endif
624
625 ifeq ($(CORE), I6500)
626 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
627 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
628 endif
629
630 ifeq ($(OSNAME), AIX)
631 BINARY_DEFINED = 1
632 endif
633
634 endif
635
636 ifndef BINARY_DEFINED
637 ifneq ($(OSNAME), AIX)
638 ifdef BINARY64
639 CCOMMON_OPT += -m64
640 else
641 CCOMMON_OPT += -m32
642 endif
643 endif
644 endif
645
646 endif
647
648 ifeq ($(C_COMPILER), PGI)
649 ifdef BINARY64
650 CCOMMON_OPT += -tp p7-64
651 else
652 CCOMMON_OPT += -tp p7
653 endif
654 endif
655
656 ifeq ($(C_COMPILER), PATHSCALE)
657 ifdef BINARY64
658 CCOMMON_OPT += -m64
659 else
660 CCOMMON_OPT += -m32
661 endif
662 endif
663
664 #
665 #  Fortran Compiler dependent settings
666 #
667
668 ifeq ($(F_COMPILER), FLANG)
669 CCOMMON_OPT += -DF_INTERFACE_FLANG
670 ifdef BINARY64
671 ifdef INTERFACE64
672 ifneq ($(INTERFACE64), 0)
673 FCOMMON_OPT += -i8
674 endif
675 endif
676 FCOMMON_OPT += -Wall
677 else
678 FCOMMON_OPT += -Wall
679 endif
680 ifeq ($(USE_OPENMP), 1)
681 FCOMMON_OPT += -fopenmp
682 endif
683 endif
684
685 ifeq ($(F_COMPILER), G77)
686 CCOMMON_OPT += -DF_INTERFACE_G77
687 FCOMMON_OPT += -Wall
688 ifndef NO_BINARY_MODE
689 ifneq ($(OSNAME), AIX)
690 ifdef BINARY64
691 FCOMMON_OPT += -m64
692 else
693 FCOMMON_OPT += -m32
694 endif
695 endif
696 endif
697 endif
698
699 ifeq ($(F_COMPILER), G95)
700 CCOMMON_OPT += -DF_INTERFACE_G95
701 FCOMMON_OPT += -Wall
702 ifneq ($(OSNAME), AIX)
703 ifndef NO_BINARY_MODE
704 ifdef BINARY64
705 FCOMMON_OPT += -m64
706 else
707 FCOMMON_OPT += -m32
708 endif
709 endif
710 endif
711 endif
712
713 ifeq ($(F_COMPILER), GFORTRAN)
714 CCOMMON_OPT += -DF_INTERFACE_GFORT
715 FCOMMON_OPT += -Wall
716 #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
717 ifneq ($(NO_LAPACK), 1)
718 EXTRALIB += -lgfortran
719 endif
720 ifdef NO_BINARY_MODE
721 ifeq ($(ARCH), $(filter $(ARCH),mips64))
722 ifdef BINARY64
723 FCOMMON_OPT += -mabi=64
724 else
725 FCOMMON_OPT += -mabi=n32
726 endif
727 else ifeq ($(ARCH), $(filter $(ARCH),mips))
728 FCOMMON_OPT += -mabi=32
729 endif
730 else
731 ifdef BINARY64
732 ifneq ($(OSNAME), AIX)
733 FCOMMON_OPT += -m64
734 endif
735 ifdef INTERFACE64
736 ifneq ($(INTERFACE64), 0)
737 FCOMMON_OPT +=  -fdefault-integer-8
738 endif
739 endif
740 else
741 ifneq ($(OSNAME), AIX)
742 FCOMMON_OPT += -m32
743 endif
744 endif
745 endif
746 ifeq ($(USE_OPENMP), 1)
747 FCOMMON_OPT += -fopenmp
748 endif
749 endif
750
751 ifeq ($(F_COMPILER), INTEL)
752 CCOMMON_OPT += -DF_INTERFACE_INTEL
753 ifdef INTERFACE64
754 ifneq ($(INTERFACE64), 0)
755 FCOMMON_OPT += -i8
756 endif
757 endif
758 ifeq ($(USE_OPENMP), 1)
759 FCOMMON_OPT += -fopenmp
760 endif
761 endif
762
763 ifeq ($(F_COMPILER), FUJITSU)
764 CCOMMON_OPT += -DF_INTERFACE_FUJITSU
765 ifeq ($(USE_OPENMP), 1)
766 FCOMMON_OPT += -openmp
767 endif
768 endif
769
770 ifeq ($(F_COMPILER), IBM)
771 CCOMMON_OPT += -DF_INTERFACE_IBM
772 # FCOMMON_OPT   += -qarch=440
773 ifdef BINARY64
774 FCOMMON_OPT += -q64
775 ifdef INTERFACE64
776 ifneq ($(INTERFACE64), 0)
777 FCOMMON_OPT += -qintsize=8
778 endif
779 endif
780 else
781 FCOMMON_OPT += -q32
782 endif
783 ifeq ($(USE_OPENMP), 1)
784 FCOMMON_OPT += -openmp
785 endif
786 endif
787
788 ifeq ($(F_COMPILER), PGI)
789 CCOMMON_OPT  += -DF_INTERFACE_PGI
790 COMMON_PROF +=  -DPGICOMPILER
791 ifdef BINARY64
792 ifdef INTERFACE64
793 ifneq ($(INTERFACE64), 0)
794 FCOMMON_OPT += -i8
795 endif
796 endif
797 FCOMMON_OPT += -tp p7-64
798 else
799 FCOMMON_OPT += -tp p7
800 endif
801 ifeq ($(USE_OPENMP), 1)
802 FCOMMON_OPT += -mp
803 endif
804 endif
805
806 ifeq ($(F_COMPILER), PATHSCALE)
807 CCOMMON_OPT  += -DF_INTERFACE_PATHSCALE
808 ifdef BINARY64
809 ifdef INTERFACE64
810 ifneq ($(INTERFACE64), 0)
811 FCOMMON_OPT += -i8
812 endif
813 endif
814 endif
815  
816 ifeq ($(USE_OPENMP), 1)
817 FCOMMON_OPT += -mp
818 endif
819 endif
820
821 ifeq ($(F_COMPILER), OPEN64)
822 CCOMMON_OPT  += -DF_INTERFACE_OPEN64
823 ifdef BINARY64
824 ifdef INTERFACE64
825 ifneq ($(INTERFACE64), 0)
826 FCOMMON_OPT += -i8
827 endif
828 endif
829 endif
830
831 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
832 ifndef BINARY64
833 FCOMMON_OPT += -n32
834 else
835 FCOMMON_OPT += -n64
836 endif
837 ifeq ($(CORE), LOONGSON3A)
838 FCOMMON_OPT += -loongson3 -static
839 endif
840
841 ifeq ($(CORE), LOONGSON3B)
842 FCOMMON_OPT += -loongson3 -static
843 endif
844
845 else
846 ifndef BINARY64
847 FCOMMON_OPT += -m32
848 else
849 FCOMMON_OPT += -m64
850 endif
851 endif
852
853 ifeq ($(USE_OPENMP), 1)
854 FEXTRALIB   += -lstdc++
855 FCOMMON_OPT += -mp
856 endif
857 endif
858
859 ifeq ($(C_COMPILER), OPEN64)
860
861 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
862 ifndef BINARY64
863 CCOMMON_OPT += -n32
864 else
865 CCOMMON_OPT += -n64
866 endif
867 ifeq ($(CORE), LOONGSON3A)
868 CCOMMON_OPT += -loongson3 -static
869 endif
870
871 ifeq ($(CORE), LOONGSON3B)
872 CCOMMON_OPT += -loongson3 -static
873 endif
874
875 else
876
877 ifndef BINARY64
878 CCOMMON_OPT += -m32
879 else
880 CCOMMON_OPT += -m64
881 endif
882 endif
883 endif
884
885 ifeq ($(C_COMPILER), SUN)
886 CCOMMON_OPT  += -w
887 ifeq ($(ARCH), x86)
888 CCOMMON_OPT  += -m32
889 else
890 FCOMMON_OPT  += -m64
891 endif
892 endif
893
894 ifeq ($(F_COMPILER), SUN)
895 CCOMMON_OPT  += -DF_INTERFACE_SUN
896 ifeq ($(ARCH), x86)
897 FCOMMON_OPT  += -m32
898 else
899 FCOMMON_OPT  += -m64
900 endif
901 ifeq ($(USE_OPENMP), 1)
902 FCOMMON_OPT += -xopenmp=parallel
903 endif
904 endif
905
906 ifeq ($(F_COMPILER), COMPAQ)
907 CCOMMON_OPT  += -DF_INTERFACE_COMPAQ
908 ifeq ($(USE_OPENMP), 1)
909 FCOMMON_OPT += -openmp
910 endif
911 endif
912
913 ifdef BINARY64
914 ifdef INTERFACE64
915 ifneq ($(INTERFACE64), 0)
916 CCOMMON_OPT     +=
917 #-DUSE64BITINT
918 endif
919 endif
920 endif
921
922 ifeq ($(NEED_PIC), 1)
923 ifeq ($(C_COMPILER), IBM)
924 CCOMMON_OPT += -qpic=large
925 else
926 CCOMMON_OPT += -fPIC
927 endif
928 ifeq ($(F_COMPILER), SUN)
929 FCOMMON_OPT  += -pic
930 else
931 FCOMMON_OPT += -fPIC
932 endif
933 endif
934
935 ifeq ($(DYNAMIC_ARCH), 1)
936 CCOMMON_OPT     += -DDYNAMIC_ARCH
937 endif
938
939 ifeq ($(DYNAMIC_OLDER), 1)
940 CCOMMON_OPT     += -DDYNAMIC_OLDER
941 endif
942
943 ifeq ($(NO_LAPACK), 1)
944 CCOMMON_OPT     += -DNO_LAPACK
945 #Disable LAPACK C interface
946 NO_LAPACKE = 1
947 endif
948
949 ifeq ($(NO_LAPACKE), 1)
950 CCOMMON_OPT     += -DNO_LAPACKE
951 endif
952
953 ifeq ($(NO_AVX), 1)
954 CCOMMON_OPT     += -DNO_AVX
955 endif
956
957 ifeq ($(ARCH), x86)
958 CCOMMON_OPT     += -DNO_AVX
959 endif
960
961 ifeq ($(NO_AVX2), 1)
962 CCOMMON_OPT     += -DNO_AVX2
963 endif
964
965 ifeq ($(NO_AVX512), 1)
966 CCOMMON_OPT     += -DNO_AVX512
967 endif
968
969 ifdef SMP
970 CCOMMON_OPT     += -DSMP_SERVER
971
972 ifeq ($(ARCH), mips64)
973 ifneq ($(CORE), LOONGSON3B)
974 USE_SIMPLE_THREADED_LEVEL3 = 1
975 endif
976 endif
977
978 ifeq ($(USE_OPENMP), 1)
979 # USE_SIMPLE_THREADED_LEVEL3 = 1
980 # NO_AFFINITY = 1
981 CCOMMON_OPT     += -DUSE_OPENMP
982 endif
983
984 ifeq ($(BIGNUMA), 1)
985 CCOMMON_OPT     += -DBIGNUMA
986 endif
987
988 endif
989
990 ifeq ($(NO_WARMUP), 1)
991 CCOMMON_OPT     += -DNO_WARMUP
992 endif
993
994 ifeq ($(CONSISTENT_FPCSR), 1)
995 CCOMMON_OPT     += -DCONSISTENT_FPCSR
996 endif
997
998 # Only for development
999 # CCOMMON_OPT    += -DPARAMTEST
1000 # CCOMMON_OPT    += -DPREFETCHTEST
1001 # CCOMMON_OPT    += -DNO_SWITCHING
1002 # USE_PAPI = 1
1003
1004 ifdef USE_PAPI
1005 CCOMMON_OPT      += -DUSE_PAPI
1006 EXTRALIB         += -lpapi -lperfctr
1007 endif
1008
1009 ifdef DYNAMIC_THREADS
1010 CCOMMON_OPT      += -DDYNAMIC_THREADS
1011 endif
1012
1013 CCOMMON_OPT     += -DMAX_CPU_NUMBER=$(NUM_THREADS)
1014
1015 CCOMMON_OPT     += -DMAX_PARALLEL_NUMBER=$(NUM_PARALLEL)
1016
1017 ifdef USE_SIMPLE_THREADED_LEVEL3
1018 CCOMMON_OPT     += -DUSE_SIMPLE_THREADED_LEVEL3
1019 endif
1020
1021 ifdef USE_TLS
1022 CCOMMON_OPT += -DUSE_TLS
1023 endif
1024
1025 ifndef SYMBOLPREFIX
1026 SYMBOLPREFIX =
1027 endif
1028
1029 ifndef SYMBOLSUFFIX
1030 SYMBOLSUFFIX =
1031 endif
1032
1033 ifndef LIBNAMESUFFIX
1034 LIBNAMEBASE = $(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)
1035 else
1036 LIBNAMEBASE = $(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)_$(LIBNAMESUFFIX)
1037 endif
1038
1039 ifeq ($(OSNAME), CYGWIN_NT)
1040 LIBPREFIX = cyg$(LIBNAMEBASE)
1041 else
1042 LIBPREFIX = lib$(LIBNAMEBASE)
1043 endif
1044
1045 KERNELDIR       = $(TOPDIR)/kernel/$(ARCH)
1046
1047 include $(TOPDIR)/Makefile.$(ARCH)
1048
1049 CCOMMON_OPT     += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
1050
1051 ifeq ($(CORE), PPC440)
1052 CCOMMON_OPT     += -DALLOC_QALLOC
1053 endif
1054
1055 ifeq ($(CORE), PPC440FP2)
1056 STATIC_ALLOCATION = 1
1057 endif
1058
1059 ifneq ($(OSNAME), Linux)
1060 NO_AFFINITY = 1
1061 endif
1062
1063 ifneq ($(ARCH), x86_64)
1064 ifneq ($(ARCH), x86)
1065 ifneq ($(CORE), LOONGSON3B)
1066 NO_AFFINITY = 1
1067 endif
1068 endif
1069 endif
1070
1071 ifdef NO_AFFINITY
1072 CCOMMON_OPT     += -DNO_AFFINITY
1073 endif
1074
1075 ifdef FUNCTION_PROFILE
1076 CCOMMON_OPT     += -DFUNCTION_PROFILE
1077 endif
1078
1079 ifdef HUGETLB_ALLOCATION
1080 CCOMMON_OPT     += -DALLOC_HUGETLB
1081 endif
1082
1083 ifdef HUGETLBFILE_ALLOCATION
1084 CCOMMON_OPT     += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
1085 endif
1086
1087 ifdef STATIC_ALLOCATION
1088 CCOMMON_OPT     += -DALLOC_STATIC
1089 endif
1090
1091 ifdef DEVICEDRIVER_ALLOCATION
1092 CCOMMON_OPT     += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
1093 endif
1094
1095 ifdef MIXED_MEMORY_ALLOCATION
1096 CCOMMON_OPT     += -DMIXED_MEMORY_ALLOCATION
1097 endif
1098
1099 ifeq ($(OSNAME), SunOS)
1100 TAR     = gtar
1101 PATCH   = gpatch
1102 GREP    = ggrep
1103 AWK     = nawk
1104 else
1105 TAR     = tar
1106 PATCH   = patch
1107 GREP    = grep
1108 AWK     = awk
1109 endif
1110
1111 ifndef MD5SUM
1112 MD5SUM  = md5sum
1113 endif
1114
1115
1116 REVISION = -r$(VERSION)
1117 MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
1118
1119 ifeq ($(DEBUG), 1)
1120 COMMON_OPT += -g
1121 endif
1122
1123 ifeq ($(DEBUG), 1)
1124 FCOMMON_OPT += -g
1125 endif
1126
1127 ifndef COMMON_OPT
1128 COMMON_OPT = -O2
1129 endif
1130
1131 ifndef FCOMMON_OPT
1132 FCOMMON_OPT = -O2 -frecursive
1133 endif
1134
1135
1136
1137 override CFLAGS     += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
1138 override PFLAGS     += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
1139
1140 override FFLAGS     += $(COMMON_OPT) $(FCOMMON_OPT)
1141 override FPFLAGS    += $(FCOMMON_OPT) $(COMMON_PROF)
1142 #MAKEOVERRIDES =
1143
1144 #For LAPACK Fortran codes.
1145 #Disable -fopenmp for LAPACK Fortran codes on Windows.
1146 ifdef OS_WINDOWS
1147 LAPACK_FFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FFLAGS))
1148 LAPACK_FPFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FPFLAGS))
1149 else
1150 LAPACK_FFLAGS := $(FFLAGS)
1151 LAPACK_FPFLAGS := $(FPFLAGS)
1152 endif
1153
1154 LAPACK_CFLAGS = $(CFLAGS)
1155 LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
1156 ifdef INTERFACE64
1157 ifneq ($(INTERFACE64), 0)
1158 LAPACK_CFLAGS +=  -DLAPACK_ILP64
1159 endif
1160 endif
1161
1162 ifdef OS_WINDOWS
1163 LAPACK_CFLAGS +=  -DOPENBLAS_OS_WINDOWS
1164 endif
1165 ifeq ($(C_COMPILER), LSB)
1166 LAPACK_CFLAGS +=  -DLAPACK_COMPLEX_STRUCTURE
1167 endif
1168
1169 ifndef SUFFIX
1170 SUFFIX  = o
1171 endif
1172
1173 ifndef PSUFFIX
1174 PSUFFIX = po
1175 endif
1176
1177 ifndef LIBSUFFIX
1178 LIBSUFFIX = a
1179 endif
1180
1181 ifneq ($(DYNAMIC_ARCH), 1)
1182 ifndef SMP
1183 LIBNAME         = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
1184 LIBNAME_P       = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
1185 else
1186 LIBNAME         = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
1187 LIBNAME_P       = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
1188 endif
1189 else
1190 ifndef SMP
1191 LIBNAME         = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
1192 LIBNAME_P       = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
1193 else
1194 LIBNAME         = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
1195 LIBNAME_P       = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
1196 endif
1197 endif
1198
1199
1200 LIBDLLNAME   = $(LIBPREFIX).dll
1201 IMPLIBNAME   = lib$(LIBNAMEBASE).dll.a
1202 LIBSONAME    = $(LIBNAME:.$(LIBSUFFIX)=.so)
1203 LIBDYNNAME   = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
1204 LIBDEFNAME   = $(LIBNAME:.$(LIBSUFFIX)=.def)
1205 LIBEXPNAME   = $(LIBNAME:.$(LIBSUFFIX)=.exp)
1206 LIBZIPNAME   = $(LIBNAME:.$(LIBSUFFIX)=.zip)
1207
1208 LIBS            = $(TOPDIR)/$(LIBNAME)
1209 LIBS_P          = $(TOPDIR)/$(LIBNAME_P)
1210
1211
1212 LIB_COMPONENTS = BLAS
1213 ifneq ($(NO_CBLAS), 1)
1214 LIB_COMPONENTS += CBLAS
1215 endif
1216
1217 ifneq ($(NO_LAPACK), 1)
1218 LIB_COMPONENTS += LAPACK
1219 ifneq ($(NO_LAPACKE), 1)
1220 LIB_COMPONENTS += LAPACKE
1221 endif
1222 ifeq ($(BUILD_RELAPACK), 1)
1223 LIB_COMPONENTS += ReLAPACK
1224 endif
1225 endif
1226
1227 ifeq ($(ONLY_CBLAS), 1)
1228 LIB_COMPONENTS = CBLAS
1229 endif
1230
1231 export OSNAME
1232 export ARCH
1233 export CORE
1234 export LIBCORE
1235 export PGCPATH
1236 export CONFIG
1237 export CC
1238 export FC
1239 export BU
1240 export FU
1241 export NEED2UNDERSCORES
1242 export USE_THREAD
1243 export NUM_THREADS
1244 export NUM_CORES
1245 export SMP
1246 export MAKEFILE_RULE
1247 export NEED_PIC
1248 export BINARY
1249 export BINARY32
1250 export BINARY64
1251 export F_COMPILER
1252 export C_COMPILER
1253 export USE_OPENMP
1254 export CROSS
1255 export CROSS_SUFFIX
1256 export NOFORTRAN
1257 export NO_FBLAS
1258 export EXTRALIB
1259 export CEXTRALIB
1260 export FEXTRALIB
1261 export HAVE_SSE
1262 export HAVE_SSE2
1263 export HAVE_SSE3
1264 export HAVE_SSSE3
1265 export HAVE_SSE4_1
1266 export HAVE_SSE4_2
1267 export HAVE_SSE4A
1268 export HAVE_SSE5
1269 export HAVE_AVX
1270 export HAVE_VFP
1271 export HAVE_VFPV3
1272 export HAVE_VFPV4
1273 export HAVE_NEON
1274 export HAVE_MSA
1275 export MSA_FLAGS
1276 export KERNELDIR
1277 export FUNCTION_PROFILE
1278 export TARGET_CORE
1279 export NO_AVX512
1280
1281 export SGEMM_UNROLL_M
1282 export SGEMM_UNROLL_N
1283 export DGEMM_UNROLL_M
1284 export DGEMM_UNROLL_N
1285 export QGEMM_UNROLL_M
1286 export QGEMM_UNROLL_N
1287 export CGEMM_UNROLL_M
1288 export CGEMM_UNROLL_N
1289 export ZGEMM_UNROLL_M
1290 export ZGEMM_UNROLL_N
1291 export XGEMM_UNROLL_M
1292 export XGEMM_UNROLL_N
1293 export CGEMM3M_UNROLL_M
1294 export CGEMM3M_UNROLL_N
1295 export ZGEMM3M_UNROLL_M
1296 export ZGEMM3M_UNROLL_N
1297 export XGEMM3M_UNROLL_M
1298 export XGEMM3M_UNROLL_N
1299
1300
1301 ifdef USE_CUDA
1302 export CUDADIR
1303 export CUCC
1304 export CUFLAGS
1305 export CULIB
1306 endif
1307
1308 .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
1309
1310 .f.$(SUFFIX):
1311         $(FC) $(FFLAGS) -c $<  -o $(@F)
1312
1313 .f.$(PSUFFIX):
1314         $(FC) $(FPFLAGS) -pg -c $<  -o $(@F)
1315
1316
1317 ifdef BINARY64
1318 PATHSCALEPATH   = /opt/pathscale/lib/3.1
1319 PGIPATH         = /opt/pgi/linux86-64/7.1-5/lib
1320 else
1321 PATHSCALEPATH   = /opt/pathscale/lib/3.1/32
1322 PGIPATH         = /opt/pgi/linux86/7.1-5/lib
1323 endif
1324
1325 ACMLPATH        = /opt/acml/4.3.0
1326 ifneq ($(OSNAME), Darwin)
1327 MKLPATH         = /opt/intel/mkl/10.2.2.025/lib
1328 else
1329 MKLPATH         = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
1330 endif
1331 ATLASPATH       = /opt/atlas/3.9.17/opteron
1332 FLAMEPATH       = $(HOME)/flame/lib
1333 ifneq ($(OSNAME), SunOS)
1334 SUNPATH         = /opt/sunstudio12.1
1335 else
1336 SUNPATH         = /opt/SUNWspro
1337 endif