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