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