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