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