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