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