Refs #227. Detected LLVM/Clang compiler.
[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 ifndef NETLIB_LAPACK_DIR
13 NETLIB_LAPACK_DIR = $(TOPDIR)/lapack-3.4.2
14 endif
15
16 # Default C compiler
17 # - Only set if not specified on the command line or inherited from the environment.
18 # - CC is an implicit variable so neither '?=' or 'ifndef' can be used.
19 #   http://stackoverflow.com/questions/4029274/mingw-and-make-variables
20 # - Default value is 'cc' which is not always a valid command (e.g. MinGW).
21 ifeq ($(origin CC),default)
22 CC = gcc
23 endif
24
25 # Default Fortran compiler (FC) is selected by f_check.
26
27 ifndef MAKEFILE_RULE
28 include $(TOPDIR)/Makefile.rule
29 else
30 include $(TOPDIR)/$(MAKEFILE_RULE)
31 endif
32
33 #
34 #  Beginning of system configuration 
35 #
36
37 ifndef HOSTCC
38 HOSTCC   = $(CC)
39 endif
40
41 ifdef TARGET
42 GETARCH_FLAGS := -DFORCE_$(TARGET)
43 endif
44
45 #TARGET_CORE will override TARGET which is used in DYNAMIC_ARCH=1.
46 #
47 ifdef TARGET_CORE
48 GETARCH_FLAGS := -DFORCE_$(TARGET_CORE)
49 endif
50
51 ifdef INTERFACE64
52 GETARCH_FLAGS   += -DUSE64BITINT
53 endif
54
55 ifndef GEMM_MULTITHREAD_THRESHOLD
56 GEMM_MULTITHREAD_THRESHOLD=4
57 endif
58 GETARCH_FLAGS   += -DGEMM_MULTITHREAD_THRESHOLD=$(GEMM_MULTITHREAD_THRESHOLD) 
59
60 ifeq ($(NO_AVX), 1)
61 GETARCH_FLAGS   += -DNO_AVX
62 endif
63
64 ifeq ($(DEBUG), 1)
65 GETARCH_FLAGS   += -g
66 endif
67
68 ifndef NO_PARALLEL_MAKE
69 NO_PARALLEL_MAKE=0
70 endif
71 GETARCH_FLAGS   += -DNO_PARALLEL_MAKE=$(NO_PARALLEL_MAKE)
72 # This operation is expensive, so execution should be once.
73 ifndef GOTOBLAS_MAKEFILE
74 export GOTOBLAS_MAKEFILE = 1
75
76 # Generating Makefile.conf and config.h
77 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)
78
79 ifndef TARGET_CORE
80 include $(TOPDIR)/Makefile.conf
81 else
82 include $(TOPDIR)/Makefile_kernel.conf
83 endif
84
85 endif
86
87 ifndef NUM_THREADS
88 NUM_THREADS = $(NUM_CORES)
89 endif
90
91 ifeq ($(NUM_THREADS), 1)
92 override USE_THREAD = 0
93 endif
94
95 ifdef USE_THREAD
96 ifeq ($(USE_THREAD), 0)
97 SMP =
98 else
99 SMP = 1
100 endif
101 else
102 ifeq ($(NUM_THREAD), 1)
103 SMP =
104 else
105 SMP = 1
106 endif
107 endif
108
109 ifndef NEED_PIC
110 NEED_PIC = 1
111 endif
112
113 ARFLAGS =
114 CPP     = $(COMPILER) -E
115 AR      = $(CROSS_SUFFIX)ar
116 AS      = $(CROSS_SUFFIX)as
117 LD      = $(CROSS_SUFFIX)ld
118 RANLIB  = $(CROSS_SUFFIX)ranlib
119 NM      = $(CROSS_SUFFIX)nm
120 DLLWRAP = $(CROSS_SUFFIX)dllwrap
121
122 #
123 #  OS dependent settings
124 #
125
126 ifeq ($(OSNAME), Darwin)
127 export MACOSX_DEPLOYMENT_TARGET=10.2
128 MD5SUM = md5 -r
129 endif
130
131 ifeq ($(OSNAME), FreeBSD)
132 MD5SUM = md5 -r
133 endif
134
135 ifeq ($(OSNAME), NetBSD)
136 MD5SUM = md5 -n
137 endif
138
139 ifeq ($(OSNAME), Linux)
140 EXTRALIB        += -lm
141 endif
142
143 ifeq ($(OSNAME), AIX)
144 EXTRALIB        += -lm
145 endif
146
147 ifeq ($(OSNAME), WINNT)
148 NEED_PIC = 0
149 NO_EXPRECISION = 1
150
151 EXTRALIB        += -defaultlib:advapi32
152
153 SUFFIX  = obj
154 PSUFFIX = pobj
155 LIBSUFFIX = a
156
157 ifeq ($(C_COMPILER), CLANG)
158 CCOMMON_OPT     += -DMS_ABI
159 endif
160
161 ifeq ($(C_COMPILER), GCC)
162 #Test for supporting MS_ABI
163 GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
164 GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4)
165 GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 7)
166 ifeq ($(GCCVERSIONGT4), 1)
167 # GCC Majar version > 4
168 # It is compatible with MSVC ABI. 
169 CCOMMON_OPT     += -DMS_ABI
170 endif
171
172 ifeq ($(GCCVERSIONGTEQ4), 1)
173 ifeq ($(GCCMINORVERSIONGTEQ7), 1)
174 # GCC Version >=4.7
175 # It is compatible with MSVC ABI. 
176 CCOMMON_OPT     += -DMS_ABI
177 endif
178 endif
179
180 endif
181 endif
182
183 ifeq ($(OSNAME), Interix)
184 NEED_PIC = 0
185 NO_EXPRECISION = 1
186
187 INTERIX_TOOL_DIR = /opt/gcc.3.3/i586-pc-interix3/bin
188 endif
189
190 ifeq ($(OSNAME), CYGWIN_NT)
191 NEED_PIC = 0
192 NO_EXPRECISION = 1
193 endif
194
195 ifneq ($(OSNAME), WINNT)
196 ifneq ($(OSNAME), CYGWIN_NT)
197 ifneq ($(OSNAME), Interix)
198 ifdef SMP
199 EXTRALIB   += -lpthread
200 endif
201 endif
202 endif
203 endif
204
205 ifdef QUAD_PRECISION
206 CCOMMON_OPT     += -DQUAD_PRECISION
207 NO_EXPRECISION = 1
208 endif
209
210 ifneq ($(ARCH), x86)
211 ifneq ($(ARCH), x86_64)
212 NO_EXPRECISION = 1
213 endif
214 endif
215
216 ifdef UTEST_CHECK
217 CCOMMON_OPT     += -DUTEST_CHECK
218 SANITY_CHECK = 1
219 endif
220
221 ifdef SANITY_CHECK
222 CCOMMON_OPT     += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU)
223 endif
224
225 #
226 #  Architecture dependent settings
227 #
228
229 ifeq ($(ARCH), x86)
230 ifndef BINARY
231 NO_BINARY_MODE  = 1
232 endif
233 ifndef NO_EXPRECISION
234 ifeq ($(F_COMPILER), GFORTRAN)
235 ifeq ($(C_COMPILER), GCC)
236 EXPRECISION     = 1
237 CCOMMON_OPT     += -DEXPRECISION -m128bit-long-double
238 FCOMMON_OPT     += -m128bit-long-double
239 endif
240 ifeq ($(C_COMPILER), CLANG)
241 EXPRECISION     = 1
242 CCOMMON_OPT     += -DEXPRECISION 
243 FCOMMON_OPT     += -m128bit-long-double
244 endif
245 endif
246 endif
247 endif
248
249 ifeq ($(ARCH), x86_64)
250 ifndef NO_EXPRECISION
251 ifeq ($(F_COMPILER), GFORTRAN)
252 ifeq ($(C_COMPILER), GCC)
253 EXPRECISION     = 1
254 CCOMMON_OPT     += -DEXPRECISION -m128bit-long-double
255 FCOMMON_OPT     += -m128bit-long-double
256 endif
257 ifeq ($(C_COMPILER), CLANG)
258 EXPRECISION     = 1
259 CCOMMON_OPT     += -DEXPRECISION 
260 FCOMMON_OPT     += -m128bit-long-double
261 endif
262 endif
263 endif
264 endif
265
266 ifeq ($(C_COMPILER), INTEL)
267 CCOMMON_OPT    += -wd981
268 endif
269
270 ifeq ($(USE_OPENMP), 1)
271 ifeq ($(C_COMPILER), GCC)
272 CCOMMON_OPT    += -fopenmp
273 endif
274
275 ifeq ($(C_COMPILER), CLANG)
276 $(error OpenBLAS: Clang didn't support OpenMP yet.)
277 CCOMMON_OPT    += -fopenmp
278 endif
279
280 ifeq ($(C_COMPILER), INTEL)
281 CCOMMON_OPT    += -openmp
282 endif
283
284 ifeq ($(C_COMPILER), PGI)
285 CCOMMON_OPT    += -mp
286 endif
287
288 ifeq ($(C_COMPILER), OPEN64)
289 CCOMMON_OPT    += -mp
290 CEXTRALIB   += -lstdc++
291 endif
292
293 ifeq ($(C_COMPILER), PATHSCALE)
294 CCOMMON_OPT    += -mp
295 endif
296 endif
297
298
299 ifeq ($(DYNAMIC_ARCH), 1)
300 ifeq ($(ARCH), x86)
301 DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \
302                CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
303 ifneq ($(NO_AVX), 1)
304 DYNAMIC_CORE += SANDYBRIDGE BULLDOZER
305 endif
306 endif
307
308 ifeq ($(ARCH), x86_64)
309 DYNAMIC_CORE = PRESCOTT CORE2 PENRYN DUNNINGTON NEHALEM OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
310 ifneq ($(NO_AVX), 1)
311 DYNAMIC_CORE += SANDYBRIDGE BULLDOZER
312 endif
313 endif
314
315 ifndef DYNAMIC_CORE
316 DYNAMIC_ARCH =
317 endif
318 endif
319
320 ifeq ($(ARCH), ia64)
321 NO_BINARY_MODE  = 1
322 BINARY_DEFINED  = 1
323
324 ifeq ($(F_COMPILER), GFORTRAN)
325 ifeq ($(C_COMPILER), GCC)
326 # EXPRECISION   = 1
327 # CCOMMON_OPT   += -DEXPRECISION
328 endif
329 endif
330 endif
331
332 ifeq ($(ARCH), mips64)
333 NO_BINARY_MODE  = 1
334 endif
335
336 ifeq ($(ARCH), alpha)
337 NO_BINARY_MODE  = 1
338 BINARY_DEFINED  = 1
339 endif
340
341 #
342 #  C Compiler dependent settings
343 #
344
345 # ifeq logical or. GCC or CLANG
346 # http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
347 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG))
348 CCOMMON_OPT += -Wall
349 COMMON_PROF += -fno-inline
350 NO_UNINITIALIZED_WARN =  -Wno-uninitialized
351
352 ifdef NO_BINARY_MODE
353
354 ifeq ($(ARCH), mips64)
355 ifdef BINARY64
356 CCOMMON_OPT += -mabi=64
357 else
358 CCOMMON_OPT += -mabi=n32
359 endif
360 BINARY_DEFINED = 1
361 endif
362
363 ifeq ($(CORE), LOONGSON3A) 
364 CCOMMON_OPT += -march=mips64
365 FCOMMON_OPT += -march=mips64
366 endif
367
368 ifeq ($(CORE), LOONGSON3B) 
369 CCOMMON_OPT += -march=mips64
370 FCOMMON_OPT += -march=mips64
371 endif
372
373 ifeq ($(OSNAME), AIX)
374 BINARY_DEFINED = 1
375 endif
376
377 endif
378
379 ifndef BINARY_DEFINED
380 ifdef BINARY64
381 CCOMMON_OPT += -m64
382 else
383 CCOMMON_OPT += -m32
384 endif
385 endif
386
387 endif
388
389 ifeq ($(C_COMPILER), PGI)
390 ifdef BINARY64
391 CCOMMON_OPT += -tp p7-64
392 else
393 CCOMMON_OPT += -tp p7
394 endif
395 endif
396
397 ifeq ($(C_COMPILER), PATHSCALE)
398 ifdef BINARY64
399 CCOMMON_OPT += -m64
400 else
401 CCOMMON_OPT += -m32
402 endif
403 endif
404
405 #
406 #  Fortran Compiler dependent settings
407 #
408
409 ifeq ($(F_COMPILER), G77)
410 CCOMMON_OPT += -DF_INTERFACE_G77
411 FCOMMON_OPT += -Wall
412 ifndef NO_BINARY_MODE
413 ifdef BINARY64
414 FCOMMON_OPT += -m64
415 else
416 FCOMMON_OPT += -m32
417 endif
418 endif
419 endif
420
421 ifeq ($(F_COMPILER), G95)
422 CCOMMON_OPT += -DF_INTERFACE_G95
423 FCOMMON_OPT += -Wall
424 ifndef NO_BINARY_MODE
425 ifdef BINARY64
426 FCOMMON_OPT += -m64
427 else
428 FCOMMON_OPT += -m32
429 endif
430 endif
431 endif
432
433 ifeq ($(F_COMPILER), GFORTRAN)
434 CCOMMON_OPT += -DF_INTERFACE_GFORT
435 FCOMMON_OPT += -Wall
436 EXTRALIB += -lgfortran 
437 ifdef NO_BINARY_MODE
438 ifeq ($(ARCH), mips64)
439 ifdef BINARY64
440 FCOMMON_OPT += -mabi=64
441 else
442 FCOMMON_OPT += -mabi=n32
443 endif
444 endif
445 else
446 ifdef BINARY64
447 FCOMMON_OPT += -m64
448 ifdef INTERFACE64
449 FCOMMON_OPT +=  -fdefault-integer-8
450 endif
451 else
452 FCOMMON_OPT += -m32
453 endif
454 endif
455 ifdef USE_OPENMP
456 FCOMMON_OPT += -fopenmp
457 endif
458 endif
459
460 ifeq ($(F_COMPILER), INTEL)
461 CCOMMON_OPT += -DF_INTERFACE_INTEL
462 ifdef INTERFACE64
463 FCOMMON_OPT += -i8
464 endif
465 ifdef USE_OPENMP
466 FCOMMON_OPT += -openmp
467 endif
468 endif
469
470 ifeq ($(F_COMPILER), FUJITSU)
471 CCOMMON_OPT += -DF_INTERFACE_FUJITSU
472 ifdef USE_OPENMP
473 FCOMMON_OPT += -openmp
474 endif
475 endif
476
477 ifeq ($(F_COMPILER), IBM)
478 CCOMMON_OPT += -DF_INTERFACE_IBM
479 # FCOMMON_OPT   += -qarch=440
480 ifdef BINARY64
481 FCOMMON_OPT += -q64
482 ifdef INTERFACE64
483 FCOMMON_OPT += -qintsize=8
484 endif
485 else
486 FCOMMON_OPT += -q32
487 endif
488 ifdef USE_OPENMP
489 FCOMMON_OPT += -openmp
490 endif
491 endif
492
493 ifeq ($(F_COMPILER), PGI)
494 CCOMMON_OPT  += -DF_INTERFACE_PGI
495 COMMON_PROF +=  -DPGICOMPILER
496 ifdef BINARY64
497 ifdef INTERFACE64
498 FCOMMON_OPT += -i8
499 endif
500 FCOMMON_OPT += -tp p7-64
501 else
502 FCOMMON_OPT += -tp p7
503 endif
504 ifdef USE_OPENMP
505 FCOMMON_OPT += -mp
506 endif
507 endif
508
509 ifeq ($(F_COMPILER), PATHSCALE)
510 CCOMMON_OPT  += -DF_INTERFACE_PATHSCALE
511 ifdef BINARY64
512 ifdef INTERFACE64
513 FCOMMON_OPT += -i8
514 endif
515 endif
516
517 ifneq ($(ARCH), mips64)
518 ifndef BINARY64
519 FCOMMON_OPT += -m32
520 else
521 FCOMMON_OPT += -m64
522 endif
523 else
524 ifdef BINARY64
525 FCOMMON_OPT += -mabi=64
526 else
527 FCOMMON_OPT += -mabi=n32
528 endif
529 endif
530
531 ifdef USE_OPENMP
532 FCOMMON_OPT += -mp
533 endif
534 endif
535
536 ifeq ($(F_COMPILER), OPEN64)
537 CCOMMON_OPT  += -DF_INTERFACE_OPEN64
538 ifdef BINARY64
539 ifdef INTERFACE64
540 FCOMMON_OPT += -i8
541 endif
542 endif
543 ifndef BINARY64
544 FCOMMON_OPT += -m32
545 else
546 FCOMMON_OPT += -m64
547 endif
548
549 ifdef USE_OPENMP
550 FEXTRALIB   += -lstdc++
551 FCOMMON_OPT += -mp
552 endif
553 endif
554
555 ifeq ($(C_COMPILER), OPEN64)
556 ifndef BINARY64
557 CCOMMON_OPT += -m32
558 else
559 CCOMMON_OPT += -m64
560 endif
561 endif
562
563 ifeq ($(C_COMPILER), SUN)
564 CCOMMON_OPT  += -w
565 ifeq ($(ARCH), x86)
566 CCOMMON_OPT  += -m32
567 else
568 FCOMMON_OPT  += -m64
569 endif
570 endif
571
572 ifeq ($(F_COMPILER), SUN)
573 CCOMMON_OPT  += -DF_INTERFACE_SUN
574 ifeq ($(ARCH), x86)
575 FCOMMON_OPT  += -m32
576 else
577 FCOMMON_OPT  += -m64
578 endif
579 ifdef USE_OPENMP
580 FCOMMON_OPT += -xopenmp=parallel
581 endif
582 endif
583
584 ifeq ($(F_COMPILER), COMPAQ)
585 CCOMMON_OPT  += -DF_INTERFACE_COMPAQ
586 ifdef USE_OPENMP
587 FCOMMON_OPT += -openmp
588 endif
589 endif
590
591 ifdef BINARY64
592 ifdef INTERFACE64
593 CCOMMON_OPT     += 
594 #-DUSE64BITINT
595 endif
596 endif
597
598 ifeq ($(NEED_PIC), 1)
599 ifeq ($(C_COMPILER), IBM)
600 CCOMMON_OPT += -qpic=large 
601 else
602 CCOMMON_OPT += -fPIC 
603 endif
604 ifeq ($(F_COMPILER), SUN)
605 FCOMMON_OPT  += -pic
606 else
607 FCOMMON_OPT += -fPIC 
608 endif
609 endif
610
611 ifeq ($(DYNAMIC_ARCH), 1)
612 CCOMMON_OPT     += -DDYNAMIC_ARCH
613 endif
614
615 ifeq ($(NO_LAPACK), 1)
616 CCOMMON_OPT     += -DNO_LAPACK
617 #Disable LAPACK C interface
618 NO_LAPACKE = 1
619 endif
620
621 ifeq ($(NO_LAPACKE), 1)
622 CCOMMON_OPT     += -DNO_LAPACKE
623 endif
624
625 ifeq ($(NO_AVX), 1)
626 CCOMMON_OPT     += -DNO_AVX
627 endif
628
629 ifdef SMP
630 CCOMMON_OPT     += -DSMP_SERVER
631
632 ifeq ($(ARCH), mips64)
633 ifneq ($(CORE), LOONGSON3B)
634 USE_SIMPLE_THREADED_LEVEL3 = 1
635 endif
636 endif
637
638 ifeq ($(USE_OPENMP), 1)
639 # USE_SIMPLE_THREADED_LEVEL3 = 1
640 # NO_AFFINITY = 1
641 CCOMMON_OPT     += -DUSE_OPENMP
642 endif
643
644 endif
645
646 ifeq ($(NO_WARMUP), 1)
647 CCOMMON_OPT     += -DNO_WARMUP
648 endif
649
650 ifeq ($(CONSISTENT_FPCSR), 1)
651 CCOMMON_OPT     += -DCONSISTENT_FPCSR
652 endif
653
654 # Only for development
655 # CCOMMON_OPT    += -DPARAMTEST
656 # CCOMMON_OPT    += -DPREFETCHTEST
657 # CCOMMON_OPT    += -DNO_SWITCHING
658 # USE_PAPI = 1
659
660 ifdef USE_PAPI
661 CCOMMON_OPT      += -DUSE_PAPI
662 EXTRALIB         += -lpapi -lperfctr
663 endif
664
665 ifdef DYNAMIC_THREADS
666 CCOMMON_OPT      += -DDYNAMIC_THREADS
667 endif
668
669 CCOMMON_OPT     += -DMAX_CPU_NUMBER=$(NUM_THREADS)
670
671 ifdef USE_SIMPLE_THREADED_LEVEL3
672 CCOMMON_OPT     += -DUSE_SIMPLE_THREADED_LEVEL3
673 endif
674
675 ifndef LIBNAMESUFFIX
676 LIBPREFIX = libopenblas
677 else
678 LIBPREFIX = libopenblas_$(LIBNAMESUFFIX)
679 endif
680
681 KERNELDIR       = $(TOPDIR)/kernel/$(ARCH)
682
683 include $(TOPDIR)/Makefile.$(ARCH)
684
685 CCOMMON_OPT     += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
686
687 ifeq ($(CORE), PPC440)
688 CCOMMON_OPT     += -DALLOC_QALLOC
689 endif
690
691 ifeq ($(CORE), PPC440FP2)
692 STATIC_ALLOCATION = 1
693 endif
694
695 ifneq ($(OSNAME), Linux)
696 NO_AFFINITY = 1
697 endif
698
699 ifneq ($(ARCH), x86_64)
700 ifneq ($(ARCH), x86)
701 ifneq ($(CORE), LOONGSON3B)
702 NO_AFFINITY = 1
703 endif
704 endif
705 endif
706
707 ifdef NO_AFFINITY
708 CCOMMON_OPT     += -DNO_AFFINITY
709 endif
710
711 ifdef FUNCTION_PROFILE
712 CCOMMON_OPT     += -DFUNCTION_PROFILE
713 endif
714
715 ifdef HUGETLB_ALLOCATION
716 CCOMMON_OPT     += -DALLOC_HUGETLB
717 endif
718
719 ifdef HUGETLBFILE_ALLOCATION
720 CCOMMON_OPT     += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
721 endif
722
723 ifdef STATIC_ALLOCATION
724 CCOMMON_OPT     += -DALLOC_STATIC
725 endif
726
727 ifdef DEVICEDRIVER_ALLOCATION
728 CCOMMON_OPT     += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
729 endif
730
731 ifdef MIXED_MEMORY_ALLOCATION
732 CCOMMON_OPT     += -DMIXED_MEMORY_ALLOCATION
733 endif
734
735 ifeq ($(OSNAME), SunOS)
736 TAR     = gtar
737 PATCH   = gpatch
738 GREP    = ggrep
739 else
740 TAR     = tar
741 PATCH   = patch
742 GREP    = grep
743 endif
744
745 ifndef MD5SUM
746 MD5SUM  = md5sum
747 endif
748
749 AWK     = awk
750
751 REVISION = -r$(VERSION)
752 MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
753
754 ifeq ($(DEBUG), 1)
755 COMMON_OPT += -g
756 endif
757
758 ifndef COMMON_OPT
759 COMMON_OPT = -O2
760 endif
761
762
763 override CFLAGS     += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
764 override PFLAGS     += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
765
766 override FFLAGS     += $(COMMON_OPT) $(FCOMMON_OPT)
767 override FPFLAGS    += $(COMMON_OPT) $(FCOMMON_OPT) $(COMMON_PROF)
768 #MAKEOVERRIDES =
769
770 ifndef SUFFIX
771 SUFFIX  = o
772 endif
773
774 ifndef PSUFFIX
775 PSUFFIX = po
776 endif
777
778 ifndef LIBSUFFIX
779 LIBSUFFIX = a
780 endif
781
782 ifneq ($(DYNAMIC_ARCH), 1)
783 ifndef SMP
784 LIBNAME         = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
785 LIBNAME_P       = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
786 else
787 LIBNAME         = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
788 LIBNAME_P       = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
789 endif
790 else
791 ifndef SMP
792 LIBNAME         = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
793 LIBNAME_P       = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
794 else
795 LIBNAME         = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
796 LIBNAME_P       = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
797 endif
798 endif
799
800
801 LIBDLLNAME   = $(LIBPREFIX).dll
802 LIBSONAME    = $(LIBNAME:.$(LIBSUFFIX)=.so)
803 LIBDYNNAME   = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
804 LIBDEFNAME   = $(LIBNAME:.$(LIBSUFFIX)=.def)
805 LIBEXPNAME   = $(LIBNAME:.$(LIBSUFFIX)=.exp)
806 LIBZIPNAME   = $(LIBNAME:.$(LIBSUFFIX)=.zip)
807
808 LIBS            = $(TOPDIR)/$(LIBNAME)
809 LIBS_P          = $(TOPDIR)/$(LIBNAME_P)
810
811 export OSNAME
812 export ARCH
813 export CORE
814 export LIBCORE
815 export PGCPATH
816 export CONFIG
817 export CC
818 export FC
819 export BU
820 export FU
821 export USE_THREAD
822 export NUM_THREADS
823 export NUM_CORES
824 export SMP
825 export MAKEFILE_RULE
826 export NEED_PIC
827 export BINARY
828 export BINARY32
829 export BINARY64
830 export F_COMPILER
831 export C_COMPILER
832 export USE_OPENMP
833 export CROSS
834 export CROSS_SUFFIX
835 export NOFORTRAN
836 export EXTRALIB
837 export CEXTRALIB
838 export FEXTRALIB
839 export HAVE_SSE
840 export HAVE_SSE2
841 export HAVE_SSE3
842 export HAVE_SSSE3
843 export HAVE_SSE4_1
844 export HAVE_SSE4_2
845 export HAVE_SSE4A
846 export HAVE_SSE5
847 export HAVE_AVX
848 export KERNELDIR
849 export FUNCTION_PROFILE
850 export TARGET_CORE
851
852 export SGEMM_UNROLL_M
853 export SGEMM_UNROLL_N
854 export DGEMM_UNROLL_M
855 export DGEMM_UNROLL_N
856 export QGEMM_UNROLL_M
857 export QGEMM_UNROLL_N
858 export CGEMM_UNROLL_M
859 export CGEMM_UNROLL_N
860 export ZGEMM_UNROLL_M
861 export ZGEMM_UNROLL_N
862 export XGEMM_UNROLL_M
863 export XGEMM_UNROLL_N
864
865 ifdef USE_CUDA
866 export CUDADIR
867 export CUCC
868 export CUFLAGS
869 export CULIB
870 endif
871
872 .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
873
874 .f.$(SUFFIX):
875         $(FC) $(FFLAGS) -c $<  -o $(@F)
876
877 .f.$(PSUFFIX):
878         $(FC) $(FPFLAGS) -pg -c $<  -o $(@F)
879
880
881 ifdef BINARY64
882 PATHSCALEPATH   = /opt/pathscale/lib/3.1
883 PGIPATH         = /opt/pgi/linux86-64/7.1-5/lib
884 else
885 PATHSCALEPATH   = /opt/pathscale/lib/3.1/32
886 PGIPATH         = /opt/pgi/linux86/7.1-5/lib
887 endif
888
889 ACMLPATH        = /opt/acml/4.3.0
890 ifneq ($(OSNAME), Darwin)
891 MKLPATH         = /opt/intel/mkl/10.2.2.025/lib
892 else
893 MKLPATH         = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
894 endif
895 ATLASPATH       = /opt/atlas/3.9.17/opteron
896 FLAMEPATH       = $(HOME)/flame/lib
897 ifneq ($(OSNAME), SunOS)
898 SUNPATH         = /opt/sunstudio12.1
899 else
900 SUNPATH         = /opt/SUNWspro
901 endif
902