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