Makefile 19.4 KB
Newer Older
1
2
3
# All included makefiles refer to 
# the official SDAccel GitHub repository / aws_2017.4 branch.
# These are not modified at all. In case custom configuration is required, 
Leonardo Solis's avatar
Leonardo Solis committed
4
# the corresponding vars of these makefiles are modified from here.
5
COMMON_REPO := ../SDAccel_Examples
lvs's avatar
lvs committed
6

7
# Common Includes
lvs's avatar
lvs committed
8
9
10
11
include $(COMMON_REPO)/utility/boards.mk
include $(COMMON_REPO)/libs/xcl2/xcl2.mk
include $(COMMON_REPO)/libs/opencl/opencl.mk

12
13
# Added to fix the unnecessarily required pointer 
# to global memory in each kernel
Leonardo Solis's avatar
Leonardo Solis committed
14
DUMMYGLOBPOINTER_FLAGS=
lvs's avatar
lvs committed
15

16
ifeq ($(TARGETS), sw_emu)
Leonardo Solis's avatar
Leonardo Solis committed
17
	DUMMYGLOBPOINTER_FLAGS=-DSW_EMU
18
endif
lvs's avatar
lvs committed
19

20
# Enable Kernels
Leonardo Solis's avatar
Leonardo Solis committed
21
22
23
24
25
26
27
28
ENABLE_KERNELS = -DENABLE_KRNL_GA \
		 -DENABLE_KRNL_CONFORM \
		 -DENABLE_KRNL_INTERE \
		 -DENABLE_KRNL_INTRAE \
		 -DENABLE_KRNL_PRNG_BT_USHORT_FLOAT \
		 -DENABLE_KRNL_PRNG_GG_UCHAR \
		 -DENABLE_KRNL_PRNG_GG_FLOAT \
		 -DENABLE_KRNL_IGL_ARBITER
29
30
31
32
33
34
35

# Fixed-point
# FIxed-POint COform flag (FIPOCO)
FIXED_POINT_CONFORM=NO
FIXED_POINT_INTERE=NO
FIXED_POINT_INTRAE=NO

Leonardo Solis's avatar
Leonardo Solis committed
36
ifeq ($(FIXED_POINT_CONFORM), YES) 
37
38
39
40
41
	FIPOCO_FLAG=-DFIXED_POINT_CONFORM
else	
	FIPOCO_FLAG=
endif

Leonardo Solis's avatar
Leonardo Solis committed
42
ifeq ($(FIXED_POINT_INTERE), YES) 
43
	FIPOIE_FLAG=-DFIXED_POINT_INTERE
Leonardo Solis's avatar
Leonardo Solis committed
44
else
45
46
47
48
49
50
51
52
53
	FIPOIE_FLAG=
endif

ifeq ($(FIXED_POINT_INTRAE), YES)
	FIPOIA_FLAG=-DFIXED_POINT_INTRAE
else	
	FIPOIA_FLAG=
endif

Leonardo Solis's avatar
Leonardo Solis committed
54
55
FIPO_FLAG = $(FIPOCO_FLAG) \
	    $(FIPOIE_FLAG) \
56
	    $(FIPOIA_FLAG)
57

Leonardo Solis's avatar
Leonardo Solis committed
58
# Other configs
59
60


Leonardo Solis's avatar
Leonardo Solis committed
61
# Overall custom configs
62
CONFIG_FLAG = $(FIPO_FLAG)
63

Leonardo Solis's avatar
Leonardo Solis committed
64
CXXFLAGS:=-Wall -O0 -g -std=c++14 $(DUMMYGLOBPOINTER_FLAGS)
65
66

# Host Application
lvs's avatar
lvs committed
67

68
hostbin_SRCS=$(wildcard ./host/src/*.cpp) \
lvs's avatar
lvs committed
69
70
71
		$(oclHelper_SRCS) \
		$(xcl2_SRCS)

lvs's avatar
lvs committed
72
hostbin_HDRS=$(wildcard ./host/inc/*.h) \
lvs's avatar
lvs committed
73
74
75
76
		$(xcl2_HDRS)

# -U__STRICT_ANSI__: to avoid: ‘cl_float3 {aka union cl_float4}’ has no member named ‘y’

77
hostbin_CXXFLAGS=   -I./host/inc/ \
lvs's avatar
lvs committed
78
79
80
81
82
		    -I. \
		    $(opencl_CXXFLAGS) $(xcl2_CXXFLAGS) $(oclHelper_CXXFLAGS) \
		    -std=c++0x \
		    -U__STRICT_ANSI__ \
		    $(ENABLE_KERNELS) \
Leonardo Solis's avatar
Leonardo Solis committed
83
84
	            $(CONFIG_FLAG)
   
Leonardo Solis's avatar
Leonardo Solis committed
85
hostbin_LDFLAGS=$(opencl_LDFLAGS) -lrt
lvs's avatar
lvs committed
86

lvs's avatar
lvs committed
87
EXES=hostbin
lvs's avatar
lvs committed
88
89

# Kernel
lvs's avatar
lvs committed
90
Krnl_GA_SRCS=./device/Krnl_GA.cl
lvs's avatar
lvs committed
91

Leonardo Solis's avatar
Leonardo Solis committed
92
# Custom configuration of vars within: boards.mk
Leonardo Solis's avatar
Leonardo Solis committed
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#CLFLAGS= --xp "param:compiler.version=31" \
#	 --xp "param:compiler.preserveHlsOutput=1" \
#	 --xp "param:compiler.generateExtraRunData=true" \
#	 -s -g -I./ -I../ -I./device \
#	 $(CONFIG_FLAG) \
#	 $(DUMMYGLOBPOINTER_FLAGS)

# Kernel "-g" debug option must be added 
# only for sw-emu and hw-emu, not hw
# UG1023: SDAccel Debug Command Line Flow / Preparing the Kernel
KERNELDEBUG_FLAGS=

ifeq ($(TARGETS), sw_emu)
	KERNELDEBUG_FLAGS=-g
else
	ifeq ($(TARGETS), hw_emu)
		KERNELDEBUG_FLAGS=-g
	endif
endif

Leonardo Solis's avatar
Leonardo Solis committed
113
114
115
CLFLAGS= --xp "param:compiler.version=31" \
	 --xp "param:compiler.preserveHlsOutput=1" \
	 --xp "param:compiler.generateExtraRunData=true" \
Leonardo Solis's avatar
Leonardo Solis committed
116
	 -s -I./ -I../ -I./device \
Leonardo Solis's avatar
Leonardo Solis committed
117
	 $(CONFIG_FLAG) \
Leonardo Solis's avatar
Leonardo Solis committed
118
119
120
	 $(DUMMYGLOBPOINTER_FLAGS) \
	 $(KERNELDEBUG_FLAGS)

121
122
LDCLFLAGS=$(CLFLAGS)

Leonardo Solis's avatar
Leonardo Solis committed
123
# Custom configuration of vars within: opencl.mk
124
125
opencl_LDFLAGS=-L$(OPENCL_LIB) -L$(SDA_LIB) -lxilinxopencl -pthread

126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#-------------------------------
# AWS only: apply the following 
# kernel compile & link configuration options

# Otherwise error during VPL
# "dr.bd.tcl" seems to be using a configuration for VCU1525
# instead for AWS VU9P

# Problem reported here:
# https://forums.xilinx.com/t5/SDAccel/Building-ERROR-VPL-17-55-set-property-expects-at-least-one/td-p/893221

# AWS reference guide
# https://github.com/aws/aws-fpga/blob/master/SDAccel/docs/On_Premises_Development_Steps.md
# aws-fpga/SDAccel/examples/aws/kernel_3ddr_bandwidth/Makefile

# https://www.xilinx.com/support/documentation/sw_manuals/xilinx2017_2/ug1023-sdaccel-user-guide.pdf
# Page 33 (could not find in the v2017.4)
# --max_memory_ports [all | <kernel_name>]
# Optional
# Sets the maximum memory port property 
# for all kernels or a given kernel

148
149
## Commented because it is example
## Choosing the "bandwidth" kernel for maximum memory port property 
150
151
# krnl_GA_CLFLAGS=--max_memory_ports bandwidth

152
153
154
155
## Commented because not all kernels in design need that
## Choosing the all kernels in design for maximum memory port property 
# Krnl_GA_CLFLAGS=--max_memory_ports all

156
157
158
159
160
161
162
## Ideal configuration, but results in routing error
#Krnl_GA_CLFLAGS=--max_memory_ports Krnl_GA \
#		--max_memory_ports Krnl_Conform \
#		--max_memory_ports Krnl_InterE \
#		--max_memory_ports Krnl_IntraE

#Krnl_GA_CLFLAGS=--max_memory_ports Krnl_GA
163
164
165
166
167
168
169
170

# https://www.xilinx.com/support/documentation/sw_manuals/xilinx2017_4/ug1023-sdaccel-user-guide.pdf
# Page 44
# --sp <kernel_inst_name>.<interface_name>:<bank>
# Valid DDR4 bank names are 
# bank0, bank1, bank2, and bank3 
# for platforms with 4 DDR banks.

171
## Commented because it is example
172
173
174
175
#krnl_GA_LDCLFLAGS+= --sp bandwidth_1.m_axi_gmem0:bank0 \
#		    --sp bandwidth_1.m_axi_gmem1:bank1 \
#		    --sp bandwidth_1.m_axi_gmem2:bank2	

176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
## Ideal configuration, but results in routing error
# First two args of IntraE are the 2nd and 3rd of InterE (atom_charges & atom_types),
# Therefore they are mapped to the same DDR bank
#Krnl_GA_LDCLFLAGS+=--sp Krnl_GA_1.m_axi_gmem0:bank0 \
#		   --sp Krnl_GA_1.m_axi_gmem1:bank0 \
#		   --sp Krnl_GA_1.m_axi_gmem2:bank0 \
#		   --sp Krnl_GA_1.m_axi_gmem3:bank0 \
#		   --sp Krnl_Conform_1.m_axi_gmem0:bank1 \
#		   --sp Krnl_Conform_1.m_axi_gmem1:bank1 \
#		   --sp Krnl_Conform_1.m_axi_gmem2:bank1 \
#		   --sp Krnl_Conform_1.m_axi_gmem3:bank1 \
#		   --sp Krnl_Conform_1.m_axi_gmem4:bank1 \
#		   --sp Krnl_InterE_1.m_axi_gmem0:bank2 \
#		   --sp Krnl_InterE_1.m_axi_gmem1:bank2 \
#		   --sp Krnl_InterE_1.m_axi_gmem2:bank2 \
#		   --sp Krnl_IntraE_1.m_axi_gmem0:bank2	\
#		   --sp Krnl_IntraE_1.m_axi_gmem1:bank2	\
#		   --sp Krnl_IntraE_1.m_axi_gmem2:bank3	\
#		   --sp Krnl_IntraE_1.m_axi_gmem3:bank3	\
#		   --sp Krnl_IntraE_1.m_axi_gmem4:bank3	\
#		   --sp Krnl_IntraE_1.m_axi_gmem5:bank3	\
#		   --sp Krnl_IntraE_1.m_axi_gmem6:bank3	\
#		   --sp Krnl_IntraE_1.m_axi_gmem7:bank3	\
# 		   --sp Krnl_IntraE_1.m_axi_gmem8:bank3	\
#		   --sp Krnl_IntraE_1.m_axi_gmem9:bank3	\
#		   --sp Krnl_IntraE_1.m_axi_gmem10:bank3

Leonardo Solis's avatar
Leonardo Solis committed
203
204
205
206
207
#Krnl_GA_LDCLFLAGS+=--sp Krnl_GA_1.m_axi_gmem:bank0      \
#		   --sp Krnl_Conform_1.m_axi_gmem:bank1 \
#		   --sp Krnl_InterE_1.m_axi_gmem:bank2  \
#		   --sp Krnl_IntraE_1.m_axi_gmem:bank3

Leonardo Solis's avatar
Leonardo Solis committed
208
209
210
211
Krnl_GA_LDCLFLAGS+=--sp Krnl_GA_1.m_axi_gmem:bank0      \
		   --sp Krnl_Conform_1.m_axi_gmem:bank0 \
		   --sp Krnl_InterE_1.m_axi_gmem:bank1  \
		   --sp Krnl_IntraE_1.m_axi_gmem:bank1
Leonardo Solis's avatar
Leonardo Solis committed
212

213
214
215
216
217
218
219
220
221
222
223
##
# https://www.xilinx.com/support/documentation/sw_manuals/xilinx2017_4/ug1281-sdaccel-debugging-guide.pdf
# Page 32
# Instrumentation 1: Kernel Hangs due to AXI Violations
##

# Add Lightweight AXI Protocol Checker (lapc)
# <protocol:< compute_unit_name >:< interface_name >>
LAPC:=none

ifneq ($(LAPC),none)
224
225
226

## Commented because error was obtained:
## Number of axi protocol checkers requested must be between 1 and 63.
227
228
#Krnl_GA_LDCLFLAGS+=--dk protocol:all:all

229
230
231
## Warning obtained (not sure if because of configuration)
## # xbsak status --lapc
## Invalid codes read, skip decoding
232
Krnl_GA_LDCLFLAGS+=--dk protocol:Krnl_GA_1:m_axi_gmem0 \
233
234
235
236
		   --dk protocol:Krnl_GA_1:m_axi_gmem1 \
		   --dk protocol:Krnl_GA_1:m_axi_gmem2 \
		   --dk protocol:Krnl_GA_1:m_axi_gmem3 \
		   --dk protocol:Krnl_Conform_1:m_axi_gmem0 \
237
		   --dk protocol:Krnl_Conform_1:m_axi_gmem1 \
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
		   --dk protocol:Krnl_Conform_1:m_axi_gmem2 \
		   --dk protocol:Krnl_Conform_1:m_axi_gmem3 \
		   --dk protocol:Krnl_Conform_1:m_axi_gmem4 \
                   --dk protocol:Krnl_InterE_1:m_axi_gmem0 \
	 	   --dk protocol:Krnl_InterE_1:m_axi_gmem1 \
		   --dk protocol:Krnl_InterE_1:m_axi_gmem2 \
	           --dk protocol:Krnl_IntraE_1:m_axi_gmem0 \
		   --dk protocol:Krnl_IntraE_1:m_axi_gmem1 \
		   --dk protocol:Krnl_IntraE_1:m_axi_gmem2 \
	           --dk protocol:Krnl_IntraE_1:m_axi_gmem3 \
		   --dk protocol:Krnl_IntraE_1:m_axi_gmem4 \
		   --dk protocol:Krnl_IntraE_1:m_axi_gmem5 \
	           --dk protocol:Krnl_IntraE_1:m_axi_gmem6 \
		   --dk protocol:Krnl_IntraE_1:m_axi_gmem7 \
		   --dk protocol:Krnl_IntraE_1:m_axi_gmem8 \
	           --dk protocol:Krnl_IntraE_1:m_axi_gmem9 \
		   --dk protocol:Krnl_IntraE_1:m_axi_gmem10
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272

## Commented because error was obtained:
## No interface pins matched 'get_bd_intf_pins -of /Krnl_Conform_1 -filter NAME=~m_axi_gmem'
## ERROR: caught error: Unable to find interface pin  for AXI protocol checker insertion
#Krnl_GA_LDCLFLAGS+=--dk protocol:Krnl_GA_1:m_axi_gmem \
#		   --dk protocol:Krnl_Conform_1:m_axi_gmem \
#                  --dk protocol:Krnl_InterE_1:m_axi_gmem \
#	           --dk protocol:Krnl_IntraE_1:m_axi_gmem
endif

## Adding Performance Monitors (spm) 
## enables the listing of detailed communication statistics (counters). 
## --profile_kernel data:<kernel_name|all>:<cu_name|all>:<interface_name|all>
SPM:=none

ifneq ($(SPM),none)
##--profile_kernel data:krnl1:cu1:m_axi_gmem0
##--profile_kernel data:krnl2:cu2:m_axi_gmem
273
274
275
276
Krnl_GA_LDCLFLAGS+=--profile_kernel data:Krnl_GA:Krnl_GA_1:all \
		   --profile_kernel data:Krnl_Conform:Krnl_Conform_1:all \
		   --profile_kernel data:Krnl_InterE:Krnl_InterE_1:all \
		   --profile_kernel data:Krnl_IntraE:Krnl_IntraE_1:all
277
278
endif

279
280
281
282
#-------------------------------



283

lvs's avatar
lvs committed
284
XOS=Krnl_GA
lvs's avatar
lvs committed
285

lvs's avatar
lvs committed
286
Krnl_GA_XOS=Krnl_GA
lvs's avatar
lvs committed
287

lvs's avatar
lvs committed
288
XCLBINS=Krnl_GA
lvs's avatar
lvs committed
289
290

# check
lvs's avatar
lvs committed
291
292
check_EXE=hostbin
check_XCLBINS=Krnl_GA
lvs's avatar
lvs committed
293
294
295
CHECKS=check

include $(COMMON_REPO)/utility/rules.mk
lvs's avatar
lvs committed
296

297
298
299
300
301
302
303
# Note that the definition of "newline" contains two blank lines.
# Using $(newline) will expand into only one newline.
define newline


endef

304
305
306
307
308
# Docking parameters 
# that directly determine the execution time
# Following values are used only for emulation
# to have a short but still a representative test
PDB  := 1stp
309
PSIZE:= 150
Leonardo Solis's avatar
Leonardo Solis committed
310
311
312
NRUN := 10
NEV  := 800000
NGEN := 27000
313
GFPOP:= 0
314

315
316
317
# Switching to the other SDAccel 2017.4 default platform
# As it is available in Xelera "saruman" server
#DEVICES:= xilinx:kcu1500:dynamic (in ../common_xilinx/utility/boards.mk)
Leonardo Solis's avatar
Leonardo Solis committed
318

319
320
# Boards in SDAccel installation path: /opt/cad/xilinx/SDx/2017.4/platforms/

Leonardo Solis's avatar
Leonardo Solis committed
321
322
# If several versions are present, e.g.: "vcu1525_5_0" and "vcu1525_5_1"
# Pay attention to which should be used
323
#BOARD:= xilinx:kcu1500:dynamic
Leonardo Solis's avatar
Leonardo Solis committed
324
325
326
#BOARD:= xilinx:vcu1525:dynamic

# Boards in external paths
327
328
329
330
331
332
333
334
335
336
337

# Cloned from https://github.com/aws/aws-fpga
# This corresponds to AWS Shell v04261818 
# https://github.com/aws/aws-fpga/blob/master/hdk/docs/AWS_Shell_RELEASE_NOTES.md
# IMPORTANT: source scripts to get the full DSA
# Because by default only the "sw" component is provided in GitHub
#BOARD:= /home/wimi/lvs/ocl_xilinx/aws-fpga/SDAccel/aws_platform/xilinx_aws-vu9p-f1-04261818_dynamic_5_0/xilinx_aws-vu9p-f1-04261818_dynamic_5_0.xpfm
BOARD:= /home/wimi/lvs/DSA_SDACCEL_AWS_VU9P/xilinx_aws-vu9p-f1-04261818_dynamic_5_0/xilinx_aws-vu9p-f1-04261818_dynamic_5_0.xpfm

# Copied from Xelera (saruman) SDAccel installation path
#BOARD:= /home/wimi/lvs/DSA_SDACCEL_AWS_VU9P/xilinx_aws-vu9p-f1_dynamic_5_0/xilinx_aws-vu9p-f1_dynamic_5_0.xpfm
338
#BOARD:= /home/wimi/lvs/DSA_SDACCEL_VCU1525_5_1/xilinx_vcu1525_dynamic_5_1/xilinx_vcu1525_dynamic_5_1.xpfm
339
#BOARD:= /opt/cad/xilinx/SDx/2017.1/platforms/xilinx_adm-pcie-7v3_1ddr_3_0/xilinx_adm-pcie-7v3_1ddr_3_0.xpfm
Leonardo Solis's avatar
Leonardo Solis committed
340

341
342
NDEVICES_EMU:=1

343

344
345
346
347
# Compile and generate report
kerrpt-sw:
	make clean
	@echo $(newline)
348
	make all REPORT=estimate TARGETS=sw_emu DEVICES=$(BOARD)
349
350
351
352
353
	@echo $(newline)
	cp ./xclbin/$(XCLBINS).sw_emu.*.xclbin .
	@echo $(newline)
	mv ./$(XCLBINS).sw_emu.*.xclbin ./$(XCLBINS).xclbin
	@echo $(newline)
354
355
356
	@echo "==============================================================================="
	@echo "INFO: sw emulation file created under: \"./xclbin/$(XCLBINS).sw_emu.*.xclbin\" "
	@echo "INFO: ... was copied and renamed as \"./$(XCLBINS).xclbin\"                    "
357
	@echo $(newline)
358
359
	@echo "INFO: a \"./system_estimate.xtxt\" report was generated!                       "
	@echo "==============================================================================="
360
361
	@echo $(newline)

362

363
# Compile for sw and hw emulation
364
kerswemu:
365
	make all TARGETS=sw_emu DEVICES=$(BOARD)
366
	@echo $(newline)
367
368
369
	@echo "==============================================================================="
	@echo "INFO: sw emulation file created under: \"./xclbin/$(XCLBINS).sw_emu.*.xclbin\" "
	@echo "==============================================================================="
370
	@echo $(newline)
371

372

373
kerhwemu:
374
	make all TARGETS=hw_emu	DEVICES=$(BOARD)
375
	@echo $(newline)
376
377
378
	@echo "==============================================================================="
	@echo "INFO: hw emulation file created under: \"./xclbin/$(XCLBINS).hw_emu.*.xclbin\" "
	@echo "==============================================================================="
379
	@echo $(newline)
380

381

382
383
384
# Run emulation
# Compilation (host & device) if not done previously
# The .dlg file is written in ./
lvs's avatar
lvs committed
385
# "exe" and "xclbin" are rules from "rules.mk"
386
387
# SDAccel 2017.4: User Guide UG1023, "Running Software and Hardware Emulation in XOCC Flow"
#emconfigutil --platform xilinx_vcu1525_dynamic_5_0 --nd 1
388
swemu: kerswemu
389
	emconfigutil --platform $(BOARD) --nd $(NDEVICES_EMU)
390
391
392
393
	XCL_EMULATION_MODE=sw_emu ./$(EXES) \
	-ffile input/$(PDB)/derived/$(PDB)_protein.maps.fld \
	-lfile input/$(PDB)/derived/$(PDB)_ligand.pdbqt \
	-psize $(PSIZE) -nrun $(NRUN) -nev $(NEV) -ngen $(NGEN) -gfpop 1
394
	@echo $(newline)
Leonardo Solis's avatar
Leonardo Solis committed
395
396
	@echo "===================================================================================="
	@echo "INFO: swemu log file is under: \"./docking.dlg\"                                    "
397
	@echo $(newline)
Leonardo Solis's avatar
Leonardo Solis committed
398
399
	@echo "INFO: profile and timeline trace report files are formatted for SDx GUI             "
	@echo "INFO: ... if reports not generated, verify that \"sdaccel.ini\" exists!             "
400
401
402
403
	@echo $(newline)
	sdx_analyze profile sdaccel_profile_summary.csv
	@echo $(newline)
	sdx_analyze trace sdaccel_timeline_trace.csv
Leonardo Solis's avatar
Leonardo Solis committed
404
405
406
	@echo $(newline)
	@echo "INFO: (1) open sdx, (2) select \"File->Open File\", (3) browse to *.xprf or *.wdb  "
	@echo "===================================================================================="
407
408
	@echo $(newline)

409
410
411
412
413
414
415
416
417
418
419
420
421
422
# Debug on software using Xilinx GDB
# Analyze hangs with the following gdb extensions:
# xprint queue [<cl_command_queue>]
# xprint event <cl_event>
# xprint mem [<cl_mem>]
# xprint kernel
# xprint all
swemudebug:
	xgdb --args \
	./$(EXES) \
	-ffile input/$(PDB)/derived/$(PDB)_protein.maps.fld \
	-lfile input/$(PDB)/derived/$(PDB)_ligand.pdbqt \
	-psize $(PSIZE) -nrun $(NRUN) -nev $(NEV) -ngen $(NGEN) -gfpop 1

423

424
hwemu: kerhwemu
425
	emconfigutil --platform $(BOARD) --nd $(NDEVICES_EMU)
426
427
428
429
	XCL_EMULATION_MODE=hw_emu ./$(EXES) \
	-ffile input/$(PDB)/derived/$(PDB)_protein.maps.fld \
	-lfile input/$(PDB)/derived/$(PDB)_ligand.pdbqt \
	-psize $(PSIZE) -nrun $(NRUN) -nev $(NEV) -ngen $(NGEN) -gfpop 1
430
	@echo $(newline)
431
432
	@echo "==========================================================================="
	@echo "INFO: hwemu log file is under: \"./docking.dlg\"                           "
433
	@echo $(newline)
434
435
	@echo "INFO: profile and timeline trace report files are formatted for SDx GUI    "
	@echo "INFO: ... if reports not generated, verify that \"sdaccel.ini\" exists!    "
436
437
438
439
	@echo $(newline)
	sdx_analyze profile sdaccel_profile_summary.csv
	@echo $(newline)
	sdx_analyze trace sdaccel_timeline_trace.csv
440
	@echo "==========================================================================="
441
	@echo $(newline)
442

443

444
445
446
# Build hw (FPGA bitstream)
# NOT integrated yet in a multistep compilation
hw: 	
447
	make all TARGETS=hw DEVICES=$(BOARD)
448
	@echo $(newline)
449
450
451
	@echo "========================================================================="
	@echo "INFO: FPGA bitstream is under: \"./xclbin/$(XCLBINS).hw.*.xclbin\"       " 
	@echo "========================================================================="
452
	@echo $(newline)
453

454

455
456
457
# Build instrumented hw (FPGA bitstream)
# NOT integrated yet in a multistep compilation
hw-instr: 	
458
	make all TARGETS=hw DEVICES=$(BOARD) LAPC=yes SPM=yes
459
460
461
462
463
464
465
466
	@echo $(newline)
	@echo "=============================================================================================="
	@echo "INFO: [instrumented] FPGA bitstream is under: \"./xclbin/$(XCLBINS).hw.*.xclbin\"             " 
	@echo "=============================================================================================="
	@echo $(newline)



467
468
469
470
471
472
# Execute on remote server
# Host-recompilation
# Copy of host to $(TARGET_DIR_HW)
# The working directory is changed
# So .dlg file is written in $(TARGET_DIR_HW)
eva: exe
473
474
475
476
477
	./$(EXES) \
	-ffile input/$(PDB)/derived/$(PDB)_protein.maps.fld \
	-lfile input/$(PDB)/derived/$(PDB)_ligand.pdbqt \
	-resnam docking_$(PDB)_$(NRUN) \
	-nrun $(NRUN) -gfpop $(GFPOP)
478
479
480
481
482
483
484
485
486
487
488
489
490
491
	@echo $(newline)
	@echo "==========================================================================="
	@echo "INFO: evaluation log file is under: \"./docking.dlg\"                      "
	@echo $(newline)
	@echo "INFO: profile and timeline trace report files are formatted for SDx GUI    "
	@echo "INFO: ... if reports not generated, verify that \"sdaccel.ini\" exists!    "
	@echo $(newline)
	sdx_analyze profile sdaccel_profile_summary.csv
	@echo $(newline)
	sdx_analyze trace sdaccel_timeline_trace.csv
	@echo "==========================================================================="
	@echo $(newline)


492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
# Debug on hardware using Xilinx GDB
# Analyze hangs with the following gdb extensions:
# xprint queue [<cl_command_queue>]
# xprint event <cl_event>
# xprint mem [<cl_mem>]
# xprint kernel
# xprint all
evadebug:
	xgdb --args \
	./$(EXES) \
	-ffile input/$(PDB)/derived/$(PDB)_protein.maps.fld \
	-lfile input/$(PDB)/derived/$(PDB)_ligand.pdbqt \
	-resnam docking_debug_$(PDB)_$(NRUN) \
	-nrun $(NRUN) -gfpop $(GFPOP)


508
509
510
511
512
513
514
515
# Project name
PROJECT_NAME := ofdock_taskpar_xl

COPY_DIR := copy_$(PROJECT_NAME)
COPY_DIR_DOCK := $(PROJECT_NAME)

# Make sure this remote-server alias exists (in ~/.ssh/config)

516
517
518
519
520
521
522
## Xelera
#SERVER_BRIDGE := erebor:/scratch/
#SERVER_EXEC   := saruman:~/ocladock_sdx17_4

## AWS
SERVER_BRIDGE := eredmithrim:/home/lvs/ESA/AWS
SERVER_EXEC   := AWS
523
524
525
526
527
528
529
530
531
532
533
534

# Delete an existing folder if previously created
# Create a folder $(COPY_DIR) in the parent directory
# Copy binaries into $(COPY_DIR) folder, avoiding the (innecesary) compilation intermediate files
# Copy source files into $(COPY_DIR) as host is built in the remote $(SERVER)
# Create a zip file out of the $(COPY_DIR) folder
copy: clean-copy
	mkdir ../$(COPY_DIR)
	mkdir ../$(COPY_DIR)/$(COPY_DIR_DOCK)
	mkdir ../$(COPY_DIR)/$(COPY_DIR_DOCK)/xclbin
	cp ./xclbin/$(XCLBINS).hw.*.xclbin ../$(COPY_DIR)/$(COPY_DIR_DOCK)/xclbin/
	cp ./xclbin/$(XCLBINS).hw.*.xo ../$(COPY_DIR)/$(COPY_DIR_DOCK)/xclbin/
535
	cp sdaccel.ini ../$(COPY_DIR)/$(COPY_DIR_DOCK)/
536
537
	cp Makefile ../$(COPY_DIR)/$(COPY_DIR_DOCK)/
	cp defines.h ../$(COPY_DIR)/$(COPY_DIR_DOCK)/
538
539
	#cp defines_fixedpt.h ../$(COPY_DIR)/$(COPY_DIR_DOCK)/
	#cp defines_fixedpt_64.h ../$(COPY_DIR)/$(COPY_DIR_DOCK)/
540
	cp -r host/ ../$(COPY_DIR)/$(COPY_DIR_DOCK)/
541
	#cp -r input/ ../$(COPY_DIR)/$(COPY_DIR_DOCK)/
542
543
	cd ../;	zip -r $(COPY_DIR).zip $(COPY_DIR)
	@echo $(newline)
544
545
	@echo "INFO: transfering the \"$(COPY_DIR).zip\" file to $(SERVER_BRIDGE) server: "
	@echo $(newline)
546
547
	cd ../ && scp $(COPY_DIR).zip $(SERVER_BRIDGE)
	@echo $(newline)
548
	@echo "=================================================================="
549
	@echo "INFO: files listed were transferred to $(SERVER_BRIDGE)           "
550
	@echo $(newline)
551
552
	@echo "INFO: then, create AFI and transfer files manually                "
	@echo "INFO: ... from $(SERVER_BRIDGE) to $(SERVER_EXEC)                 "
553
	@echo "=================================================================="
554
555
556
557
558
559
560
561
	@echo $(newline)


clean-copy:
	rm -rf ../$(COPY_DIR)
	rm -f ../$(COPY_DIR).zip
	@echo $(newline)
	@echo "=================================================================="
562
	@echo "INFO: previous \"$(COPY_DIR).zip\" and its folder were deleted    "
563
564
565
566
	@echo "=================================================================="
	@echo $(newline)