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