Merge pull request #3216 from xianyi/develop
[platform/upstream/openblas.git] / Makefile.x86_64
1 # CCOMMON_OPT   += -DFASTCPU
2
3 ifeq ($(OSNAME), SunOS)
4 ifdef BINARY64
5 ifeq ($(F_COMPILER), SUN)
6 FCOMMON_OPT += -m64
7 endif
8 endif
9 endif
10
11
12 ifndef DYNAMIC_ARCH
13 ADD_CPUFLAGS = 1
14 else
15 ifdef TARGET_CORE
16 ADD_CPUFLAGS = 1
17 endif
18 endif
19
20 ifdef ADD_CPUFLAGS
21 ifdef HAVE_SSE3
22 CCOMMON_OPT += -msse3
23 ifneq ($(F_COMPILER), NAG)
24 FCOMMON_OPT += -msse3
25 endif
26 endif
27 ifdef HAVE_SSSE3
28 CCOMMON_OPT += -mssse3
29 ifneq ($(F_COMPILER), NAG)
30 FCOMMON_OPT += -mssse3
31 endif
32 endif
33 ifdef HAVE_SSE4_1
34 CCOMMON_OPT += -msse4.1
35 ifneq ($(F_COMPILER), NAG)
36 FCOMMON_OPT += -msse4.1
37 endif
38 endif
39 ifndef OLDGCC
40 ifdef HAVE_AVX
41 CCOMMON_OPT += -mavx
42 ifneq ($(F_COMPILER), NAG)
43 FCOMMON_OPT += -mavx
44 endif
45 endif
46 endif
47 ifndef NO_AVX2
48 ifdef HAVE_AVX2
49 CCOMMON_OPT += -mavx2
50 ifneq ($(F_COMPILER), NAG)
51 FCOMMON_OPT += -mavx2
52 endif
53 endif
54 endif
55
56 ifeq ($(CORE), SKYLAKEX)
57 ifndef NO_AVX512
58 CCOMMON_OPT += -march=skylake-avx512
59 ifneq ($(F_COMPILER), NAG)
60 FCOMMON_OPT += -march=skylake-avx512
61 endif
62 ifeq ($(OSNAME), CYGWIN_NT)
63 CCOMMON_OPT += -fno-asynchronous-unwind-tables
64 FCOMMON_OPT += -fno-asynchronous-unwind-tables
65 endif
66 ifeq ($(OSNAME), WINNT)
67 ifeq ($(C_COMPILER), GCC)
68 CCOMMON_OPT += -fno-asynchronous-unwind-tables
69 FCOMMON_OPT += -fno-asynchronous-unwind-tables
70 endif
71 endif
72 endif
73 endif
74
75 ifeq ($(CORE), COOPERLAKE)
76 ifndef NO_AVX512
77 ifeq ($(C_COMPILER), GCC)
78 # cooperlake support was added in 10.1
79 ifeq ($(GCCVERSIONGTEQ10)$(GCCMINORVERSIONGTEQ1), 11)
80 CCOMMON_OPT += -march=cooperlake
81 ifneq ($(F_COMPILER), NAG)
82 FCOMMON_OPT += -march=cooperlake
83 endif
84 endif
85 endif
86 ifeq ($(OSNAME), CYGWIN_NT)
87 CCOMMON_OPT += -fno-asynchronous-unwind-tables
88 FCOMMON_OPT += -fno-asynchronous-unwind-tables
89 endif
90 ifeq ($(OSNAME), WINNT)
91 ifeq ($(C_COMPILER), GCC)
92 CCOMMON_OPT += -fno-asynchronous-unwind-tables
93 FCOMMON_OPT += -fno-asynchronous-unwind-tables
94 endif
95 endif
96 endif
97 endif
98
99 ifdef HAVE_AVX2
100 ifndef NO_AVX2
101 ifeq ($(C_COMPILER), GCC)
102 # AVX2 support was added in 4.7.0
103 GCCVERSIONCHECK := $(GCCVERSIONGT4)$(GCCVERSIONGTEQ4)$(GCCMINORVERSIONGTEQ7)
104 ifeq ($(GCCVERSIONCHECK), $(filter $(GCCVERSIONCHECK), 011 110 111))
105 CCOMMON_OPT += -mavx2
106 endif
107 else 
108 ifeq ($(C_COMPILER), CLANG)
109 CCOMMON_OPT += -mavx2
110 endif
111 endif
112 ifeq ($(F_COMPILER), GFORTRAN)
113 # AVX2 support was added in 4.7.0
114 GCCVERSIONGTEQ4 := $(shell expr `$(FC) -dumpversion | cut -f1 -d.` \>= 4)
115 GCCVERSIONGTEQ5 := $(shell expr `$(FC) -dumpversion | cut -f1 -d.` \>= 5)
116 GCCMINORVERSIONGTEQ7 := $(shell expr `$(FC) -dumpversion | cut -f2 -d.` \>= 7)
117 GCCVERSIONCHECK := $(GCCVERSIONGTEQ5)$(GCCVERSIONGTEQ4)$(GCCMINORVERSIONGTEQ7)
118 ifeq ($(GCCVERSIONCHECK), $(filter $(GCCVERSIONCHECK), 011 110 111))
119 FCOMMON_OPT += -mavx2
120 endif
121 else
122 ifeq ($(F_COMPILER), FLANG)
123 FCOMMON_OPT += -mavx2
124 endif
125 endif
126 endif
127 endif
128
129 endif
130
131
132 ifeq ($(OSNAME), Interix)
133 ARFLAGS         = -m x64
134 endif
135
136 ifeq ($(OSNAME), Darwin)
137 ifndef SMP
138 LIBMKL          = -L$(MKLPATH)/em64t -Wl,-rpath,$(MKLPATH)/em64t -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lguide -lpthread -lm
139 else
140 LIBMKL          = -L$(MKLPATH)/em64t -Wl,-rpath,$(MKLPATH)/em64t -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -lguide -lpthread -lm
141 endif
142 else
143 ifndef SMP
144 LIBMKL          = -L$(MKLPATH)/em64t -Wl,-rpath,$(MKLPATH)/em64t -Wl,--start-group -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -Wl,--end-group -lguide -lpthread -lm
145 else
146 LIBMKL          = -L$(MKLPATH)/em64t -Wl,-rpath,$(MKLPATH)/em64t -Wl,--start-group -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -Wl,--end-group -lguide -lpthread -lm
147 endif
148 endif
149
150
151 ifndef SMP
152 LIBATLAS        = -L$(ATLASPATH)64 -llapack -lcblas -lf77blas -latlas -lm
153 else
154 LIBATLAS        = -L$(ATLASPATH)64 -llapack -lptcblas -lptf77blas -latlas -lpthread -lm
155 endif
156
157 LIBFLAME        = -L$(FLAMEPATH) -llapack2flame -lflame $(TOPDIR)/$(LIBNAME) -lgfortran -lpthread -lm
158
159
160 ifeq ($(F_COMPILER), g77)
161 LIBACML         = -L$(ACMLPATH)/gnu64/lib -Wl,-rpath,$(ACMLPATH)/gnu64/lib -lacml -lacml_mv -lg2c -lm
162 endif
163
164 ifeq ($(F_COMPILER), GFORTRAN)
165 ifndef SMP
166 LIBACML         = -L$(ACMLPATH)/gfortran64/lib -Wl,-rpath,$(ACMLPATH)/gfortran64/lib -lacml -lacml_mv -lgfortran -lm
167 else
168 LIBACML         = -L$(ACMLPATH)/gfortran64_mp/lib -Wl,-rpath,$(ACMLPATH)/gfortran64_mp/lib -lacml_mp -lacml_mv -lgfortran -lgomp -lm
169 endif
170 endif
171
172 ifeq ($(F_COMPILER), INTEL)
173 ifndef SMP
174 LIBACML         = -L$(ACMLPATH)/ifort64/lib -Wl,-rpath,$(ACMLPATH)/ifort64/lib -lacml -lacml_mv -lifcoremt_pic -lirc -lm -lpthread -ldl
175 else
176 LIBACML         = -L$(ACMLPATH)/ifort64_mp/lib -Wl,-rpath,$(ACMLPATH)/ifort64_mp/lib -lacml_mp -lacml_mv -lifcoremt_pic -liomp5 -lirc -lm -lpthread -ldl
177 endif
178 endif
179
180 ifeq ($(F_COMPILER), OPEN64)
181 ifndef SMP
182 LIBACML         = -L$(ACMLPATH)/open64/lib -Wl,-rpath,$(ACMLPATH)/open64/lib -lacml -lacml_mv -lm
183 else
184 LIBACML         = -L$(ACMLPATH)/open64_mp/lib -Wl,-rpath,$(ACMLPATH)/open64_mp/lib -lacml_mp -lacml_mv -lm -lpthread
185 endif
186 endif
187
188 ifeq ($(F_COMPILER), pgf77)
189 ifndef SMP
190 LIBACML         = -L$(ACMLPATH)/pgi64/lib    -Wl,-rpath,$(ACMLPATH)/pgi64/lib    -lacml -lacml_mv -L$(PGIPATH) -Wl,-rpath,$(PGIPATH) -lpgftnrtl -lnspgc -lpgmp -lpgc
191 else
192 LIBACML         = -L$(ACMLPATH)/pgi64_mp/lib -Wl,-rpath,$(ACMLPATH)/pgi64_mp/lib -lacml -lacml_mv -L$(PGIPATH) -Wl,-rpath,$(PGIPATH) -lpgftnrtl -lnspgc -lpgmp -lpgc
193 endif
194 endif
195
196 ifeq ($(F_COMPILER), PATHSCALE)
197 ifndef SMP
198 LIBACML         = -L$(ACMLPATH)/pathscale64/lib -Wl,-rpath,$(ACMLPATH)/pathscale64/lib -lacml -lacml_mv -Wl,-rpath,$(PATHSCALEPATH) -L$(PATHSCALEPATH) -lpathfortran -lm
199 else
200 LIBACML         = -L$(ACMLPATH)/pathscale64_mp/lib -Wl,-rpath,$(ACMLPATH)/pathscale64_mp/lib -lacml_mp -lacml_mv -Wl,-rpath,$(PATHSCALEPATH) -L$(PATHSCALEPATH) -lopenmp -lpathfortran -lm
201 endif
202 endif
203
204 ifeq ($(F_COMPILER), f90)
205 LIBACML         = -L$(ACMLPATH)/sun64/lib -Wl,-R,$(ACMLPATH)/sun64/lib -L$(SUNPATH)/lib/amd64 -Wl,-R,$(SUNPATH)/lib/amd64 -lacml -lacml_mv -lfsu
206 endif
207
208 LIBSUNPERF      = -L$(SUNPATH)/lib/amd64 -L$(SUNPATH)/rtlibs/amd64 -Wl,-R,$(SUNPATH)/lib/amd64  -Wl,-R,$(SUNPATH)/rtlibs/amd64 -lsunperf -lfui -lfsu -lmtsk
209
210 LIBVECLIB       = /System/Library/Frameworks/vecLib.framework/Versions/Current/vecLib