No strncasecmp with MSVC
[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 #     EXTRALIB += -Wl,-no_compact_unwind
27 endif
28 endif
29
30 # Default Fortran compiler (FC) is selected by f_check.
31
32 ifndef MAKEFILE_RULE
33 include $(TOPDIR)/Makefile.rule
34 else
35 include $(TOPDIR)/$(MAKEFILE_RULE)
36 endif
37
38 #
39 #  Beginning of system configuration
40 #
41
42 ifndef HOSTCC
43 HOSTCC   = $(CC)
44 endif
45
46 ifdef TARGET
47 GETARCH_FLAGS := -DFORCE_$(TARGET)
48 endif
49
50 # Force fallbacks for 32bit
51
52 ifeq ($(BINARY), 32)
53 ifeq ($(TARGET), HASWELL)
54 GETARCH_FLAGS := -DFORCE_NEHALEM
55 endif
56 ifeq ($(TARGET), SANDYBRIDGE)
57 GETARCH_FLAGS := -DFORCE_NEHALEM
58 endif
59 ifeq ($(TARGET), BULLDOZER)
60 GETARCH_FLAGS := -DFORCE_BARCELONA
61 endif
62 ifeq ($(TARGET), PILEDRIVER)
63 GETARCH_FLAGS := -DFORCE_BARCELONA
64 endif
65 ifeq ($(TARGET), STEAMROLLER)
66 GETARCH_FLAGS := -DFORCE_BARCELONA
67 endif
68 ifeq ($(TARGET), EXCAVATOR)
69 GETARCH_FLAGS := -DFORCE_BARCELONA
70 endif
71 ifeq ($(TARGET), ZEN)
72 GETARCH_FLAGS := -DFORCE_BARCELONA
73 endif
74 endif
75
76
77 #TARGET_CORE will override TARGET which is used in DYNAMIC_ARCH=1.
78 #
79 ifdef TARGET_CORE
80 GETARCH_FLAGS := -DFORCE_$(TARGET_CORE)
81 endif
82
83 # Force fallbacks for 32bit
84
85 ifeq ($(BINARY), 32)
86 ifeq ($(TARGET_CORE), HASWELL)
87 GETARCH_FLAGS := -DFORCE_NEHALEM
88 endif
89 ifeq ($(TARGET_CORE), SANDYBRIDGE)
90 GETARCH_FLAGS := -DFORCE_NEHALEM
91 endif
92 ifeq ($(TARGET_CORE), BULLDOZER)
93 GETARCH_FLAGS := -DFORCE_BARCELONA
94 endif
95 ifeq ($(TARGET_CORE), PILEDRIVER)
96 GETARCH_FLAGS := -DFORCE_BARCELONA
97 endif
98 ifeq ($(TARGET_CORE), STEAMROLLER)
99 GETARCH_FLAGS := -DFORCE_BARCELONA
100 endif
101 ifeq ($(TARGET_CORE), EXCAVATOR)
102 GETARCH_FLAGS := -DFORCE_BARCELONA
103 endif
104 ifeq ($(TARGET_CORE), ZEN)
105 GETARCH_FLAGS := -DFORCE_BARCELONA
106 endif
107 endif
108
109
110
111
112 ifdef INTERFACE64
113 ifneq ($(INTERFACE64), 0)
114 GETARCH_FLAGS   += -DUSE64BITINT
115 endif
116 endif
117
118 ifndef GEMM_MULTITHREAD_THRESHOLD
119 GEMM_MULTITHREAD_THRESHOLD=4
120 endif
121 GETARCH_FLAGS   += -DGEMM_MULTITHREAD_THRESHOLD=$(GEMM_MULTITHREAD_THRESHOLD)
122
123 ifeq ($(NO_AVX), 1)
124 GETARCH_FLAGS   += -DNO_AVX
125 endif
126
127 ifeq ($(BINARY), 32)
128 GETARCH_FLAGS   += -DNO_AVX
129 endif
130
131 ifeq ($(NO_AVX2), 1)
132 GETARCH_FLAGS   += -DNO_AVX2
133 endif
134
135 ifeq ($(DEBUG), 1)
136 GETARCH_FLAGS   += -g
137 endif
138
139 ifeq ($(QUIET_MAKE), 1)
140 MAKE += -s
141 endif
142
143 ifndef NO_PARALLEL_MAKE
144 NO_PARALLEL_MAKE=0
145 endif
146 GETARCH_FLAGS   += -DNO_PARALLEL_MAKE=$(NO_PARALLEL_MAKE)
147
148 ifdef MAKE_NB_JOBS
149 GETARCH_FLAGS += -DMAKE_NB_JOBS=$(MAKE_NB_JOBS)
150 endif
151
152 ifeq ($(HOSTCC), loongcc)
153 GETARCH_FLAGS  += -static
154 endif
155
156 #if don't use Fortran, it will only compile CBLAS.
157 ifeq ($(ONLY_CBLAS), 1)
158 NO_LAPACK = 1
159 else
160 ONLY_CBLAS = 0
161 endif
162
163 # This operation is expensive, so execution should be once.
164 ifndef GOTOBLAS_MAKEFILE
165 export GOTOBLAS_MAKEFILE = 1
166
167 # Generating Makefile.conf and config.h
168 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) TARGET=$(TARGET) all)
169
170 ifndef TARGET_CORE
171 include $(TOPDIR)/Makefile.conf
172 else
173 include $(TOPDIR)/Makefile_kernel.conf
174 endif
175
176 endif
177
178 ifndef NUM_THREADS
179 NUM_THREADS = $(NUM_CORES)
180 endif
181
182 ifeq ($(NUM_THREADS), 1)
183 override USE_THREAD = 0
184 endif
185
186 ifdef USE_THREAD
187 ifeq ($(USE_THREAD), 0)
188 SMP =
189 else
190 SMP = 1
191 endif
192 else
193 ifeq ($(NUM_THREAD), 1)
194 SMP =
195 else
196 SMP = 1
197 endif
198 endif
199
200 ifndef NEED_PIC
201 NEED_PIC = 1
202 endif
203
204 ARFLAGS =
205 CPP     = $(COMPILER) -E
206 AR      = $(CROSS_SUFFIX)ar
207 AS      = $(CROSS_SUFFIX)as
208 LD      = $(CROSS_SUFFIX)ld
209 RANLIB  = $(CROSS_SUFFIX)ranlib
210 NM      = $(CROSS_SUFFIX)nm
211 DLLWRAP = $(CROSS_SUFFIX)dllwrap
212 OBJCOPY = $(CROSS_SUFFIX)objcopy
213 OBJCONV = $(CROSS_SUFFIX)objconv
214
215
216 # For detect fortran failed, only build BLAS.
217 ifeq ($(NOFORTRAN), 1)
218 NO_LAPACK = 1
219 endif
220
221 #
222 #  OS dependent settings
223 #
224
225 ifeq ($(OSNAME), Darwin)
226 ifndef MACOSX_DEPLOYMENT_TARGET
227 export MACOSX_DEPLOYMENT_TARGET=10.6
228 endif
229 MD5SUM = md5 -r
230 endif
231
232 ifeq ($(OSNAME), FreeBSD)
233 MD5SUM = md5 -r
234 endif
235
236 ifeq ($(OSNAME), NetBSD)
237 MD5SUM = md5 -n
238 endif
239
240 ifeq ($(OSNAME), Linux)
241 EXTRALIB        += -lm
242 NO_EXPRECISION = 1
243 endif
244
245 ifeq ($(OSNAME), Android)
246 EXTRALIB        += -lm
247 endif
248
249 ifeq ($(OSNAME), AIX)
250 EXTRALIB        += -lm
251 endif
252
253 ifeq ($(OSNAME), WINNT)
254 NEED_PIC = 0
255 NO_EXPRECISION = 1
256
257 EXTRALIB        += -defaultlib:advapi32
258
259 SUFFIX  = obj
260 PSUFFIX = pobj
261 LIBSUFFIX = a
262
263 ifeq ($(C_COMPILER), CLANG)
264 CCOMMON_OPT     += -DMS_ABI
265 endif
266
267 ifeq ($(C_COMPILER), GCC)
268 #Test for supporting MS_ABI
269 GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
270 GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4)
271 GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 7)
272 ifeq ($(GCCVERSIONGT4), 1)
273 # GCC Majar version > 4
274 # It is compatible with MSVC ABI.
275 CCOMMON_OPT     += -DMS_ABI
276 endif
277
278 ifeq ($(GCCVERSIONGTEQ4), 1)
279 ifeq ($(GCCMINORVERSIONGTEQ7), 1)
280 # GCC Version >=4.7
281 # It is compatible with MSVC ABI.
282 CCOMMON_OPT     += -DMS_ABI
283 endif
284 endif
285 endif
286
287 # Ensure the correct stack alignment on Win32
288 # http://permalink.gmane.org/gmane.comp.lib.openblas.general/97
289 ifeq ($(ARCH), x86)
290 CCOMMON_OPT += -mincoming-stack-boundary=2
291 FCOMMON_OPT += -mincoming-stack-boundary=2
292 endif
293
294 endif
295
296 ifeq ($(OSNAME), Interix)
297 NEED_PIC = 0
298 NO_EXPRECISION = 1
299
300 INTERIX_TOOL_DIR = /opt/gcc.3.3/i586-pc-interix3/bin
301 endif
302
303 ifeq ($(OSNAME), CYGWIN_NT)
304 NEED_PIC = 0
305 NO_EXPRECISION = 1
306 endif
307
308 ifneq ($(OSNAME), WINNT)
309 ifneq ($(OSNAME), CYGWIN_NT)
310 ifneq ($(OSNAME), Interix)
311 ifneq ($(OSNAME), Android)
312 ifdef SMP
313 EXTRALIB   += -lpthread
314 endif
315 endif
316 endif
317 endif
318 endif
319
320 # ifeq logical or
321 ifeq ($(OSNAME), $(filter $(OSNAME),WINNT CYGWIN_NT Interix))
322 OS_WINDOWS=1
323 endif
324
325 ifdef QUAD_PRECISION
326 CCOMMON_OPT     += -DQUAD_PRECISION
327 NO_EXPRECISION = 1
328 endif
329
330 ifneq ($(ARCH), x86)
331 ifneq ($(ARCH), x86_64)
332 NO_EXPRECISION = 1
333 endif
334 endif
335
336 ifdef UTEST_CHECK
337 CCOMMON_OPT     += -DUTEST_CHECK
338 SANITY_CHECK = 1
339 endif
340
341 ifdef SANITY_CHECK
342 CCOMMON_OPT     += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU)
343 endif
344
345 MAX_STACK_ALLOC ?= 2048
346 ifneq ($(MAX_STACK_ALLOC), 0)
347 CCOMMON_OPT     += -DMAX_STACK_ALLOC=$(MAX_STACK_ALLOC)
348 endif
349
350 #
351 #  Architecture dependent settings
352 #
353
354 ifeq ($(ARCH), x86)
355 ifndef BINARY
356 NO_BINARY_MODE  = 1
357 endif
358
359 ifeq ($(CORE), generic)
360 NO_EXPRECISION = 1
361 endif
362
363 ifndef NO_EXPRECISION
364 ifeq ($(F_COMPILER), GFORTRAN)
365 # ifeq logical or. GCC or LSB
366 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
367 EXPRECISION     = 1
368 CCOMMON_OPT     += -DEXPRECISION -m128bit-long-double
369 FCOMMON_OPT     += -m128bit-long-double
370 endif
371 ifeq ($(C_COMPILER), CLANG)
372 EXPRECISION     = 1
373 CCOMMON_OPT     += -DEXPRECISION
374 FCOMMON_OPT     += -m128bit-long-double
375 endif
376 endif
377 endif
378 endif
379
380 ifeq ($(ARCH), x86_64)
381
382 ifeq ($(CORE), generic)
383 NO_EXPRECISION = 1
384 endif
385
386 ifndef NO_EXPRECISION
387 ifeq ($(F_COMPILER), GFORTRAN)
388 # ifeq logical or. GCC or LSB
389 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
390 EXPRECISION     = 1
391 CCOMMON_OPT     += -DEXPRECISION -m128bit-long-double
392 FCOMMON_OPT     += -m128bit-long-double
393 endif
394 ifeq ($(C_COMPILER), CLANG)
395 EXPRECISION     = 1
396 CCOMMON_OPT     += -DEXPRECISION
397 FCOMMON_OPT     += -m128bit-long-double
398 endif
399 endif
400 endif
401 endif
402
403 ifeq ($(C_COMPILER), INTEL)
404 CCOMMON_OPT    += -wd981
405 endif
406
407
408 ifeq ($(USE_OPENMP), 1)
409
410 #check
411 ifeq ($(USE_THREAD), 0)
412 $(error OpenBLAS: Cannot set both USE_OPENMP=1 and USE_THREAD=0. The USE_THREAD=0 is only for building single thread version.)
413 endif
414
415 # ifeq logical or. GCC or LSB
416 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
417 CCOMMON_OPT    += -fopenmp
418 endif
419
420 ifeq ($(C_COMPILER), CLANG)
421 CCOMMON_OPT    += -fopenmp
422 endif
423
424 ifeq ($(C_COMPILER), INTEL)
425 CCOMMON_OPT    += -openmp
426 endif
427
428 ifeq ($(C_COMPILER), PGI)
429 CCOMMON_OPT    += -mp
430 endif
431
432 ifeq ($(C_COMPILER), OPEN64)
433 CCOMMON_OPT    += -mp
434 CEXTRALIB   += -lstdc++
435 endif
436
437 ifeq ($(C_COMPILER), PATHSCALE)
438 CCOMMON_OPT    += -mp
439 endif
440 endif
441
442
443 ifeq ($(DYNAMIC_ARCH), 1)
444 ifeq ($(ARCH), x86)
445 DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \
446                CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
447 endif
448
449 ifeq ($(ARCH), x86_64)
450 DYNAMIC_CORE = PRESCOTT CORE2 PENRYN DUNNINGTON NEHALEM OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
451 ifneq ($(NO_AVX), 1)
452 DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER STEAMROLLER EXCAVATOR
453 endif
454 ifneq ($(NO_AVX2), 1)
455 DYNAMIC_CORE += HASWELL ZEN
456 endif
457 endif
458
459 # If DYNAMIC_CORE is not set, DYNAMIC_ARCH cannot do anything, so force it to empty
460 ifndef DYNAMIC_CORE
461 override DYNAMIC_ARCH=
462 endif
463 endif
464
465 ifeq ($(ARCH), ia64)
466 NO_BINARY_MODE  = 1
467 BINARY_DEFINED  = 1
468
469 ifeq ($(F_COMPILER), GFORTRAN)
470 ifeq ($(C_COMPILER), GCC)
471 # EXPRECISION   = 1
472 # CCOMMON_OPT   += -DEXPRECISION
473 endif
474 endif
475 endif
476
477 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
478 NO_BINARY_MODE  = 1
479 endif
480
481 ifeq ($(ARCH), alpha)
482 NO_BINARY_MODE  = 1
483 BINARY_DEFINED  = 1
484 endif
485
486 ifeq ($(ARCH), arm)
487 NO_BINARY_MODE  = 1
488 BINARY_DEFINED  = 1
489
490 CCOMMON_OPT += -marm
491 FCOMMON_OPT += -marm
492
493 # If softfp abi is mentioned on the command line, force it.
494 ifeq ($(ARM_SOFTFP_ABI), 1)
495 CCOMMON_OPT += -mfloat-abi=softfp
496 FCOMMON_OPT += -mfloat-abi=softfp
497 endif
498
499 ifeq ($(OSNAME), Android)
500 ifeq ($(ARM_SOFTFP_ABI), 1)
501 EXTRALIB        += -lm
502 else
503 EXTRALIB        += -Wl,-lm_hard
504 endif
505 endif
506 endif
507
508 ifeq ($(ARCH), arm64)
509 NO_BINARY_MODE  = 1
510 BINARY_DEFINED  = 1
511 endif
512
513
514
515
516 #
517 #  C Compiler dependent settings
518 #
519
520
521 # ifeq logical or. GCC or CLANG or LSB
522 # http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
523 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG LSB))
524 CCOMMON_OPT += -Wall
525 COMMON_PROF += -fno-inline
526 NO_UNINITIALIZED_WARN =  -Wno-uninitialized
527
528 ifeq ($(QUIET_MAKE), 1)
529 CCOMMON_OPT += $(NO_UNINITIALIZED_WARN) -Wno-unused
530 endif
531
532 ifdef NO_BINARY_MODE
533
534 ifeq ($(ARCH), $(filter $(ARCH),mips64))
535 ifdef BINARY64
536 CCOMMON_OPT += -mabi=64
537 else
538 CCOMMON_OPT += -mabi=n32
539 endif
540 BINARY_DEFINED = 1
541 else ifeq ($(ARCH), $(filter $(ARCH),mips))
542 CCOMMON_OPT += -mabi=32
543 BINARY_DEFINED = 1
544 endif
545
546 ifeq ($(CORE), LOONGSON3A)
547 CCOMMON_OPT += -march=mips64
548 FCOMMON_OPT += -march=mips64
549 endif
550
551 ifeq ($(CORE), LOONGSON3B)
552 CCOMMON_OPT += -march=mips64
553 FCOMMON_OPT += -march=mips64
554 endif
555
556 ifeq ($(CORE), P5600)
557 CCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS)
558 FCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS)
559 endif
560
561 ifeq ($(CORE), I6400)
562 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
563 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
564 endif
565
566 ifeq ($(CORE), P6600)
567 CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
568 FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
569 endif
570
571 ifeq ($(OSNAME), AIX)
572 BINARY_DEFINED = 1
573 endif
574
575 endif
576
577 ifndef BINARY_DEFINED
578 ifdef BINARY64
579 CCOMMON_OPT += -m64
580 else
581 CCOMMON_OPT += -m32
582 endif
583 endif
584
585 endif
586
587 ifeq ($(C_COMPILER), PGI)
588 ifdef BINARY64
589 CCOMMON_OPT += -tp p7-64
590 else
591 CCOMMON_OPT += -tp p7
592 endif
593 endif
594
595 ifeq ($(C_COMPILER), PATHSCALE)
596 ifdef BINARY64
597 CCOMMON_OPT += -m64
598 else
599 CCOMMON_OPT += -m32
600 endif
601 endif
602
603 #
604 #  Fortran Compiler dependent settings
605 #
606
607 ifeq ($(F_COMPILER), FLANG)
608 CCOMMON_OPT += -DF_INTERFACE_FLANG
609 ifdef BINARY64
610 ifdef INTERFACE64
611 ifneq ($(INTERFACE64), 0)
612 FCOMMON_OPT += -i8
613 endif
614 endif
615 FCOMMON_OPT += -Wall
616 else
617 FCOMMON_OPT += -Wall
618 endif
619 ifeq ($(USE_OPENMP), 1)
620 FCOMMON_OPT += -fopenmp
621 endif
622 endif
623
624 ifeq ($(F_COMPILER), G77)
625 CCOMMON_OPT += -DF_INTERFACE_G77
626 FCOMMON_OPT += -Wall
627 ifndef NO_BINARY_MODE
628 ifdef BINARY64
629 FCOMMON_OPT += -m64
630 else
631 FCOMMON_OPT += -m32
632 endif
633 endif
634 endif
635
636 ifeq ($(F_COMPILER), G95)
637 CCOMMON_OPT += -DF_INTERFACE_G95
638 FCOMMON_OPT += -Wall
639 ifndef NO_BINARY_MODE
640 ifdef BINARY64
641 FCOMMON_OPT += -m64
642 else
643 FCOMMON_OPT += -m32
644 endif
645 endif
646 endif
647
648 ifeq ($(F_COMPILER), GFORTRAN)
649 CCOMMON_OPT += -DF_INTERFACE_GFORT
650 FCOMMON_OPT += -Wall
651 #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
652 ifneq ($(NO_LAPACK), 1)
653 EXTRALIB += -lgfortran
654 endif
655 ifdef NO_BINARY_MODE
656 ifeq ($(ARCH), $(filter $(ARCH),mips64))
657 ifdef BINARY64
658 FCOMMON_OPT += -mabi=64
659 else
660 FCOMMON_OPT += -mabi=n32
661 endif
662 else ifeq ($(ARCH), $(filter $(ARCH),mips))
663 FCOMMON_OPT += -mabi=32
664 endif
665 else
666 ifdef BINARY64
667 FCOMMON_OPT += -m64
668 ifdef INTERFACE64
669 ifneq ($(INTERFACE64), 0)
670 FCOMMON_OPT +=  -fdefault-integer-8
671 endif
672 endif
673 else
674 FCOMMON_OPT += -m32
675 endif
676 endif
677 ifeq ($(USE_OPENMP), 1)
678 FCOMMON_OPT += -fopenmp
679 endif
680 endif
681
682 ifeq ($(F_COMPILER), INTEL)
683 CCOMMON_OPT += -DF_INTERFACE_INTEL
684 ifdef INTERFACE64
685 ifneq ($(INTERFACE64), 0)
686 FCOMMON_OPT += -i8
687 endif
688 endif
689 ifeq ($(USE_OPENMP), 1)
690 FCOMMON_OPT += -openmp
691 endif
692 endif
693
694 ifeq ($(F_COMPILER), FUJITSU)
695 CCOMMON_OPT += -DF_INTERFACE_FUJITSU
696 ifeq ($(USE_OPENMP), 1)
697 FCOMMON_OPT += -openmp
698 endif
699 endif
700
701 ifeq ($(F_COMPILER), IBM)
702 CCOMMON_OPT += -DF_INTERFACE_IBM
703 # FCOMMON_OPT   += -qarch=440
704 ifdef BINARY64
705 FCOMMON_OPT += -q64
706 ifdef INTERFACE64
707 ifneq ($(INTERFACE64), 0)
708 FCOMMON_OPT += -qintsize=8
709 endif
710 endif
711 else
712 FCOMMON_OPT += -q32
713 endif
714 ifeq ($(USE_OPENMP), 1)
715 FCOMMON_OPT += -openmp
716 endif
717 endif
718
719 ifeq ($(F_COMPILER), PGI)
720 CCOMMON_OPT  += -DF_INTERFACE_PGI
721 COMMON_PROF +=  -DPGICOMPILER
722 ifdef BINARY64
723 ifdef INTERFACE64
724 ifneq ($(INTERFACE64), 0)
725 FCOMMON_OPT += -i8
726 endif
727 endif
728 FCOMMON_OPT += -tp p7-64
729 else
730 FCOMMON_OPT += -tp p7
731 endif
732 ifeq ($(USE_OPENMP), 1)
733 FCOMMON_OPT += -mp
734 endif
735 endif
736
737 ifeq ($(F_COMPILER), PATHSCALE)
738 CCOMMON_OPT  += -DF_INTERFACE_PATHSCALE
739 ifdef BINARY64
740 ifdef INTERFACE64
741 ifneq ($(INTERFACE64), 0)
742 FCOMMON_OPT += -i8
743 endif
744 endif
745 endif
746  
747 ifeq ($(USE_OPENMP), 1)
748 FCOMMON_OPT += -mp
749 endif
750 endif
751
752 ifeq ($(F_COMPILER), OPEN64)
753 CCOMMON_OPT  += -DF_INTERFACE_OPEN64
754 ifdef BINARY64
755 ifdef INTERFACE64
756 ifneq ($(INTERFACE64), 0)
757 FCOMMON_OPT += -i8
758 endif
759 endif
760 endif
761
762 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
763 ifndef BINARY64
764 FCOMMON_OPT += -n32
765 else
766 FCOMMON_OPT += -n64
767 endif
768 ifeq ($(CORE), LOONGSON3A)
769 FCOMMON_OPT += -loongson3 -static
770 endif
771
772 ifeq ($(CORE), LOONGSON3B)
773 FCOMMON_OPT += -loongson3 -static
774 endif
775
776 else
777 ifndef BINARY64
778 FCOMMON_OPT += -m32
779 else
780 FCOMMON_OPT += -m64
781 endif
782 endif
783
784 ifeq ($(USE_OPENMP), 1)
785 FEXTRALIB   += -lstdc++
786 FCOMMON_OPT += -mp
787 endif
788 endif
789
790 ifeq ($(C_COMPILER), OPEN64)
791
792 ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
793 ifndef BINARY64
794 CCOMMON_OPT += -n32
795 else
796 CCOMMON_OPT += -n64
797 endif
798 ifeq ($(CORE), LOONGSON3A)
799 CCOMMON_OPT += -loongson3 -static
800 endif
801
802 ifeq ($(CORE), LOONGSON3B)
803 CCOMMON_OPT += -loongson3 -static
804 endif
805
806 else
807
808 ifndef BINARY64
809 CCOMMON_OPT += -m32
810 else
811 CCOMMON_OPT += -m64
812 endif
813 endif
814 endif
815
816 ifeq ($(C_COMPILER), SUN)
817 CCOMMON_OPT  += -w
818 ifeq ($(ARCH), x86)
819 CCOMMON_OPT  += -m32
820 else
821 FCOMMON_OPT  += -m64
822 endif
823 endif
824
825 ifeq ($(F_COMPILER), SUN)
826 CCOMMON_OPT  += -DF_INTERFACE_SUN
827 ifeq ($(ARCH), x86)
828 FCOMMON_OPT  += -m32
829 else
830 FCOMMON_OPT  += -m64
831 endif
832 ifeq ($(USE_OPENMP), 1)
833 FCOMMON_OPT += -xopenmp=parallel
834 endif
835 endif
836
837 ifeq ($(F_COMPILER), COMPAQ)
838 CCOMMON_OPT  += -DF_INTERFACE_COMPAQ
839 ifeq ($(USE_OPENMP), 1)
840 FCOMMON_OPT += -openmp
841 endif
842 endif
843
844 ifdef BINARY64
845 ifdef INTERFACE64
846 ifneq ($(INTERFACE64), 0)
847 CCOMMON_OPT     +=
848 #-DUSE64BITINT
849 endif
850 endif
851 endif
852
853 ifeq ($(NEED_PIC), 1)
854 ifeq ($(C_COMPILER), IBM)
855 CCOMMON_OPT += -qpic=large
856 else
857 CCOMMON_OPT += -fPIC
858 endif
859 ifeq ($(F_COMPILER), SUN)
860 FCOMMON_OPT  += -pic
861 else
862 FCOMMON_OPT += -fPIC
863 endif
864 endif
865
866 ifeq ($(DYNAMIC_ARCH), 1)
867 CCOMMON_OPT     += -DDYNAMIC_ARCH
868 endif
869
870 ifeq ($(NO_LAPACK), 1)
871 CCOMMON_OPT     += -DNO_LAPACK
872 #Disable LAPACK C interface
873 NO_LAPACKE = 1
874 endif
875
876 ifeq ($(NO_LAPACKE), 1)
877 CCOMMON_OPT     += -DNO_LAPACKE
878 endif
879
880 ifeq ($(NO_AVX), 1)
881 CCOMMON_OPT     += -DNO_AVX
882 endif
883
884 ifeq ($(ARCH), x86)
885 CCOMMON_OPT     += -DNO_AVX
886 endif
887
888 ifeq ($(NO_AVX2), 1)
889 CCOMMON_OPT     += -DNO_AVX2
890 endif
891
892 ifdef SMP
893 CCOMMON_OPT     += -DSMP_SERVER
894
895 ifeq ($(ARCH), mips64)
896 ifneq ($(CORE), LOONGSON3B)
897 USE_SIMPLE_THREADED_LEVEL3 = 1
898 endif
899 endif
900
901 ifeq ($(USE_OPENMP), 1)
902 # USE_SIMPLE_THREADED_LEVEL3 = 1
903 # NO_AFFINITY = 1
904 CCOMMON_OPT     += -DUSE_OPENMP
905 endif
906
907 ifeq ($(BIGNUMA), 1)
908 CCOMMON_OPT     += -DBIGNUMA
909 endif
910
911 endif
912
913 ifeq ($(NO_WARMUP), 1)
914 CCOMMON_OPT     += -DNO_WARMUP
915 endif
916
917 ifeq ($(CONSISTENT_FPCSR), 1)
918 CCOMMON_OPT     += -DCONSISTENT_FPCSR
919 endif
920
921 # Only for development
922 # CCOMMON_OPT    += -DPARAMTEST
923 # CCOMMON_OPT    += -DPREFETCHTEST
924 # CCOMMON_OPT    += -DNO_SWITCHING
925 # USE_PAPI = 1
926
927 ifdef USE_PAPI
928 CCOMMON_OPT      += -DUSE_PAPI
929 EXTRALIB         += -lpapi -lperfctr
930 endif
931
932 ifdef DYNAMIC_THREADS
933 CCOMMON_OPT      += -DDYNAMIC_THREADS
934 endif
935
936 CCOMMON_OPT     += -DMAX_CPU_NUMBER=$(NUM_THREADS)
937
938 ifdef USE_SIMPLE_THREADED_LEVEL3
939 CCOMMON_OPT     += -DUSE_SIMPLE_THREADED_LEVEL3
940 endif
941
942 ifndef SYMBOLPREFIX
943 SYMBOLPREFIX =
944 endif
945
946 ifndef SYMBOLSUFFIX
947 SYMBOLSUFFIX =
948 endif
949
950 ifndef LIBNAMESUFFIX
951 LIBPREFIX = lib$(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)
952 else
953 LIBPREFIX = lib$(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)_$(LIBNAMESUFFIX)
954 endif
955
956 KERNELDIR       = $(TOPDIR)/kernel/$(ARCH)
957
958 include $(TOPDIR)/Makefile.$(ARCH)
959
960 CCOMMON_OPT     += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
961
962 ifeq ($(CORE), PPC440)
963 CCOMMON_OPT     += -DALLOC_QALLOC
964 endif
965
966 ifeq ($(CORE), PPC440FP2)
967 STATIC_ALLOCATION = 1
968 endif
969
970 ifneq ($(OSNAME), Linux)
971 NO_AFFINITY = 1
972 endif
973
974 ifneq ($(ARCH), x86_64)
975 ifneq ($(ARCH), x86)
976 ifneq ($(CORE), LOONGSON3B)
977 NO_AFFINITY = 1
978 endif
979 endif
980 endif
981
982 ifdef NO_AFFINITY
983 CCOMMON_OPT     += -DNO_AFFINITY
984 endif
985
986 ifdef FUNCTION_PROFILE
987 CCOMMON_OPT     += -DFUNCTION_PROFILE
988 endif
989
990 ifdef HUGETLB_ALLOCATION
991 CCOMMON_OPT     += -DALLOC_HUGETLB
992 endif
993
994 ifdef HUGETLBFILE_ALLOCATION
995 CCOMMON_OPT     += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
996 endif
997
998 ifdef STATIC_ALLOCATION
999 CCOMMON_OPT     += -DALLOC_STATIC
1000 endif
1001
1002 ifdef DEVICEDRIVER_ALLOCATION
1003 CCOMMON_OPT     += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
1004 endif
1005
1006 ifdef MIXED_MEMORY_ALLOCATION
1007 CCOMMON_OPT     += -DMIXED_MEMORY_ALLOCATION
1008 endif
1009
1010 ifeq ($(OSNAME), SunOS)
1011 TAR     = gtar
1012 PATCH   = gpatch
1013 GREP    = ggrep
1014 AWK     = nawk
1015 else
1016 TAR     = tar
1017 PATCH   = patch
1018 GREP    = grep
1019 AWK     = awk
1020 endif
1021
1022 ifndef MD5SUM
1023 MD5SUM  = md5sum
1024 endif
1025
1026
1027 REVISION = -r$(VERSION)
1028 MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
1029
1030 ifeq ($(DEBUG), 1)
1031 COMMON_OPT += -g
1032 endif
1033
1034 ifeq ($(DEBUG), 1)
1035 FCOMMON_OPT += -g
1036 endif
1037
1038 ifndef COMMON_OPT
1039 COMMON_OPT = -O2
1040 endif
1041
1042 ifndef FCOMMON_OPT
1043 FCOMMON_OPT = -O2 -frecursive
1044 endif
1045
1046
1047
1048 override CFLAGS     += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
1049 override PFLAGS     += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
1050
1051 override FFLAGS     += $(COMMON_OPT) $(FCOMMON_OPT)
1052 override FPFLAGS    += $(FCOMMON_OPT) $(COMMON_PROF)
1053 #MAKEOVERRIDES =
1054
1055 #For LAPACK Fortran codes.
1056 #Disable -fopenmp for LAPACK Fortran codes on Windows.
1057 ifdef OS_WINDOWS
1058 LAPACK_FFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FFLAGS))
1059 LAPACK_FPFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FPFLAGS))
1060 else
1061 LAPACK_FFLAGS := $(FFLAGS)
1062 LAPACK_FPFLAGS := $(FPFLAGS)
1063 endif
1064
1065 LAPACK_CFLAGS = $(CFLAGS)
1066 LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
1067 ifdef INTERFACE64
1068 ifneq ($(INTERFACE64), 0)
1069 LAPACK_CFLAGS +=  -DLAPACK_ILP64
1070 endif
1071 endif
1072
1073 ifdef OS_WINDOWS
1074 LAPACK_CFLAGS +=  -DOPENBLAS_OS_WINDOWS
1075 endif
1076 ifeq ($(C_COMPILER), LSB)
1077 LAPACK_CFLAGS +=  -DLAPACK_COMPLEX_STRUCTURE
1078 endif
1079
1080 ifndef SUFFIX
1081 SUFFIX  = o
1082 endif
1083
1084 ifndef PSUFFIX
1085 PSUFFIX = po
1086 endif
1087
1088 ifndef LIBSUFFIX
1089 LIBSUFFIX = a
1090 endif
1091
1092 ifneq ($(DYNAMIC_ARCH), 1)
1093 ifndef SMP
1094 LIBNAME         = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
1095 LIBNAME_P       = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
1096 else
1097 LIBNAME         = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
1098 LIBNAME_P       = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
1099 endif
1100 else
1101 ifndef SMP
1102 LIBNAME         = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
1103 LIBNAME_P       = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
1104 else
1105 LIBNAME         = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
1106 LIBNAME_P       = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
1107 endif
1108 endif
1109
1110
1111 LIBDLLNAME   = $(LIBPREFIX).dll
1112 LIBSONAME    = $(LIBNAME:.$(LIBSUFFIX)=.so)
1113 LIBDYNNAME   = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
1114 LIBDEFNAME   = $(LIBNAME:.$(LIBSUFFIX)=.def)
1115 LIBEXPNAME   = $(LIBNAME:.$(LIBSUFFIX)=.exp)
1116 LIBZIPNAME   = $(LIBNAME:.$(LIBSUFFIX)=.zip)
1117
1118 LIBS            = $(TOPDIR)/$(LIBNAME)
1119 LIBS_P          = $(TOPDIR)/$(LIBNAME_P)
1120
1121
1122 LIB_COMPONENTS = BLAS
1123 ifneq ($(NO_CBLAS), 1)
1124 LIB_COMPONENTS += CBLAS
1125 endif
1126
1127 ifneq ($(NO_LAPACK), 1)
1128 LIB_COMPONENTS += LAPACK
1129 ifneq ($(NO_LAPACKE), 1)
1130 LIB_COMPONENTS += LAPACKE
1131 endif
1132 ifeq ($(BUILD_RELAPACK), 1)
1133 LIB_COMPONENTS += ReLAPACK
1134 endif
1135 endif
1136
1137 ifeq ($(ONLY_CBLAS), 1)
1138 LIB_COMPONENTS = CBLAS
1139 endif
1140
1141 export OSNAME
1142 export ARCH
1143 export CORE
1144 export LIBCORE
1145 export PGCPATH
1146 export CONFIG
1147 export CC
1148 export FC
1149 export BU
1150 export FU
1151 export NEED2UNDERSCORES
1152 export USE_THREAD
1153 export NUM_THREADS
1154 export NUM_CORES
1155 export SMP
1156 export MAKEFILE_RULE
1157 export NEED_PIC
1158 export BINARY
1159 export BINARY32
1160 export BINARY64
1161 export F_COMPILER
1162 export C_COMPILER
1163 export USE_OPENMP
1164 export CROSS
1165 export CROSS_SUFFIX
1166 export NOFORTRAN
1167 export NO_FBLAS
1168 export EXTRALIB
1169 export CEXTRALIB
1170 export FEXTRALIB
1171 export HAVE_SSE
1172 export HAVE_SSE2
1173 export HAVE_SSE3
1174 export HAVE_SSSE3
1175 export HAVE_SSE4_1
1176 export HAVE_SSE4_2
1177 export HAVE_SSE4A
1178 export HAVE_SSE5
1179 export HAVE_AVX
1180 export HAVE_VFP
1181 export HAVE_VFPV3
1182 export HAVE_VFPV4
1183 export HAVE_NEON
1184 export HAVE_MSA
1185 export MSA_FLAGS
1186 export KERNELDIR
1187 export FUNCTION_PROFILE
1188 export TARGET_CORE
1189
1190 export SGEMM_UNROLL_M
1191 export SGEMM_UNROLL_N
1192 export DGEMM_UNROLL_M
1193 export DGEMM_UNROLL_N
1194 export QGEMM_UNROLL_M
1195 export QGEMM_UNROLL_N
1196 export CGEMM_UNROLL_M
1197 export CGEMM_UNROLL_N
1198 export ZGEMM_UNROLL_M
1199 export ZGEMM_UNROLL_N
1200 export XGEMM_UNROLL_M
1201 export XGEMM_UNROLL_N
1202 export CGEMM3M_UNROLL_M
1203 export CGEMM3M_UNROLL_N
1204 export ZGEMM3M_UNROLL_M
1205 export ZGEMM3M_UNROLL_N
1206 export XGEMM3M_UNROLL_M
1207 export XGEMM3M_UNROLL_N
1208
1209
1210 ifdef USE_CUDA
1211 export CUDADIR
1212 export CUCC
1213 export CUFLAGS
1214 export CULIB
1215 endif
1216
1217 .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
1218
1219 .f.$(SUFFIX):
1220         $(FC) $(FFLAGS) -c $<  -o $(@F)
1221
1222 .f.$(PSUFFIX):
1223         $(FC) $(FPFLAGS) -pg -c $<  -o $(@F)
1224
1225
1226 ifdef BINARY64
1227 PATHSCALEPATH   = /opt/pathscale/lib/3.1
1228 PGIPATH         = /opt/pgi/linux86-64/7.1-5/lib
1229 else
1230 PATHSCALEPATH   = /opt/pathscale/lib/3.1/32
1231 PGIPATH         = /opt/pgi/linux86/7.1-5/lib
1232 endif
1233
1234 ACMLPATH        = /opt/acml/4.3.0
1235 ifneq ($(OSNAME), Darwin)
1236 MKLPATH         = /opt/intel/mkl/10.2.2.025/lib
1237 else
1238 MKLPATH         = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
1239 endif
1240 ATLASPATH       = /opt/atlas/3.9.17/opteron
1241 FLAMEPATH       = $(HOME)/flame/lib
1242 ifneq ($(OSNAME), SunOS)
1243 SUNPATH         = /opt/sunstudio12.1
1244 else
1245 SUNPATH         = /opt/SUNWspro
1246 endif