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