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