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