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