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