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