added experimental support for ARMV8
[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 else
844 COMMON_OPT = -O2
845 endif
846 endif
847
848
849 override CFLAGS     += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
850 override PFLAGS     += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
851
852 override FFLAGS     += $(COMMON_OPT) $(FCOMMON_OPT)
853 override FPFLAGS    += $(COMMON_OPT) $(FCOMMON_OPT) $(COMMON_PROF)
854 #MAKEOVERRIDES =
855
856 LAPACK_CFLAGS = $(CFLAGS)
857 LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H 
858 ifdef INTERFACE64
859 LAPACK_CFLAGS +=  -DLAPACK_ILP64
860 endif
861 ifeq ($(C_COMPILER), LSB)
862 LAPACK_CFLAGS +=  -DLAPACK_COMPLEX_STRUCTURE
863 endif
864
865 ifndef SUFFIX
866 SUFFIX  = o
867 endif
868
869 ifndef PSUFFIX
870 PSUFFIX = po
871 endif
872
873 ifndef LIBSUFFIX
874 LIBSUFFIX = a
875 endif
876
877 ifneq ($(DYNAMIC_ARCH), 1)
878 ifndef SMP
879 LIBNAME         = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
880 LIBNAME_P       = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
881 else
882 LIBNAME         = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
883 LIBNAME_P       = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
884 endif
885 else
886 ifndef SMP
887 LIBNAME         = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
888 LIBNAME_P       = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
889 else
890 LIBNAME         = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
891 LIBNAME_P       = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
892 endif
893 endif
894
895
896 LIBDLLNAME   = $(LIBPREFIX).dll
897 LIBSONAME    = $(LIBNAME:.$(LIBSUFFIX)=.so)
898 LIBDYNNAME   = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
899 LIBDEFNAME   = $(LIBNAME:.$(LIBSUFFIX)=.def)
900 LIBEXPNAME   = $(LIBNAME:.$(LIBSUFFIX)=.exp)
901 LIBZIPNAME   = $(LIBNAME:.$(LIBSUFFIX)=.zip)
902
903 LIBS            = $(TOPDIR)/$(LIBNAME)
904 LIBS_P          = $(TOPDIR)/$(LIBNAME_P)
905
906 export OSNAME
907 export ARCH
908 export CORE
909 export LIBCORE
910 export PGCPATH
911 export CONFIG
912 export CC
913 export FC
914 export BU
915 export FU
916 export NEED2UNDERSCORES
917 export USE_THREAD
918 export NUM_THREADS
919 export NUM_CORES
920 export SMP
921 export MAKEFILE_RULE
922 export NEED_PIC
923 export BINARY
924 export BINARY32
925 export BINARY64
926 export F_COMPILER
927 export C_COMPILER
928 export USE_OPENMP
929 export CROSS
930 export CROSS_SUFFIX
931 export NOFORTRAN
932 export EXTRALIB
933 export CEXTRALIB
934 export FEXTRALIB
935 export HAVE_SSE
936 export HAVE_SSE2
937 export HAVE_SSE3
938 export HAVE_SSSE3
939 export HAVE_SSE4_1
940 export HAVE_SSE4_2
941 export HAVE_SSE4A
942 export HAVE_SSE5
943 export HAVE_AVX
944 export HAVE_VFP
945 export HAVE_VFPV3
946 export HAVE_VFPV4
947 export HAVE_NEON
948 export KERNELDIR
949 export FUNCTION_PROFILE
950 export TARGET_CORE
951
952 export SGEMM_UNROLL_M
953 export SGEMM_UNROLL_N
954 export DGEMM_UNROLL_M
955 export DGEMM_UNROLL_N
956 export QGEMM_UNROLL_M
957 export QGEMM_UNROLL_N
958 export CGEMM_UNROLL_M
959 export CGEMM_UNROLL_N
960 export ZGEMM_UNROLL_M
961 export ZGEMM_UNROLL_N
962 export XGEMM_UNROLL_M
963 export XGEMM_UNROLL_N
964 export CGEMM3M_UNROLL_M
965 export CGEMM3M_UNROLL_N
966 export ZGEMM3M_UNROLL_M
967 export ZGEMM3M_UNROLL_N
968 export XGEMM3M_UNROLL_M
969 export XGEMM3M_UNROLL_N
970
971
972 ifdef USE_CUDA
973 export CUDADIR
974 export CUCC
975 export CUFLAGS
976 export CULIB
977 endif
978
979 .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
980
981 .f.$(SUFFIX):
982         $(FC) $(FFLAGS) -c $<  -o $(@F)
983
984 .f.$(PSUFFIX):
985         $(FC) $(FPFLAGS) -pg -c $<  -o $(@F)
986
987
988 ifdef BINARY64
989 PATHSCALEPATH   = /opt/pathscale/lib/3.1
990 PGIPATH         = /opt/pgi/linux86-64/7.1-5/lib
991 else
992 PATHSCALEPATH   = /opt/pathscale/lib/3.1/32
993 PGIPATH         = /opt/pgi/linux86/7.1-5/lib
994 endif
995
996 ACMLPATH        = /opt/acml/4.3.0
997 ifneq ($(OSNAME), Darwin)
998 MKLPATH         = /opt/intel/mkl/10.2.2.025/lib
999 else
1000 MKLPATH         = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
1001 endif
1002 ATLASPATH       = /opt/atlas/3.9.17/opteron
1003 FLAMEPATH       = $(HOME)/flame/lib
1004 ifneq ($(OSNAME), SunOS)
1005 SUNPATH         = /opt/sunstudio12.1
1006 else
1007 SUNPATH         = /opt/SUNWspro
1008 endif
1009