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