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