Refs #263. Rollback bulldozer and piledriver kernels to barcelona kernels.
[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 #
367 #  C Compiler dependent settings
368 #
369
370
371 # ifeq logical or. GCC or CLANG or LSB
372 # http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
373 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG LSB))
374 CCOMMON_OPT += -Wall
375 COMMON_PROF += -fno-inline
376 NO_UNINITIALIZED_WARN =  -Wno-uninitialized
377
378 ifeq ($(QUIET_MAKE), 1)
379 CCOMMON_OPT += $(NO_UNINITIALIZED_WARN) -Wno-unused
380 endif
381
382 ifdef NO_BINARY_MODE
383
384 ifeq ($(ARCH), mips64)
385 ifdef BINARY64
386 CCOMMON_OPT += -mabi=64
387 else
388 CCOMMON_OPT += -mabi=n32
389 endif
390 BINARY_DEFINED = 1
391 endif
392
393 ifeq ($(CORE), LOONGSON3A) 
394 CCOMMON_OPT += -march=mips64
395 FCOMMON_OPT += -march=mips64
396 endif
397
398 ifeq ($(CORE), LOONGSON3B) 
399 CCOMMON_OPT += -march=mips64
400 FCOMMON_OPT += -march=mips64
401 endif
402
403 ifeq ($(OSNAME), AIX)
404 BINARY_DEFINED = 1
405 endif
406
407 endif
408
409 ifndef BINARY_DEFINED
410 ifdef BINARY64
411 CCOMMON_OPT += -m64
412 else
413 CCOMMON_OPT += -m32
414 endif
415 endif
416
417 endif
418
419 ifeq ($(C_COMPILER), PGI)
420 ifdef BINARY64
421 CCOMMON_OPT += -tp p7-64
422 else
423 CCOMMON_OPT += -tp p7
424 endif
425 endif
426
427 ifeq ($(C_COMPILER), PATHSCALE)
428 ifdef BINARY64
429 CCOMMON_OPT += -m64
430 else
431 CCOMMON_OPT += -m32
432 endif
433 endif
434
435 #
436 #  Fortran Compiler dependent settings
437 #
438
439 ifeq ($(F_COMPILER), G77)
440 CCOMMON_OPT += -DF_INTERFACE_G77
441 FCOMMON_OPT += -Wall
442 ifndef NO_BINARY_MODE
443 ifdef BINARY64
444 FCOMMON_OPT += -m64
445 else
446 FCOMMON_OPT += -m32
447 endif
448 endif
449 endif
450
451 ifeq ($(F_COMPILER), G95)
452 CCOMMON_OPT += -DF_INTERFACE_G95
453 FCOMMON_OPT += -Wall
454 ifndef NO_BINARY_MODE
455 ifdef BINARY64
456 FCOMMON_OPT += -m64
457 else
458 FCOMMON_OPT += -m32
459 endif
460 endif
461 endif
462
463 ifeq ($(F_COMPILER), GFORTRAN)
464 CCOMMON_OPT += -DF_INTERFACE_GFORT
465 FCOMMON_OPT += -Wall
466 #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
467 ifneq ($(NO_LAPACK), 1)
468 ifneq ($(C_COMPILER), LSB)
469 EXTRALIB += -lgfortran 
470 endif
471 endif
472 ifdef NO_BINARY_MODE
473 ifeq ($(ARCH), mips64)
474 ifdef BINARY64
475 FCOMMON_OPT += -mabi=64
476 else
477 FCOMMON_OPT += -mabi=n32
478 endif
479 endif
480 else
481 ifdef BINARY64
482 FCOMMON_OPT += -m64
483 ifdef INTERFACE64
484 FCOMMON_OPT +=  -fdefault-integer-8
485 endif
486 else
487 FCOMMON_OPT += -m32
488 endif
489 endif
490 ifdef USE_OPENMP
491 FCOMMON_OPT += -fopenmp
492 endif
493 endif
494
495 ifeq ($(F_COMPILER), INTEL)
496 CCOMMON_OPT += -DF_INTERFACE_INTEL
497 ifdef INTERFACE64
498 FCOMMON_OPT += -i8
499 endif
500 ifdef USE_OPENMP
501 FCOMMON_OPT += -openmp
502 endif
503 endif
504
505 ifeq ($(F_COMPILER), FUJITSU)
506 CCOMMON_OPT += -DF_INTERFACE_FUJITSU
507 ifdef USE_OPENMP
508 FCOMMON_OPT += -openmp
509 endif
510 endif
511
512 ifeq ($(F_COMPILER), IBM)
513 CCOMMON_OPT += -DF_INTERFACE_IBM
514 # FCOMMON_OPT   += -qarch=440
515 ifdef BINARY64
516 FCOMMON_OPT += -q64
517 ifdef INTERFACE64
518 FCOMMON_OPT += -qintsize=8
519 endif
520 else
521 FCOMMON_OPT += -q32
522 endif
523 ifdef USE_OPENMP
524 FCOMMON_OPT += -openmp
525 endif
526 endif
527
528 ifeq ($(F_COMPILER), PGI)
529 CCOMMON_OPT  += -DF_INTERFACE_PGI
530 COMMON_PROF +=  -DPGICOMPILER
531 ifdef BINARY64
532 ifdef INTERFACE64
533 FCOMMON_OPT += -i8
534 endif
535 FCOMMON_OPT += -tp p7-64
536 else
537 FCOMMON_OPT += -tp p7
538 endif
539 ifdef USE_OPENMP
540 FCOMMON_OPT += -mp
541 endif
542 endif
543
544 ifeq ($(F_COMPILER), PATHSCALE)
545 CCOMMON_OPT  += -DF_INTERFACE_PATHSCALE
546 ifdef BINARY64
547 ifdef INTERFACE64
548 FCOMMON_OPT += -i8
549 endif
550 endif
551
552 ifneq ($(ARCH), mips64)
553 ifndef BINARY64
554 FCOMMON_OPT += -m32
555 else
556 FCOMMON_OPT += -m64
557 endif
558 else
559 ifdef BINARY64
560 FCOMMON_OPT += -mabi=64
561 else
562 FCOMMON_OPT += -mabi=n32
563 endif
564 endif
565
566 ifdef USE_OPENMP
567 FCOMMON_OPT += -mp
568 endif
569 endif
570
571 ifeq ($(F_COMPILER), OPEN64)
572 CCOMMON_OPT  += -DF_INTERFACE_OPEN64
573 ifdef BINARY64
574 ifdef INTERFACE64
575 FCOMMON_OPT += -i8
576 endif
577 endif
578
579 ifeq ($(ARCH), mips64)
580 ifndef BINARY64
581 FCOMMON_OPT += -n32
582 else
583 FCOMMON_OPT += -n64
584 endif
585 ifeq ($(CORE), LOONGSON3A) 
586 FCOMMON_OPT += -loongson3 -static
587 endif
588
589 ifeq ($(CORE), LOONGSON3B) 
590 FCOMMON_OPT += -loongson3 -static
591 endif
592
593 else
594 ifndef BINARY64
595 FCOMMON_OPT += -m32
596 else
597 FCOMMON_OPT += -m64
598 endif
599 endif
600
601 ifdef USE_OPENMP
602 FEXTRALIB   += -lstdc++
603 FCOMMON_OPT += -mp
604 endif
605 endif
606
607 ifeq ($(C_COMPILER), OPEN64)
608
609 ifeq ($(ARCH), mips64)
610 ifndef BINARY64
611 CCOMMON_OPT += -n32
612 else
613 CCOMMON_OPT += -n64
614 endif
615 ifeq ($(CORE), LOONGSON3A) 
616 CCOMMON_OPT += -loongson3 -static
617 endif
618
619 ifeq ($(CORE), LOONGSON3B) 
620 CCOMMON_OPT += -loongson3 -static
621 endif
622
623 else
624
625 ifndef BINARY64
626 CCOMMON_OPT += -m32
627 else
628 CCOMMON_OPT += -m64
629 endif
630 endif
631 endif
632
633 ifeq ($(C_COMPILER), SUN)
634 CCOMMON_OPT  += -w
635 ifeq ($(ARCH), x86)
636 CCOMMON_OPT  += -m32
637 else
638 FCOMMON_OPT  += -m64
639 endif
640 endif
641
642 ifeq ($(F_COMPILER), SUN)
643 CCOMMON_OPT  += -DF_INTERFACE_SUN
644 ifeq ($(ARCH), x86)
645 FCOMMON_OPT  += -m32
646 else
647 FCOMMON_OPT  += -m64
648 endif
649 ifdef USE_OPENMP
650 FCOMMON_OPT += -xopenmp=parallel
651 endif
652 endif
653
654 ifeq ($(F_COMPILER), COMPAQ)
655 CCOMMON_OPT  += -DF_INTERFACE_COMPAQ
656 ifdef USE_OPENMP
657 FCOMMON_OPT += -openmp
658 endif
659 endif
660
661 ifdef BINARY64
662 ifdef INTERFACE64
663 CCOMMON_OPT     += 
664 #-DUSE64BITINT
665 endif
666 endif
667
668 ifeq ($(NEED_PIC), 1)
669 ifeq ($(C_COMPILER), IBM)
670 CCOMMON_OPT += -qpic=large 
671 else
672 CCOMMON_OPT += -fPIC 
673 endif
674 ifeq ($(F_COMPILER), SUN)
675 FCOMMON_OPT  += -pic
676 else
677 FCOMMON_OPT += -fPIC 
678 endif
679 endif
680
681 ifeq ($(DYNAMIC_ARCH), 1)
682 CCOMMON_OPT     += -DDYNAMIC_ARCH
683 endif
684
685 ifeq ($(NO_LAPACK), 1)
686 CCOMMON_OPT     += -DNO_LAPACK
687 #Disable LAPACK C interface
688 NO_LAPACKE = 1
689 endif
690
691 ifeq ($(NO_LAPACKE), 1)
692 CCOMMON_OPT     += -DNO_LAPACKE
693 endif
694
695 ifeq ($(NO_AVX), 1)
696 CCOMMON_OPT     += -DNO_AVX
697 endif
698
699 ifdef SMP
700 CCOMMON_OPT     += -DSMP_SERVER
701
702 ifeq ($(ARCH), mips64)
703 ifneq ($(CORE), LOONGSON3B)
704 USE_SIMPLE_THREADED_LEVEL3 = 1
705 endif
706 endif
707
708 ifeq ($(USE_OPENMP), 1)
709 # USE_SIMPLE_THREADED_LEVEL3 = 1
710 # NO_AFFINITY = 1
711 CCOMMON_OPT     += -DUSE_OPENMP
712 endif
713
714 endif
715
716 ifeq ($(NO_WARMUP), 1)
717 CCOMMON_OPT     += -DNO_WARMUP
718 endif
719
720 ifeq ($(CONSISTENT_FPCSR), 1)
721 CCOMMON_OPT     += -DCONSISTENT_FPCSR
722 endif
723
724 # Only for development
725 # CCOMMON_OPT    += -DPARAMTEST
726 # CCOMMON_OPT    += -DPREFETCHTEST
727 # CCOMMON_OPT    += -DNO_SWITCHING
728 # USE_PAPI = 1
729
730 ifdef USE_PAPI
731 CCOMMON_OPT      += -DUSE_PAPI
732 EXTRALIB         += -lpapi -lperfctr
733 endif
734
735 ifdef DYNAMIC_THREADS
736 CCOMMON_OPT      += -DDYNAMIC_THREADS
737 endif
738
739 CCOMMON_OPT     += -DMAX_CPU_NUMBER=$(NUM_THREADS)
740
741 ifdef USE_SIMPLE_THREADED_LEVEL3
742 CCOMMON_OPT     += -DUSE_SIMPLE_THREADED_LEVEL3
743 endif
744
745 ifndef LIBNAMESUFFIX
746 LIBPREFIX = libopenblas
747 else
748 LIBPREFIX = libopenblas_$(LIBNAMESUFFIX)
749 endif
750
751 KERNELDIR       = $(TOPDIR)/kernel/$(ARCH)
752
753 include $(TOPDIR)/Makefile.$(ARCH)
754
755 CCOMMON_OPT     += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
756
757 ifeq ($(CORE), PPC440)
758 CCOMMON_OPT     += -DALLOC_QALLOC
759 endif
760
761 ifeq ($(CORE), PPC440FP2)
762 STATIC_ALLOCATION = 1
763 endif
764
765 ifneq ($(OSNAME), Linux)
766 NO_AFFINITY = 1
767 endif
768
769 ifneq ($(ARCH), x86_64)
770 ifneq ($(ARCH), x86)
771 ifneq ($(CORE), LOONGSON3B)
772 NO_AFFINITY = 1
773 endif
774 endif
775 endif
776
777 ifdef NO_AFFINITY
778 CCOMMON_OPT     += -DNO_AFFINITY
779 endif
780
781 ifdef FUNCTION_PROFILE
782 CCOMMON_OPT     += -DFUNCTION_PROFILE
783 endif
784
785 ifdef HUGETLB_ALLOCATION
786 CCOMMON_OPT     += -DALLOC_HUGETLB
787 endif
788
789 ifdef HUGETLBFILE_ALLOCATION
790 CCOMMON_OPT     += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
791 endif
792
793 ifdef STATIC_ALLOCATION
794 CCOMMON_OPT     += -DALLOC_STATIC
795 endif
796
797 ifdef DEVICEDRIVER_ALLOCATION
798 CCOMMON_OPT     += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
799 endif
800
801 ifdef MIXED_MEMORY_ALLOCATION
802 CCOMMON_OPT     += -DMIXED_MEMORY_ALLOCATION
803 endif
804
805 ifeq ($(OSNAME), SunOS)
806 TAR     = gtar
807 PATCH   = gpatch
808 GREP    = ggrep
809 else
810 TAR     = tar
811 PATCH   = patch
812 GREP    = grep
813 endif
814
815 ifndef MD5SUM
816 MD5SUM  = md5sum
817 endif
818
819 AWK     = awk
820
821 REVISION = -r$(VERSION)
822 MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
823
824 ifeq ($(DEBUG), 1)
825 COMMON_OPT += -g
826 endif
827
828 ifndef COMMON_OPT
829 COMMON_OPT = -O2
830 endif
831
832
833 override CFLAGS     += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
834 override PFLAGS     += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
835
836 override FFLAGS     += $(COMMON_OPT) $(FCOMMON_OPT)
837 override FPFLAGS    += $(COMMON_OPT) $(FCOMMON_OPT) $(COMMON_PROF)
838 #MAKEOVERRIDES =
839
840 LAPACK_CFLAGS = $(CFLAGS)
841 LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H 
842 ifdef INTERFACE64
843 LAPACK_CFLAGS +=  -DLAPACK_ILP64
844 endif
845 ifeq ($(C_COMPILER), LSB)
846 LAPACK_CFLAGS +=  -DLAPACK_COMPLEX_STRUCTURE
847 endif
848
849 ifndef SUFFIX
850 SUFFIX  = o
851 endif
852
853 ifndef PSUFFIX
854 PSUFFIX = po
855 endif
856
857 ifndef LIBSUFFIX
858 LIBSUFFIX = a
859 endif
860
861 ifneq ($(DYNAMIC_ARCH), 1)
862 ifndef SMP
863 LIBNAME         = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
864 LIBNAME_P       = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
865 else
866 LIBNAME         = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
867 LIBNAME_P       = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
868 endif
869 else
870 ifndef SMP
871 LIBNAME         = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
872 LIBNAME_P       = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
873 else
874 LIBNAME         = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
875 LIBNAME_P       = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
876 endif
877 endif
878
879
880 LIBDLLNAME   = $(LIBPREFIX).dll
881 LIBSONAME    = $(LIBNAME:.$(LIBSUFFIX)=.so)
882 LIBDYNNAME   = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
883 LIBDEFNAME   = $(LIBNAME:.$(LIBSUFFIX)=.def)
884 LIBEXPNAME   = $(LIBNAME:.$(LIBSUFFIX)=.exp)
885 LIBZIPNAME   = $(LIBNAME:.$(LIBSUFFIX)=.zip)
886
887 LIBS            = $(TOPDIR)/$(LIBNAME)
888 LIBS_P          = $(TOPDIR)/$(LIBNAME_P)
889
890 export OSNAME
891 export ARCH
892 export CORE
893 export LIBCORE
894 export PGCPATH
895 export CONFIG
896 export CC
897 export FC
898 export BU
899 export FU
900 export USE_THREAD
901 export NUM_THREADS
902 export NUM_CORES
903 export SMP
904 export MAKEFILE_RULE
905 export NEED_PIC
906 export BINARY
907 export BINARY32
908 export BINARY64
909 export F_COMPILER
910 export C_COMPILER
911 export USE_OPENMP
912 export CROSS
913 export CROSS_SUFFIX
914 export NOFORTRAN
915 export EXTRALIB
916 export CEXTRALIB
917 export FEXTRALIB
918 export HAVE_SSE
919 export HAVE_SSE2
920 export HAVE_SSE3
921 export HAVE_SSSE3
922 export HAVE_SSE4_1
923 export HAVE_SSE4_2
924 export HAVE_SSE4A
925 export HAVE_SSE5
926 export HAVE_AVX
927 export KERNELDIR
928 export FUNCTION_PROFILE
929 export TARGET_CORE
930
931 export SGEMM_UNROLL_M
932 export SGEMM_UNROLL_N
933 export DGEMM_UNROLL_M
934 export DGEMM_UNROLL_N
935 export QGEMM_UNROLL_M
936 export QGEMM_UNROLL_N
937 export CGEMM_UNROLL_M
938 export CGEMM_UNROLL_N
939 export ZGEMM_UNROLL_M
940 export ZGEMM_UNROLL_N
941 export XGEMM_UNROLL_M
942 export XGEMM_UNROLL_N
943 export CGEMM3M_UNROLL_M
944 export CGEMM3M_UNROLL_N
945 export ZGEMM3M_UNROLL_M
946 export ZGEMM3M_UNROLL_N
947 export XGEMM3M_UNROLL_M
948 export XGEMM3M_UNROLL_N
949
950
951 ifdef USE_CUDA
952 export CUDADIR
953 export CUCC
954 export CUFLAGS
955 export CULIB
956 endif
957
958 .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
959
960 .f.$(SUFFIX):
961         $(FC) $(FFLAGS) -c $<  -o $(@F)
962
963 .f.$(PSUFFIX):
964         $(FC) $(FPFLAGS) -pg -c $<  -o $(@F)
965
966
967 ifdef BINARY64
968 PATHSCALEPATH   = /opt/pathscale/lib/3.1
969 PGIPATH         = /opt/pgi/linux86-64/7.1-5/lib
970 else
971 PATHSCALEPATH   = /opt/pathscale/lib/3.1/32
972 PGIPATH         = /opt/pgi/linux86/7.1-5/lib
973 endif
974
975 ACMLPATH        = /opt/acml/4.3.0
976 ifneq ($(OSNAME), Darwin)
977 MKLPATH         = /opt/intel/mkl/10.2.2.025/lib
978 else
979 MKLPATH         = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
980 endif
981 ATLASPATH       = /opt/atlas/3.9.17/opteron
982 FLAMEPATH       = $(HOME)/flame/lib
983 ifneq ($(OSNAME), SunOS)
984 SUNPATH         = /opt/sunstudio12.1
985 else
986 SUNPATH         = /opt/SUNWspro
987 endif
988