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