Merge branch '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 endif
807
808 ifeq ($(NO_WARMUP), 1)
809 CCOMMON_OPT     += -DNO_WARMUP
810 endif
811
812 ifeq ($(CONSISTENT_FPCSR), 1)
813 CCOMMON_OPT     += -DCONSISTENT_FPCSR
814 endif
815
816 # Only for development
817 # CCOMMON_OPT    += -DPARAMTEST
818 # CCOMMON_OPT    += -DPREFETCHTEST
819 # CCOMMON_OPT    += -DNO_SWITCHING
820 # USE_PAPI = 1
821
822 ifdef USE_PAPI
823 CCOMMON_OPT      += -DUSE_PAPI
824 EXTRALIB         += -lpapi -lperfctr
825 endif
826
827 ifdef DYNAMIC_THREADS
828 CCOMMON_OPT      += -DDYNAMIC_THREADS
829 endif
830
831 CCOMMON_OPT     += -DMAX_CPU_NUMBER=$(NUM_THREADS)
832
833 ifdef USE_SIMPLE_THREADED_LEVEL3
834 CCOMMON_OPT     += -DUSE_SIMPLE_THREADED_LEVEL3
835 endif
836
837 ifndef LIBNAMESUFFIX
838 LIBPREFIX = libopenblas
839 else
840 LIBPREFIX = libopenblas_$(LIBNAMESUFFIX)
841 endif
842
843 KERNELDIR       = $(TOPDIR)/kernel/$(ARCH)
844
845 include $(TOPDIR)/Makefile.$(ARCH)
846
847 CCOMMON_OPT     += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
848
849 ifeq ($(CORE), PPC440)
850 CCOMMON_OPT     += -DALLOC_QALLOC
851 endif
852
853 ifeq ($(CORE), PPC440FP2)
854 STATIC_ALLOCATION = 1
855 endif
856
857 ifneq ($(OSNAME), Linux)
858 NO_AFFINITY = 1
859 endif
860
861 ifneq ($(ARCH), x86_64)
862 ifneq ($(ARCH), x86)
863 ifneq ($(CORE), LOONGSON3B)
864 NO_AFFINITY = 1
865 endif
866 endif
867 endif
868
869 ifdef NO_AFFINITY
870 CCOMMON_OPT     += -DNO_AFFINITY
871 endif
872
873 ifdef FUNCTION_PROFILE
874 CCOMMON_OPT     += -DFUNCTION_PROFILE
875 endif
876
877 ifdef HUGETLB_ALLOCATION
878 CCOMMON_OPT     += -DALLOC_HUGETLB
879 endif
880
881 ifdef HUGETLBFILE_ALLOCATION
882 CCOMMON_OPT     += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
883 endif
884
885 ifdef STATIC_ALLOCATION
886 CCOMMON_OPT     += -DALLOC_STATIC
887 endif
888
889 ifdef DEVICEDRIVER_ALLOCATION
890 CCOMMON_OPT     += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
891 endif
892
893 ifdef MIXED_MEMORY_ALLOCATION
894 CCOMMON_OPT     += -DMIXED_MEMORY_ALLOCATION
895 endif
896
897 ifeq ($(OSNAME), SunOS)
898 TAR     = gtar
899 PATCH   = gpatch
900 GREP    = ggrep
901 else
902 TAR     = tar
903 PATCH   = patch
904 GREP    = grep
905 endif
906
907 ifndef MD5SUM
908 MD5SUM  = md5sum
909 endif
910
911 AWK     = awk
912
913 REVISION = -r$(VERSION)
914 MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
915
916 ifeq ($(DEBUG), 1)
917 COMMON_OPT += -g
918 endif
919
920 ifndef COMMON_OPT
921 COMMON_OPT = -O2
922 endif
923
924
925 override CFLAGS     += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
926 override PFLAGS     += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
927
928 override FFLAGS     += $(COMMON_OPT) $(FCOMMON_OPT)
929 override FPFLAGS    += $(COMMON_OPT) $(FCOMMON_OPT) $(COMMON_PROF)
930 #MAKEOVERRIDES =
931
932 #For LAPACK Fortran codes.
933 #Disable -fopenmp for LAPACK Fortran codes on Windows.
934 ifdef OS_WINDOWS
935 LAPACK_FFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FFLAGS))
936 LAPACK_FPFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FPFLAGS))
937 else
938 LAPACK_FFLAGS := $(FFLAGS)
939 LAPACK_FPFLAGS := $(FPFLAGS)
940 endif
941
942 LAPACK_CFLAGS = $(CFLAGS)
943 LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
944 ifdef INTERFACE64
945 ifneq ($(INTERFACE64), 0)
946 LAPACK_CFLAGS +=  -DLAPACK_ILP64
947 endif
948 endif
949
950 ifdef OS_WINDOWS
951 LAPACK_CFLAGS +=  -DOPENBLAS_OS_WINDOWS
952 endif
953 ifeq ($(C_COMPILER), LSB)
954 LAPACK_CFLAGS +=  -DLAPACK_COMPLEX_STRUCTURE
955 endif
956
957 ifndef SUFFIX
958 SUFFIX  = o
959 endif
960
961 ifndef PSUFFIX
962 PSUFFIX = po
963 endif
964
965 ifndef LIBSUFFIX
966 LIBSUFFIX = a
967 endif
968
969 ifneq ($(DYNAMIC_ARCH), 1)
970 ifndef SMP
971 LIBNAME         = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
972 LIBNAME_P       = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
973 else
974 LIBNAME         = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
975 LIBNAME_P       = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
976 endif
977 else
978 ifndef SMP
979 LIBNAME         = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
980 LIBNAME_P       = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
981 else
982 LIBNAME         = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
983 LIBNAME_P       = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
984 endif
985 endif
986
987
988 LIBDLLNAME   = $(LIBPREFIX).dll
989 LIBSONAME    = $(LIBNAME:.$(LIBSUFFIX)=.so)
990 LIBDYNNAME   = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
991 LIBDEFNAME   = $(LIBNAME:.$(LIBSUFFIX)=.def)
992 LIBEXPNAME   = $(LIBNAME:.$(LIBSUFFIX)=.exp)
993 LIBZIPNAME   = $(LIBNAME:.$(LIBSUFFIX)=.zip)
994
995 LIBS            = $(TOPDIR)/$(LIBNAME)
996 LIBS_P          = $(TOPDIR)/$(LIBNAME_P)
997
998
999 LIB_COMPONENTS = BLAS
1000 ifneq ($(NO_CBLAS), 1)
1001 LIB_COMPONENTS += CBLAS
1002 endif
1003
1004 ifneq ($(NO_LAPACK), 1)
1005 LIB_COMPONENTS += LAPACK
1006 ifneq ($(NO_LAPACKE), 1)
1007 LIB_COMPONENTS += LAPACKE
1008 endif
1009 endif
1010
1011 ifeq ($(ONLY_CBLAS), 1)
1012 LIB_COMPONENTS = CBLAS
1013 endif
1014
1015 export OSNAME
1016 export ARCH
1017 export CORE
1018 export LIBCORE
1019 export PGCPATH
1020 export CONFIG
1021 export CC
1022 export FC
1023 export BU
1024 export FU
1025 export NEED2UNDERSCORES
1026 export USE_THREAD
1027 export NUM_THREADS
1028 export NUM_CORES
1029 export SMP
1030 export MAKEFILE_RULE
1031 export NEED_PIC
1032 export BINARY
1033 export BINARY32
1034 export BINARY64
1035 export F_COMPILER
1036 export C_COMPILER
1037 export USE_OPENMP
1038 export CROSS
1039 export CROSS_SUFFIX
1040 export NOFORTRAN
1041 export NO_FBLAS
1042 export EXTRALIB
1043 export CEXTRALIB
1044 export FEXTRALIB
1045 export HAVE_SSE
1046 export HAVE_SSE2
1047 export HAVE_SSE3
1048 export HAVE_SSSE3
1049 export HAVE_SSE4_1
1050 export HAVE_SSE4_2
1051 export HAVE_SSE4A
1052 export HAVE_SSE5
1053 export HAVE_AVX
1054 export HAVE_VFP
1055 export HAVE_VFPV3
1056 export HAVE_VFPV4
1057 export HAVE_NEON
1058 export KERNELDIR
1059 export FUNCTION_PROFILE
1060 export TARGET_CORE
1061
1062 export SGEMM_UNROLL_M
1063 export SGEMM_UNROLL_N
1064 export DGEMM_UNROLL_M
1065 export DGEMM_UNROLL_N
1066 export QGEMM_UNROLL_M
1067 export QGEMM_UNROLL_N
1068 export CGEMM_UNROLL_M
1069 export CGEMM_UNROLL_N
1070 export ZGEMM_UNROLL_M
1071 export ZGEMM_UNROLL_N
1072 export XGEMM_UNROLL_M
1073 export XGEMM_UNROLL_N
1074 export CGEMM3M_UNROLL_M
1075 export CGEMM3M_UNROLL_N
1076 export ZGEMM3M_UNROLL_M
1077 export ZGEMM3M_UNROLL_N
1078 export XGEMM3M_UNROLL_M
1079 export XGEMM3M_UNROLL_N
1080
1081
1082 ifdef USE_CUDA
1083 export CUDADIR
1084 export CUCC
1085 export CUFLAGS
1086 export CULIB
1087 endif
1088
1089 .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
1090
1091 .f.$(SUFFIX):
1092         $(FC) $(FFLAGS) -c $<  -o $(@F)
1093
1094 .f.$(PSUFFIX):
1095         $(FC) $(FPFLAGS) -pg -c $<  -o $(@F)
1096
1097
1098 ifdef BINARY64
1099 PATHSCALEPATH   = /opt/pathscale/lib/3.1
1100 PGIPATH         = /opt/pgi/linux86-64/7.1-5/lib
1101 else
1102 PATHSCALEPATH   = /opt/pathscale/lib/3.1/32
1103 PGIPATH         = /opt/pgi/linux86/7.1-5/lib
1104 endif
1105
1106 ACMLPATH        = /opt/acml/4.3.0
1107 ifneq ($(OSNAME), Darwin)
1108 MKLPATH         = /opt/intel/mkl/10.2.2.025/lib
1109 else
1110 MKLPATH         = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
1111 endif
1112 ATLASPATH       = /opt/atlas/3.9.17/opteron
1113 FLAMEPATH       = $(HOME)/flame/lib
1114 ifneq ($(OSNAME), SunOS)
1115 SUNPATH         = /opt/sunstudio12.1
1116 else
1117 SUNPATH         = /opt/SUNWspro
1118 endif
1119