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