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