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