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