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