1TOPDIR	= ..
2include ../Makefile.system
3ifeq ($(F_COMPILER),GFORTRAN)
4        override FFLAGS += -fno-tree-vectorize
5endif
6
7ifeq ($(NOFORTRAN),1)
8all ::
9else
10all :: level1 level2 level3
11endif
12
13ifeq ($(BUILD_SINGLE),1)
14S1=sblat1
15endif
16ifeq ($(BUILD_DOUBLE),1)
17D1=dblat1
18endif
19ifeq ($(BUILD_COMPLEX),1)
20C1=cblat1
21endif
22ifeq ($(BUILD_COMPLEX16),1)
23Z1=zblat1
24endif
25
26level1: $(S1) $(D1) $(C1) $(Z1)
27
28ifneq ($(CROSS), 1)
29ifeq ($(BUILD_SINGLE),1)
30	OMP_NUM_THREADS=1 OMP_NUM_THREADS=1 ./sblat1
31endif
32ifeq ($(BUILD_DOUBLE),1)
33	OMP_NUM_THREADS=1 OMP_NUM_THREADS=1 ./dblat1
34endif
35ifeq ($(BUILD_COMPLEX),1)
36	OMP_NUM_THREADS=1 OMP_NUM_THREADS=1 ./cblat1
37endif
38ifeq ($(BUILD_COMPLEX16),1)
39	OMP_NUM_THREADS=1 OMP_NUM_THREADS=1 ./zblat1
40endif
41ifdef SMP
42ifeq ($(USE_OPENMP), 1)
43ifeq ($(BUILD_SINGLE),1)
44	OMP_NUM_THREADS=2 ./sblat1
45endif
46ifeq ($(BUILD_DOUBLE),1)
47	OMP_NUM_THREADS=2 ./dblat1
48endif
49ifeq ($(BUILD_COMPLEX),1)
50	OMP_NUM_THREADS=2 ./cblat1
51endif
52ifeq ($(BUILD_COMPLEX16),1)
53	OMP_NUM_THREADS=2 ./zblat1
54endif
55else
56ifeq ($(BUILD_SINGLE),1)
57	OMP_NUM_THREADS=2 ./sblat1
58endif
59ifeq ($(BUILD_DOUBLE),1)
60	OMP_NUM_THREADS=2 ./dblat1
61endif
62ifeq ($(BUILD_COMPLEX),1)
63	OMP_NUM_THREADS=2 ./cblat1
64endif
65ifeq ($(BUILD_COMPLEX16),1)
66	OMP_NUM_THREADS=2 ./zblat1
67endif
68endif
69endif
70endif
71
72ifeq ($(BUILD_SINGLE),1)
73S2=sblat2
74endif
75ifeq ($(BUILD_DOUBLE),1)
76D2=dblat2
77endif
78ifeq ($(BUILD_COMPLEX),1)
79C2=cblat2
80endif
81ifeq ($(BUILD_COMPLEX16),1)
82Z2=zblat2
83endif
84
85level2: $(S2) $(D2) $(C2) $(Z2)
86
87
88ifneq ($(CROSS), 1)
89	rm -f ?BLAT2.SUMM
90ifeq ($(BUILD_SINGLE),1)
91	OMP_NUM_THREADS=1 OMP_NUM_THREADS=1 ./sblat2 < ./sblat2.dat
92	@$(GREP) -q FATAL SBLAT2.SUMM && cat SBLAT2.SUMM || exit 0
93endif
94ifeq ($(BUILD_DOUBLE),1)
95	OMP_NUM_THREADS=1 OMP_NUM_THREADS=1 ./dblat2 < ./dblat2.dat
96	@$(GREP) -q FATAL DBLAT2.SUMM && cat DBLAT2.SUMM || exit 0
97endif
98ifeq ($(BUILD_COMPLEX),1)
99	OMP_NUM_THREADS=1 OMP_NUM_THREADS=1 ./cblat2 < ./cblat2.dat
100	@$(GREP) -q FATAL CBLAT2.SUMM && cat CBLAT2.SUMM || exit 0
101endif
102ifeq ($(BUILD_COMPLEX16),1)
103	OMP_NUM_THREADS=1 OMP_NUM_THREADS=1 ./zblat2 < ./zblat2.dat
104	@$(GREP) -q FATAL ZBLAT2.SUMM && cat ZBLAT2.SUMM || exit 0
105endif
106ifdef SMP
107	rm -f ?BLAT2.SUMM
108ifeq ($(USE_OPENMP), 1)
109ifeq ($(BUILD_SINGLE),1)
110	OMP_NUM_THREADS=2 ./sblat2 < ./sblat2.dat
111	@$(GREP) -q FATAL SBLAT2.SUMM && cat SBLAT2.SUMM || exit 0
112endif
113ifeq ($(BUILD_DOUBLE),1)
114	OMP_NUM_THREADS=2 ./dblat2 < ./dblat2.dat
115	@$(GREP) -q FATAL DBLAT2.SUMM && cat DBLAT2.SUMM || exit 0
116endif
117ifeq ($(BUILD_COMPLEX),1)
118	OMP_NUM_THREADS=2 ./cblat2 < ./cblat2.dat
119	@$(GREP) -q FATAL CBLAT2.SUMM && cat CBLAT2.SUMM || exit 0
120endif
121ifeq ($(BUILD_COMPLEX16),1)
122	OMP_NUM_THREADS=2 ./zblat2 < ./zblat2.dat
123	@$(GREP) -q FATAL ZBLAT2.SUMM && cat ZBLAT2.SUMM || exit 0
124endif
125else
126ifeq ($(BUILD_SINGLE),1)
127	OMP_NUM_THREADS=2 ./sblat2 < ./sblat2.dat
128	@$(GREP) -q FATAL SBLAT2.SUMM && cat SBLAT2.SUMM || exit 0
129endif
130ifeq ($(BUILD_DOUBLE),1)
131	OMP_NUM_THREADS=2 ./dblat2 < ./dblat2.dat
132	@$(GREP) -q FATAL DBLAT2.SUMM && cat DBLAT2.SUMM || exit 0
133endif
134ifeq ($(BUILD_COMPLEX),1)
135	OMP_NUM_THREADS=2 ./cblat2 < ./cblat2.dat
136	@$(GREP) -q FATAL CBLAT2.SUMM && cat CBLAT2.SUMM || exit 0
137endif
138ifeq ($(BUILD_COMPLEX16),1)
139	OMP_NUM_THREADS=2 ./zblat2 < ./zblat2.dat
140	@$(GREP) -q FATAL ZBLAT2.SUMM && cat ZBLAT2.SUMM || exit 0
141endif
142endif
143endif
144endif
145
146ifeq ($(BUILD_BFLOAT16),1)
147B3= test_sbgemm
148endif
149ifeq ($(BUILD_SINGLE),1)
150S3=sblat3
151endif
152ifeq ($(BUILD_DOUBLE),1)
153D3=dblat3
154endif
155ifeq ($(BUILD_COMPLEX),1)
156C3=cblat3
157endif
158ifeq ($(BUILD_COMPLEX16),1)
159Z3=zblat3
160endif
161
162level3: $(B3) $(S3) $(D3) $(C3) $(Z3)
163
164
165ifneq ($(CROSS), 1)
166	rm -f ?BLAT3.SUMM
167ifeq ($(BUILD_BFLOAT16),1)
168	OMP_NUM_THREADS=1 OMP_NUM_THREADS=1 ./test_sbgemm > SBBLAT3.SUMM
169	@$(GREP) -q FATAL SBBLAT3.SUMM && cat SBBLAT3.SUMM || exit 0
170endif
171ifeq ($(BUILD_SINGLE),1)
172	OMP_NUM_THREADS=1 OMP_NUM_THREADS=1 ./sblat3 < ./sblat3.dat
173	@$(GREP) -q FATAL SBLAT3.SUMM && cat SBLAT3.SUMM || exit 0
174endif
175ifeq ($(BUILD_DOUBLE),1)
176	OMP_NUM_THREADS=1 OMP_NUM_THREADS=1 ./dblat3 < ./dblat3.dat
177	@$(GREP) -q FATAL DBLAT3.SUMM && cat DBLAT3.SUMM || exit 0
178endif
179ifeq ($(BUILD_COMPLEX),1)
180	OMP_NUM_THREADS=1 OMP_NUM_THREADS=1 ./cblat3 < ./cblat3.dat
181	@$(GREP) -q FATAL CBLAT3.SUMM && cat CBLAT3.SUMM || exit 0
182endif
183ifeq ($(BUILD_COMPLEX16),1)
184	OMP_NUM_THREADS=1 OMP_NUM_THREADS=1 ./zblat3 < ./zblat3.dat
185	@$(GREP) -q FATAL ZBLAT3.SUMM && cat ZBLAT3.SUMM || exit 0
186endif
187ifdef SMP
188	rm -f ?BLAT3.SUMM
189ifeq ($(USE_OPENMP), 1)
190ifeq ($(BUILD_BFLOAT16),1)
191	OMP_NUM_THREADS=2 ./test_sbgemm > SBBLAT3.SUMM
192	@$(GREP) -q FATAL SBBLAT3.SUMM && cat SBBLAT3.SUMM || exit 0
193endif
194ifeq ($(BUILD_SINGLE),1)
195	OMP_NUM_THREADS=2 ./sblat3 < ./sblat3.dat
196	@$(GREP) -q FATAL SBLAT3.SUMM && cat SBLAT3.SUMM || exit 0
197endif
198ifeq ($(BUILD_DOUBLE),1)
199	OMP_NUM_THREADS=2 ./dblat3 < ./dblat3.dat
200	@$(GREP) -q FATAL DBLAT3.SUMM && cat DBLAT3.SUMM || exit 0
201endif
202ifeq ($(BUILD_COMPLEX),1)
203	OMP_NUM_THREADS=2 ./cblat3 < ./cblat3.dat
204	@$(GREP) -q FATAL CBLAT3.SUMM && cat CBLAT3.SUMM || exit 0
205endif
206ifeq ($(BUILD_COMPLEX16),1)
207	OMP_NUM_THREADS=2 ./zblat3 < ./zblat3.dat
208	@$(GREP) -q FATAL ZBLAT3.SUMM && cat ZBLAT3.SUMM || exit 0
209endif
210else
211ifeq ($(BUILD_BFLOAT16),1)
212	OMP_NUM_THREADS=2 ./test_sbgemm > SBBLAT3.SUMM
213	@$(GREP) -q FATAL SBBLAT3.SUMM && cat SBBLAT3.SUMM || exit 0
214endif
215ifeq ($(BUILD_SINGLE),1)
216	OMP_NUM_THREADS=2 ./sblat3 < ./sblat3.dat
217	@$(GREP) -q FATAL SBLAT3.SUMM && cat SBLAT3.SUMM || exit 0
218endif
219ifeq ($(BUILD_DOUBLE),1)
220	OMP_NUM_THREADS=2 ./dblat3 < ./dblat3.dat
221	@$(GREP) -q FATAL DBLAT3.SUMM && cat DBLAT3.SUMM || exit 0
222endif
223ifeq ($(BUILD_COMPLEX),1)
224	OMP_NUM_THREADS=2 ./cblat3 < ./cblat3.dat
225	@$(GREP) -q FATAL CBLAT3.SUMM && cat CBLAT3.SUMM || exit 0
226endif
227ifeq ($(BUILD_COMPLEX16),1)
228	OMP_NUM_THREADS=2 ./zblat3 < ./zblat3.dat
229	@$(GREP) -q FATAL ZBLAT3.SUMM && cat ZBLAT3.SUMM || exit 0
230endif
231endif
232endif
233endif
234
235
236level3_3m : zblat3_3m cblat3_3m
237ifneq ($(CROSS), 1)
238	rm -f ?BLAT3_3M.SUMM
239	OMP_NUM_THREADS=1 OMP_NUM_THREADS=1 ./cblat3_3m < ./cblat3_3m.dat
240	@$(GREP) -q FATAL CBLAT3_3M.SUMM && cat CBLAT3_3M.SUMM || exit 0
241	OMP_NUM_THREADS=1 OMP_NUM_THREADS=1 ./zblat3_3m < ./zblat3_3m.dat
242	@$(GREP) -q FATAL ZBLAT3_3M.SUMM && cat ZBLAT3_3M.SUMM || exit 0
243ifdef SMP
244	rm -f ?BLAT3_3M.SUMM
245ifeq ($(USE_OPENMP), 1)
246	OMP_NUM_THREADS=2 ./cblat3_3m < ./cblat3_3m.dat
247	@$(GREP) -q FATAL CBLAT3_3M.SUMM && cat CBLAT3_3M.SUMM || exit 0
248	OMP_NUM_THREADS=2 ./zblat3_3m < ./zblat3_3m.dat
249	@$(GREP) -q FATAL ZBLAT3_3M.SUMM && cat ZBLAT3_3M.SUMM || exit 0
250else
251	OMP_NUM_THREADS=2 ./cblat3_3m < ./cblat3_3m.dat
252	@$(GREP) -q FATAL CBLAT3_3M.SUMM && cat CBLAT3_3M.SUMM || exit 0
253	OMP_NUM_THREADS=2 ./zblat3_3m < ./zblat3_3m.dat
254	@$(GREP) -q FATAL ZBLAT3_3M.SUMM && cat ZBLAT3_3M.SUMM || exit 0
255endif
256endif
257endif
258
259
260
261
262FLDFLAGS = $(FFLAGS:-fPIC=) $(LDFLAGS)
263
264
265ifeq ($(USE_OPENMP), 1)
266ifeq ($(F_COMPILER), GFORTRAN)
267ifeq ($(C_COMPILER), CLANG)
268CEXTRALIB = -lomp
269endif
270endif
271ifeq ($(F_COMPILER), NAG)
272CEXTRALIB = -lgomp
273endif
274endif
275
276ifeq ($(BUILD_SINGLE),1)
277sblat1 : sblat1.$(SUFFIX) ../$(LIBNAME)
278	$(FC) $(FLDFLAGS) -o sblat1 sblat1.$(SUFFIX) ../$(LIBNAME) $(EXTRALIB) $(CEXTRALIB)
279
280sblat2 : sblat2.$(SUFFIX) ../$(LIBNAME)
281	$(FC) $(FLDFLAGS) -o sblat2 sblat2.$(SUFFIX) ../$(LIBNAME) $(EXTRALIB) $(CEXTRALIB)
282
283sblat3 : sblat3.$(SUFFIX) ../$(LIBNAME)
284	$(FC) $(FLDFLAGS) -o sblat3 sblat3.$(SUFFIX) ../$(LIBNAME) $(EXTRALIB) $(CEXTRALIB)
285endif
286
287ifeq ($(BUILD_DOUBLE),1)
288dblat1 : dblat1.$(SUFFIX) ../$(LIBNAME)
289	$(FC) $(FLDFLAGS) -o dblat1 dblat1.$(SUFFIX) ../$(LIBNAME) $(EXTRALIB) $(CEXTRALIB)
290
291dblat2 : dblat2.$(SUFFIX) ../$(LIBNAME)
292	$(FC) $(FLDFLAGS) -o dblat2 dblat2.$(SUFFIX) ../$(LIBNAME) $(EXTRALIB) $(CEXTRALIB)
293
294dblat3 : dblat3.$(SUFFIX) ../$(LIBNAME)
295	$(FC) $(FLDFLAGS) -o dblat3 dblat3.$(SUFFIX) ../$(LIBNAME) $(EXTRALIB) $(CEXTRALIB)
296else
297dblat2:
298dblat3:
299endif
300
301
302qblat1 : qblat1.$(SUFFIX) ../$(LIBNAME)
303	$(FC) $(FLDFLAGS) -o qblat1 qblat1.$(SUFFIX) ../$(LIBNAME) $(EXTRALIB) $(CEXTRALIB)
304
305ifeq ($(BUILD_COMPLEX),1)
306cblat1 : cblat1.$(SUFFIX) ../$(LIBNAME)
307	$(FC) $(FLDFLAGS) -o cblat1 cblat1.$(SUFFIX) ../$(LIBNAME) $(EXTRALIB) $(CEXTRALIB)
308
309cblat2 : cblat2.$(SUFFIX) ../$(LIBNAME)
310	$(FC) $(FLDFLAGS) -o cblat2 cblat2.$(SUFFIX) ../$(LIBNAME) $(EXTRALIB) $(CEXTRALIB)
311
312cblat3 : cblat3.$(SUFFIX) ../$(LIBNAME)
313	$(FC) $(FLDFLAGS) -o cblat3 cblat3.$(SUFFIX) ../$(LIBNAME) $(EXTRALIB) $(CEXTRALIB)
314endif
315
316ifeq ($(BUILD_COMPLEX16),1)
317zblat1 : zblat1.$(SUFFIX) ../$(LIBNAME)
318	$(FC) $(FLDFLAGS) -o zblat1 zblat1.$(SUFFIX) ../$(LIBNAME) $(EXTRALIB) $(CEXTRALIB)
319
320zblat2 : zblat2.$(SUFFIX) ../$(LIBNAME)
321	$(FC) $(FLDFLAGS) -o zblat2 zblat2.$(SUFFIX) ../$(LIBNAME) $(EXTRALIB) $(CEXTRALIB)
322
323zblat3 : zblat3.$(SUFFIX) ../$(LIBNAME)
324	$(FC) $(FLDFLAGS) -o zblat3 zblat3.$(SUFFIX) ../$(LIBNAME) $(EXTRALIB) $(CEXTRALIB)
325endif
326
327ifeq ($(BUILD_BFLOAT16),1)
328test_sbgemm : compare_sgemm_sbgemm.c ../$(LIBNAME)
329	$(FC) $(FLDFLAGS) -o test_sbgemm compare_sgemm_sbgemm.c ../$(LIBNAME) $(EXTRALIB) $(CEXTRALIB)
330endif
331
332ifeq ($(BUILD_COMPLEX),1)
333cblat3_3m : cblat3_3m.$(SUFFIX) ../$(LIBNAME)
334	$(FC) $(FLDFLAGS) -o cblat3_3m cblat3_3m.$(SUFFIX) ../$(LIBNAME) $(EXTRALIB) $(CEXTRALIB)
335endif
336
337ifeq ($(BUILD_COMPLEX16),1)
338zblat3_3m : zblat3_3m.$(SUFFIX) ../$(LIBNAME)
339	$(FC) $(FLDFLAGS) -o zblat3_3m zblat3_3m.$(SUFFIX) ../$(LIBNAME) $(EXTRALIB) $(CEXTRALIB)
340endif
341
342
343
344clean:
345	@rm -f *.$(SUFFIX) *.$(PSUFFIX) gmon.$(SUFFIX)ut *.SUMM *.cxml *.exe *.pdb *.dwf \
346	sblat1 dblat1 cblat1 zblat1 \
347	sblat2 dblat2 cblat2 zblat2 \
348	test_sbgemm sblat3 dblat3 cblat3 zblat3 \
349	sblat1p dblat1p cblat1p zblat1p \
350	sblat2p dblat2p cblat2p zblat2p \
351	sblat3p dblat3p cblat3p zblat3p \
352	zblat3_3m zblat3_3mp \
353	cblat3_3m cblat3_3mp \
354	*.stackdump *.dll
355
356libs:
357
358prof:
359
360quick :
361	$(MAKE) -C $(TOPDIR) libs
362
363# include ../Makefile.tail
364