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