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