Merge pull request #427 from wernsaar/develop
[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 ifeq ($(USE_OPENMP), 1)
354 # ifeq logical or. GCC or LSB
355 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
356 CCOMMON_OPT    += -fopenmp
357 endif
358
359 ifeq ($(C_COMPILER), CLANG)
360 $(error OpenBLAS: Clang didn't support OpenMP yet.)
361 CCOMMON_OPT    += -fopenmp
362 endif
363
364 ifeq ($(C_COMPILER), INTEL)
365 CCOMMON_OPT    += -openmp
366 endif
367
368 ifeq ($(C_COMPILER), PGI)
369 CCOMMON_OPT    += -mp
370 endif
371
372 ifeq ($(C_COMPILER), OPEN64)
373 CCOMMON_OPT    += -mp
374 CEXTRALIB   += -lstdc++
375 endif
376
377 ifeq ($(C_COMPILER), PATHSCALE)
378 CCOMMON_OPT    += -mp
379 endif
380 endif
381
382
383 ifeq ($(DYNAMIC_ARCH), 1)
384 ifeq ($(ARCH), x86)
385 DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \
386                CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
387 endif
388
389 ifeq ($(ARCH), x86_64)
390 DYNAMIC_CORE = PRESCOTT CORE2 PENRYN DUNNINGTON NEHALEM OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
391 ifneq ($(NO_AVX), 1)
392 DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER
393 endif
394 ifneq ($(NO_AVX2), 1)
395 DYNAMIC_CORE += HASWELL
396 endif
397 endif
398
399 ifndef DYNAMIC_CORE
400 DYNAMIC_ARCH =
401 endif
402 endif
403
404 ifeq ($(ARCH), ia64)
405 NO_BINARY_MODE  = 1
406 BINARY_DEFINED  = 1
407
408 ifeq ($(F_COMPILER), GFORTRAN)
409 ifeq ($(C_COMPILER), GCC)
410 # EXPRECISION   = 1
411 # CCOMMON_OPT   += -DEXPRECISION
412 endif
413 endif
414 endif
415
416 ifeq ($(ARCH), mips64)
417 NO_BINARY_MODE  = 1
418 endif
419
420 ifeq ($(ARCH), alpha)
421 NO_BINARY_MODE  = 1
422 BINARY_DEFINED  = 1
423 endif
424
425 ifeq ($(ARCH), arm)
426 NO_BINARY_MODE  = 1
427 BINARY_DEFINED  = 1
428 endif
429
430 ifeq ($(ARCH), arm64)
431 NO_BINARY_MODE  = 1
432 BINARY_DEFINED  = 1
433 endif
434
435
436
437
438 #
439 #  C Compiler dependent settings
440 #
441
442
443 # ifeq logical or. GCC or CLANG or LSB
444 # http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
445 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG LSB))
446 CCOMMON_OPT += -Wall
447 COMMON_PROF += -fno-inline
448 NO_UNINITIALIZED_WARN =  -Wno-uninitialized
449
450 ifeq ($(QUIET_MAKE), 1)
451 CCOMMON_OPT += $(NO_UNINITIALIZED_WARN) -Wno-unused
452 endif
453
454 ifdef NO_BINARY_MODE
455
456 ifeq ($(ARCH), mips64)
457 ifdef BINARY64
458 CCOMMON_OPT += -mabi=64
459 else
460 CCOMMON_OPT += -mabi=n32
461 endif
462 BINARY_DEFINED = 1
463 endif
464
465 ifeq ($(CORE), LOONGSON3A)
466 CCOMMON_OPT += -march=mips64
467 FCOMMON_OPT += -march=mips64
468 endif
469
470 ifeq ($(CORE), LOONGSON3B)
471 CCOMMON_OPT += -march=mips64
472 FCOMMON_OPT += -march=mips64
473 endif
474
475 ifeq ($(OSNAME), AIX)
476 BINARY_DEFINED = 1
477 endif
478
479 endif
480
481 ifndef BINARY_DEFINED
482 ifdef BINARY64
483 CCOMMON_OPT += -m64
484 else
485 CCOMMON_OPT += -m32
486 endif
487 endif
488
489 endif
490
491 ifeq ($(C_COMPILER), PGI)
492 ifdef BINARY64
493 CCOMMON_OPT += -tp p7-64
494 else
495 CCOMMON_OPT += -tp p7
496 endif
497 endif
498
499 ifeq ($(C_COMPILER), PATHSCALE)
500 ifdef BINARY64
501 CCOMMON_OPT += -m64
502 else
503 CCOMMON_OPT += -m32
504 endif
505 endif
506
507 #
508 #  Fortran Compiler dependent settings
509 #
510
511 ifeq ($(F_COMPILER), G77)
512 CCOMMON_OPT += -DF_INTERFACE_G77
513 FCOMMON_OPT += -Wall
514 ifndef NO_BINARY_MODE
515 ifdef BINARY64
516 FCOMMON_OPT += -m64
517 else
518 FCOMMON_OPT += -m32
519 endif
520 endif
521 endif
522
523 ifeq ($(F_COMPILER), G95)
524 CCOMMON_OPT += -DF_INTERFACE_G95
525 FCOMMON_OPT += -Wall
526 ifndef NO_BINARY_MODE
527 ifdef BINARY64
528 FCOMMON_OPT += -m64
529 else
530 FCOMMON_OPT += -m32
531 endif
532 endif
533 endif
534
535 ifeq ($(F_COMPILER), GFORTRAN)
536 CCOMMON_OPT += -DF_INTERFACE_GFORT
537 FCOMMON_OPT += -Wall
538 #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
539 ifneq ($(NO_LAPACK), 1)
540 EXTRALIB += -lgfortran
541 endif
542 ifdef NO_BINARY_MODE
543 ifeq ($(ARCH), mips64)
544 ifdef BINARY64
545 FCOMMON_OPT += -mabi=64
546 else
547 FCOMMON_OPT += -mabi=n32
548 endif
549 endif
550 else
551 ifdef BINARY64
552 FCOMMON_OPT += -m64
553 ifdef INTERFACE64
554 ifneq ($(INTERFACE64), 0)
555 FCOMMON_OPT +=  -fdefault-integer-8
556 endif
557 endif
558 else
559 FCOMMON_OPT += -m32
560 endif
561 endif
562 ifdef USE_OPENMP
563 FCOMMON_OPT += -fopenmp
564 endif
565 endif
566
567 ifeq ($(F_COMPILER), INTEL)
568 CCOMMON_OPT += -DF_INTERFACE_INTEL
569 ifdef INTERFACE64
570 ifneq ($(INTERFACE64), 0)
571 FCOMMON_OPT += -i8
572 endif
573 endif
574 ifdef USE_OPENMP
575 FCOMMON_OPT += -openmp
576 endif
577 endif
578
579 ifeq ($(F_COMPILER), FUJITSU)
580 CCOMMON_OPT += -DF_INTERFACE_FUJITSU
581 ifdef USE_OPENMP
582 FCOMMON_OPT += -openmp
583 endif
584 endif
585
586 ifeq ($(F_COMPILER), IBM)
587 CCOMMON_OPT += -DF_INTERFACE_IBM
588 # FCOMMON_OPT   += -qarch=440
589 ifdef BINARY64
590 FCOMMON_OPT += -q64
591 ifdef INTERFACE64
592 ifneq ($(INTERFACE64), 0)
593 FCOMMON_OPT += -qintsize=8
594 endif
595 endif
596 else
597 FCOMMON_OPT += -q32
598 endif
599 ifdef USE_OPENMP
600 FCOMMON_OPT += -openmp
601 endif
602 endif
603
604 ifeq ($(F_COMPILER), PGI)
605 CCOMMON_OPT  += -DF_INTERFACE_PGI
606 COMMON_PROF +=  -DPGICOMPILER
607 ifdef BINARY64
608 ifdef INTERFACE64
609 ifneq ($(INTERFACE64), 0)
610 FCOMMON_OPT += -i8
611 endif
612 endif
613 FCOMMON_OPT += -tp p7-64
614 else
615 FCOMMON_OPT += -tp p7
616 endif
617 ifdef USE_OPENMP
618 FCOMMON_OPT += -mp
619 endif
620 endif
621
622 ifeq ($(F_COMPILER), PATHSCALE)
623 CCOMMON_OPT  += -DF_INTERFACE_PATHSCALE
624 ifdef BINARY64
625 ifdef INTERFACE64
626 ifneq ($(INTERFACE64), 0)
627 FCOMMON_OPT += -i8
628 endif
629 endif
630 endif
631
632 ifneq ($(ARCH), mips64)
633 ifndef BINARY64
634 FCOMMON_OPT += -m32
635 else
636 FCOMMON_OPT += -m64
637 endif
638 else
639 ifdef BINARY64
640 FCOMMON_OPT += -mabi=64
641 else
642 FCOMMON_OPT += -mabi=n32
643 endif
644 endif
645
646 ifdef USE_OPENMP
647 FCOMMON_OPT += -mp
648 endif
649 endif
650
651 ifeq ($(F_COMPILER), OPEN64)
652 CCOMMON_OPT  += -DF_INTERFACE_OPEN64
653 ifdef BINARY64
654 ifdef INTERFACE64
655 ifneq ($(INTERFACE64), 0)
656 FCOMMON_OPT += -i8
657 endif
658 endif
659 endif
660
661 ifeq ($(ARCH), mips64)
662 ifndef BINARY64
663 FCOMMON_OPT += -n32
664 else
665 FCOMMON_OPT += -n64
666 endif
667 ifeq ($(CORE), LOONGSON3A)
668 FCOMMON_OPT += -loongson3 -static
669 endif
670
671 ifeq ($(CORE), LOONGSON3B)
672 FCOMMON_OPT += -loongson3 -static
673 endif
674
675 else
676 ifndef BINARY64
677 FCOMMON_OPT += -m32
678 else
679 FCOMMON_OPT += -m64
680 endif
681 endif
682
683 ifdef USE_OPENMP
684 FEXTRALIB   += -lstdc++
685 FCOMMON_OPT += -mp
686 endif
687 endif
688
689 ifeq ($(C_COMPILER), OPEN64)
690
691 ifeq ($(ARCH), mips64)
692 ifndef BINARY64
693 CCOMMON_OPT += -n32
694 else
695 CCOMMON_OPT += -n64
696 endif
697 ifeq ($(CORE), LOONGSON3A)
698 CCOMMON_OPT += -loongson3 -static
699 endif
700
701 ifeq ($(CORE), LOONGSON3B)
702 CCOMMON_OPT += -loongson3 -static
703 endif
704
705 else
706
707 ifndef BINARY64
708 CCOMMON_OPT += -m32
709 else
710 CCOMMON_OPT += -m64
711 endif
712 endif
713 endif
714
715 ifeq ($(C_COMPILER), SUN)
716 CCOMMON_OPT  += -w
717 ifeq ($(ARCH), x86)
718 CCOMMON_OPT  += -m32
719 else
720 FCOMMON_OPT  += -m64
721 endif
722 endif
723
724 ifeq ($(F_COMPILER), SUN)
725 CCOMMON_OPT  += -DF_INTERFACE_SUN
726 ifeq ($(ARCH), x86)
727 FCOMMON_OPT  += -m32
728 else
729 FCOMMON_OPT  += -m64
730 endif
731 ifdef USE_OPENMP
732 FCOMMON_OPT += -xopenmp=parallel
733 endif
734 endif
735
736 ifeq ($(F_COMPILER), COMPAQ)
737 CCOMMON_OPT  += -DF_INTERFACE_COMPAQ
738 ifdef USE_OPENMP
739 FCOMMON_OPT += -openmp
740 endif
741 endif
742
743 ifdef BINARY64
744 ifdef INTERFACE64
745 ifneq ($(INTERFACE64), 0)
746 CCOMMON_OPT     +=
747 #-DUSE64BITINT
748 endif
749 endif
750 endif
751
752 ifeq ($(NEED_PIC), 1)
753 ifeq ($(C_COMPILER), IBM)
754 CCOMMON_OPT += -qpic=large
755 else
756 CCOMMON_OPT += -fPIC
757 endif
758 ifeq ($(F_COMPILER), SUN)
759 FCOMMON_OPT  += -pic
760 else
761 FCOMMON_OPT += -fPIC
762 endif
763 endif
764
765 ifeq ($(DYNAMIC_ARCH), 1)
766 CCOMMON_OPT     += -DDYNAMIC_ARCH
767 endif
768
769 ifeq ($(NO_LAPACK), 1)
770 CCOMMON_OPT     += -DNO_LAPACK
771 #Disable LAPACK C interface
772 NO_LAPACKE = 1
773 endif
774
775 ifeq ($(NO_LAPACKE), 1)
776 CCOMMON_OPT     += -DNO_LAPACKE
777 endif
778
779 ifeq ($(NO_AVX), 1)
780 CCOMMON_OPT     += -DNO_AVX
781 endif
782
783 ifeq ($(ARCH), x86)
784 CCOMMON_OPT     += -DNO_AVX
785 endif
786
787 ifeq ($(NO_AVX2), 1)
788 CCOMMON_OPT     += -DNO_AVX2
789 endif
790
791 ifdef SMP
792 CCOMMON_OPT     += -DSMP_SERVER
793
794 ifeq ($(ARCH), mips64)
795 ifneq ($(CORE), LOONGSON3B)
796 USE_SIMPLE_THREADED_LEVEL3 = 1
797 endif
798 endif
799
800 ifeq ($(USE_OPENMP), 1)
801 # USE_SIMPLE_THREADED_LEVEL3 = 1
802 # NO_AFFINITY = 1
803 CCOMMON_OPT     += -DUSE_OPENMP
804 endif
805
806 ifeq ($(BIGNUMA), 1)
807 CCOMMON_OPT     += -DBIGNUMA
808 endif
809
810 endif
811
812 ifeq ($(NO_WARMUP), 1)
813 CCOMMON_OPT     += -DNO_WARMUP
814 endif
815
816 ifeq ($(CONSISTENT_FPCSR), 1)
817 CCOMMON_OPT     += -DCONSISTENT_FPCSR
818 endif
819
820 # Only for development
821 # CCOMMON_OPT    += -DPARAMTEST
822 # CCOMMON_OPT    += -DPREFETCHTEST
823 # CCOMMON_OPT    += -DNO_SWITCHING
824 # USE_PAPI = 1
825
826 ifdef USE_PAPI
827 CCOMMON_OPT      += -DUSE_PAPI
828 EXTRALIB         += -lpapi -lperfctr
829 endif
830
831 ifdef DYNAMIC_THREADS
832 CCOMMON_OPT      += -DDYNAMIC_THREADS
833 endif
834
835 CCOMMON_OPT     += -DMAX_CPU_NUMBER=$(NUM_THREADS)
836
837 ifdef USE_SIMPLE_THREADED_LEVEL3
838 CCOMMON_OPT     += -DUSE_SIMPLE_THREADED_LEVEL3
839 endif
840
841 ifndef LIBNAMESUFFIX
842 LIBPREFIX = libopenblas
843 else
844 LIBPREFIX = libopenblas_$(LIBNAMESUFFIX)
845 endif
846
847 KERNELDIR       = $(TOPDIR)/kernel/$(ARCH)
848
849 include $(TOPDIR)/Makefile.$(ARCH)
850
851 CCOMMON_OPT     += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
852
853 ifeq ($(CORE), PPC440)
854 CCOMMON_OPT     += -DALLOC_QALLOC
855 endif
856
857 ifeq ($(CORE), PPC440FP2)
858 STATIC_ALLOCATION = 1
859 endif
860
861 ifneq ($(OSNAME), Linux)
862 NO_AFFINITY = 1
863 endif
864
865 ifneq ($(ARCH), x86_64)
866 ifneq ($(ARCH), x86)
867 ifneq ($(CORE), LOONGSON3B)
868 NO_AFFINITY = 1
869 endif
870 endif
871 endif
872
873 ifdef NO_AFFINITY
874 CCOMMON_OPT     += -DNO_AFFINITY
875 endif
876
877 ifdef FUNCTION_PROFILE
878 CCOMMON_OPT     += -DFUNCTION_PROFILE
879 endif
880
881 ifdef HUGETLB_ALLOCATION
882 CCOMMON_OPT     += -DALLOC_HUGETLB
883 endif
884
885 ifdef HUGETLBFILE_ALLOCATION
886 CCOMMON_OPT     += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
887 endif
888
889 ifdef STATIC_ALLOCATION
890 CCOMMON_OPT     += -DALLOC_STATIC
891 endif
892
893 ifdef DEVICEDRIVER_ALLOCATION
894 CCOMMON_OPT     += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
895 endif
896
897 ifdef MIXED_MEMORY_ALLOCATION
898 CCOMMON_OPT     += -DMIXED_MEMORY_ALLOCATION
899 endif
900
901 ifeq ($(OSNAME), SunOS)
902 TAR     = gtar
903 PATCH   = gpatch
904 GREP    = ggrep
905 else
906 TAR     = tar
907 PATCH   = patch
908 GREP    = grep
909 endif
910
911 ifndef MD5SUM
912 MD5SUM  = md5sum
913 endif
914
915 AWK     = awk
916
917 REVISION = -r$(VERSION)
918 MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
919
920 ifeq ($(DEBUG), 1)
921 COMMON_OPT += -g
922 endif
923
924 ifndef COMMON_OPT
925 COMMON_OPT = -O2
926 endif
927
928
929 override CFLAGS     += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
930 override PFLAGS     += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
931
932 override FFLAGS     += $(COMMON_OPT) $(FCOMMON_OPT)
933 override FPFLAGS    += $(COMMON_OPT) $(FCOMMON_OPT) $(COMMON_PROF)
934 #MAKEOVERRIDES =
935
936 #For LAPACK Fortran codes.
937 #Disable -fopenmp for LAPACK Fortran codes on Windows.
938 ifdef OS_WINDOWS
939 LAPACK_FFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FFLAGS))
940 LAPACK_FPFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FPFLAGS))
941 else
942 LAPACK_FFLAGS := $(FFLAGS)
943 LAPACK_FPFLAGS := $(FPFLAGS)
944 endif
945
946 LAPACK_CFLAGS = $(CFLAGS)
947 LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
948 ifdef INTERFACE64
949 ifneq ($(INTERFACE64), 0)
950 LAPACK_CFLAGS +=  -DLAPACK_ILP64
951 endif
952 endif
953
954 ifdef OS_WINDOWS
955 LAPACK_CFLAGS +=  -DOPENBLAS_OS_WINDOWS
956 endif
957 ifeq ($(C_COMPILER), LSB)
958 LAPACK_CFLAGS +=  -DLAPACK_COMPLEX_STRUCTURE
959 endif
960
961 ifndef SUFFIX
962 SUFFIX  = o
963 endif
964
965 ifndef PSUFFIX
966 PSUFFIX = po
967 endif
968
969 ifndef LIBSUFFIX
970 LIBSUFFIX = a
971 endif
972
973 ifneq ($(DYNAMIC_ARCH), 1)
974 ifndef SMP
975 LIBNAME         = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
976 LIBNAME_P       = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
977 else
978 LIBNAME         = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
979 LIBNAME_P       = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
980 endif
981 else
982 ifndef SMP
983 LIBNAME         = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
984 LIBNAME_P       = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
985 else
986 LIBNAME         = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
987 LIBNAME_P       = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
988 endif
989 endif
990
991
992 LIBDLLNAME   = $(LIBPREFIX).dll
993 LIBSONAME    = $(LIBNAME:.$(LIBSUFFIX)=.so)
994 LIBDYNNAME   = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
995 LIBDEFNAME   = $(LIBNAME:.$(LIBSUFFIX)=.def)
996 LIBEXPNAME   = $(LIBNAME:.$(LIBSUFFIX)=.exp)
997 LIBZIPNAME   = $(LIBNAME:.$(LIBSUFFIX)=.zip)
998
999 LIBS            = $(TOPDIR)/$(LIBNAME)
1000 LIBS_P          = $(TOPDIR)/$(LIBNAME_P)
1001
1002
1003 LIB_COMPONENTS = BLAS
1004 ifneq ($(NO_CBLAS), 1)
1005 LIB_COMPONENTS += CBLAS
1006 endif
1007
1008 ifneq ($(NO_LAPACK), 1)
1009 LIB_COMPONENTS += LAPACK
1010 ifneq ($(NO_LAPACKE), 1)
1011 LIB_COMPONENTS += LAPACKE
1012 endif
1013 endif
1014
1015 ifeq ($(ONLY_CBLAS), 1)
1016 LIB_COMPONENTS = CBLAS
1017 endif
1018
1019 export OSNAME
1020 export ARCH
1021 export CORE
1022 export LIBCORE
1023 export PGCPATH
1024 export CONFIG
1025 export CC
1026 export FC
1027 export BU
1028 export FU
1029 export NEED2UNDERSCORES
1030 export USE_THREAD
1031 export NUM_THREADS
1032 export NUM_CORES
1033 export SMP
1034 export MAKEFILE_RULE
1035 export NEED_PIC
1036 export BINARY
1037 export BINARY32
1038 export BINARY64
1039 export F_COMPILER
1040 export C_COMPILER
1041 export USE_OPENMP
1042 export CROSS
1043 export CROSS_SUFFIX
1044 export NOFORTRAN
1045 export NO_FBLAS
1046 export EXTRALIB
1047 export CEXTRALIB
1048 export FEXTRALIB
1049 export HAVE_SSE
1050 export HAVE_SSE2
1051 export HAVE_SSE3
1052 export HAVE_SSSE3
1053 export HAVE_SSE4_1
1054 export HAVE_SSE4_2
1055 export HAVE_SSE4A
1056 export HAVE_SSE5
1057 export HAVE_AVX
1058 export HAVE_VFP
1059 export HAVE_VFPV3
1060 export HAVE_VFPV4
1061 export HAVE_NEON
1062 export KERNELDIR
1063 export FUNCTION_PROFILE
1064 export TARGET_CORE
1065
1066 export SGEMM_UNROLL_M
1067 export SGEMM_UNROLL_N
1068 export DGEMM_UNROLL_M
1069 export DGEMM_UNROLL_N
1070 export QGEMM_UNROLL_M
1071 export QGEMM_UNROLL_N
1072 export CGEMM_UNROLL_M
1073 export CGEMM_UNROLL_N
1074 export ZGEMM_UNROLL_M
1075 export ZGEMM_UNROLL_N
1076 export XGEMM_UNROLL_M
1077 export XGEMM_UNROLL_N
1078 export CGEMM3M_UNROLL_M
1079 export CGEMM3M_UNROLL_N
1080 export ZGEMM3M_UNROLL_M
1081 export ZGEMM3M_UNROLL_N
1082 export XGEMM3M_UNROLL_M
1083 export XGEMM3M_UNROLL_N
1084
1085
1086 ifdef USE_CUDA
1087 export CUDADIR
1088 export CUCC
1089 export CUFLAGS
1090 export CULIB
1091 endif
1092
1093 .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
1094
1095 .f.$(SUFFIX):
1096         $(FC) $(FFLAGS) -c $<  -o $(@F)
1097
1098 .f.$(PSUFFIX):
1099         $(FC) $(FPFLAGS) -pg -c $<  -o $(@F)
1100
1101
1102 ifdef BINARY64
1103 PATHSCALEPATH   = /opt/pathscale/lib/3.1
1104 PGIPATH         = /opt/pgi/linux86-64/7.1-5/lib
1105 else
1106 PATHSCALEPATH   = /opt/pathscale/lib/3.1/32
1107 PGIPATH         = /opt/pgi/linux86/7.1-5/lib
1108 endif
1109
1110 ACMLPATH        = /opt/acml/4.3.0
1111 ifneq ($(OSNAME), Darwin)
1112 MKLPATH         = /opt/intel/mkl/10.2.2.025/lib
1113 else
1114 MKLPATH         = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
1115 endif
1116 ATLASPATH       = /opt/atlas/3.9.17/opteron
1117 FLAMEPATH       = $(HOME)/flame/lib
1118 ifneq ($(OSNAME), SunOS)
1119 SUNPATH         = /opt/sunstudio12.1
1120 else
1121 SUNPATH         = /opt/SUNWspro
1122 endif
1123