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