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