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