28a0bae08edf68b9c2389b633585529c12d3f787
[platform/upstream/openblas.git] / Makefile.power
1
2 ifdef USE_THREAD
3 ifeq ($(USE_THREAD), 0)
4 USE_OPENMP = 0
5 else
6 USE_OPENMP = 1
7 endif
8 else
9 USE_OPENMP = 1
10 endif
11
12 ifeq ($(CORE), POWER10)
13 ifneq ($(C_COMPILER), PGI)
14 CCOMMON_OPT += -Ofast -mcpu=power10 -mtune=power10 -mvsx -fno-fast-math
15 ifeq ($(F_COMPILER), IBM)
16 FCOMMON_OPT += -O2 -qrecur -qnosave
17 else
18 FCOMMON_OPT += -O2 -frecursive -mcpu=power10 -mtune=power10  -fno-fast-math
19 endif
20 endif
21 endif
22
23 ifeq ($(CORE), POWER9)
24 ifneq ($(C_COMPILER), PGI)
25 CCOMMON_OPT += -Ofast -mvsx -fno-fast-math
26 ifeq ($(C_COMPILER), GCC)
27 ifneq ($(GCCVERSIONGT4), 1)
28 $(warning your compiler is too old to fully support POWER9, getting a newer version of gcc is recommended)
29 CCOMMON_OPT += -mcpu=power8 -mtune=power8 
30 else
31 CCOMMON_OPT += -mcpu=power9 -mtune=power9 
32 endif
33 else
34 CCOMMON_OPT += -mcpu=power9 -mtune=power9
35 endif
36 else
37 CCOMMON_OPT += -fast -Mvect=simd -Mcache_align
38 endif
39 ifneq ($(F_COMPILER), PGI)
40 ifeq ($(F_COMPILER), IBM)
41 FCOMMON_OPT += -O2 -qrecur -qnosave
42 else
43 FCOMMON_OPT += -O2 -frecursive -fno-fast-math
44 endif
45 ifeq ($(C_COMPILER), GCC)
46 ifneq ($(GCCVERSIONGT4), 1)
47 $(warning your compiler is too old to fully support POWER9, getting a newer version of gcc is recommended)
48 FCOMMON_OPT += -mcpu=power8 -mtune=power8 
49 else
50 FCOMMON_OPT += -mcpu=power9 -mtune=power9 
51 endif
52 else
53 FCOMMON_OPT += -mcpu=power9 -mtune=power9
54 endif
55 else
56 FCOMMON_OPT += -O2 -Mrecursive
57 endif
58 endif
59
60 ifeq ($(CORE), POWER8)
61 ifneq ($(C_COMPILER), PGI)
62 CCOMMON_OPT += -Ofast -mcpu=power8 -mtune=power8 -mvsx  -fno-fast-math
63 else
64 CCOMMON_OPT += -fast -Mvect=simd -Mcache_align
65 endif
66 ifneq ($(F_COMPILER), PGI)
67 ifeq ($(OSNAME), AIX)
68 ifeq ($(F_COMPILER), IBM)
69 FCOMMON_OPT += -O2 -qrecur -qnosave
70 else
71 FCOMMON_OPT += -O1 -frecursive -mcpu=power8 -mtune=power8  -fno-fast-math 
72 endif
73 else
74 FCOMMON_OPT += -O2 -frecursive -mcpu=power8 -mtune=power8  -fno-fast-math 
75 endif
76 else
77 FCOMMON_OPT += -O2 -Mrecursive
78 endif
79 endif
80
81 ifeq ($(USE_OPENMP), 1)
82 ifneq ($(C_COMPILER), PGI)
83 CCOMMON_OPT += -DUSE_OPENMP -fopenmp
84 else
85 CCOMMON_OPT += -DUSE_OPENMP -mp
86 endif
87 ifneq ($(F_COMPILER), PGI)
88 FCOMMON_OPT += -DUSE_OPENMP -fopenmp
89 else
90 FCOMMON_OPT += -DUSE_OPENMP -mp
91 endif
92 endif
93
94 # workaround for C->FORTRAN ABI violation in LAPACKE
95 ifeq ($(F_COMPILER), GFORTRAN)
96 FCOMMON_OPT += -fno-optimize-sibling-calls
97 endif
98
99 FLAMEPATH       = $(HOME)/flame/lib
100
101 #ifeq ($(CORE), CELL)
102 #CELL_SDK_ROOT = /opt/IBM/cell-sdk-1.1/sysroot/usr
103 #SPU_CC          = spu-gcc
104 #EXTRALIB       += -lspe
105 #endif
106
107 ifeq ($(OSNAME), Linux)
108 ifdef BINARY64
109 # COMPILER_PREFIX = powerpc64-linux-
110 else
111 # COMPILER_PREFIX = powerpc-linux-
112 endif
113 endif
114
115 #Either uncomment below line or run make with `USE_MASS=1` to enable support of MASS library
116 #USE_MASS = 1
117
118 ifeq ($(USE_MASS), 1)
119 # Path to MASS libs, change it if the libs are installed at any other location
120 MASSPATH        = /opt/ibm/xlmass/8.1.5/lib
121 COMMON_OPT     += -mveclibabi=mass -ftree-vectorize -funsafe-math-optimizations -DUSE_MASS
122 EXTRALIB       += -L$(MASSPATH) -lmass -lmassvp8 -lmass_simdp8
123 endif
124
125 ifdef BINARY64
126
127
128 ifeq ($(OSNAME), AIX)
129 CCOMMON_OPT     += -mpowerpc64 -maix64
130 ifeq ($(COMPILER_F77), g77)
131 FCOMMON_OPT     += -mpowerpc64 -maix64
132 endif
133 ifeq ($(F_COMPILER), GFORTRAN)
134 FCOMMON_OPT     += -mpowerpc64 -maix64
135 endif
136 ifeq ($(COMPILER_F77), xlf)
137 FCOMMON_OPT     += -q64
138 endif
139 ARFLAGS         = -X 64
140 ASFLAGS         = -a64
141 endif
142 else
143 ifeq ($(OSNAME), AIX)
144 CCOMMON_OPT     += -Wa,-a32
145 ARFLAGS         = -X 32
146 ASFLAGS         = -a32
147 endif
148 endif
149
150 # CCOMMON_OPT   += -maltivec -mabi=altivec
151
152 LIBFLAME        = -L$(FLAMEPATH) -llapack2flame -lflame-lapack -lflame-base $(LIBS)
153
154 ifeq ($(OSNAME), Darwin)
155 CCOMMON_OPT     += -force_cpusubtype_ALL
156 endif
157
158
159 ifndef BINARY64
160 ifeq ($(OSNAME), Linux)
161 ESSLPATH = -L/opt/ibmcmp/lib -L/opt/ibmcmp/xlf/11.1/lib -Wl,-rpath,/opt/ibmcmp/lib -Wl,-rpath,/opt/ibmcmp/xlf/11.1/lib -lxlf90_r -lxlomp_ser -lxlfmath -lxl -lpthread
162 else
163 ESSLPATH = -lxlf90_r
164 endif
165
166
167 LIBVECLIB       = -framework VecLib
168 ifndef SMP
169 LIBATLAS        = -L/usr/lib/atlas3.7.11 -lf77blas -latlas -lg2c -lm
170 LIBESSL         = -lessl $(ESSLPATH) ../../level1/others/libmisc.a -lm
171 else
172 LIBATLAS        = -L/usr/lib/atlas3.7.11p -lptf77blas -latlas -lm -lpthread
173 LIBESSL         = -lesslsmp $(ESSLPATH)  ../../level1/others/libmisc.a -lm
174 endif
175 else
176 ifeq ($(OSNAME), Linux)
177 ESSLPATH = -L/opt/ibmcmp/lib64 -Wl,-rpath,/opt/ibmcmp/lib64 -L/opt/ibmcmp/xlf/11.1/lib64 -Wl,-rpath,/opt/ibmcmp/xlf/11.1/lib64 -lxlf90_r -lxlomp_ser
178 else
179 ESSLPATH = -lxlf90_r
180 endif
181
182 LIBVECLIB       = /System/Library/Frameworks/vecLib.framework/Versions/Current/vecLib
183
184 ifndef SMP
185 LIBATLAS        = -L/usr/lib64/atlas3.7.11  -lf77blas -latlas -lg2c -lm
186 LIBESSL         = -lessl $(ESSLPATH) -lm
187 else
188 LIBATLAS        = -L/usr/lib64/atlas3.7.11p -lptf77blas -latlas -lm -lpthread
189 LIBESSL         = -lesslsmp $(ESSLPATH) -lxlsmp -lm
190 endif
191 endif