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