Repository navigation
Expand file tree
/
Copy pathMakefile
More file actions
182 lines (146 loc) · 6.45 KB
/
Copy pathMakefile
File metadata and controls
182 lines (146 loc) · 6.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
# Streaming tuple-based triangle count on FPGA
SHELL := /bin/bash
.PHONY: help all host build run clean cleanall emconfig kernels
help:
@echo "Usage:"
@echo " make build TARGET=<sw_emu/hw_emu/hw> PLATFORM=<xpfm> [TUPLE_IMPL=<auto/hls/dsp>]"
@echo " make run TARGET=<sw_emu/hw_emu/hw> PLATFORM=<xpfm>"
@echo " make kernels TARGET=<target> PLATFORM=<xpfm> (kernel objects only)"
@echo ""
@echo " U55C: xilinx_u55c_gen3x16_xdma_3_202210_1"
@echo " U250: /opt/xilinx/platforms/xilinx_u250_gen3x16_xdma_3_1_202020_1/xilinx_u250_gen3x16_xdma_3_1_202020_1.xpfm"
TARGET := hw
FREQ := 280
HOST_ARCH := x86
SYSROOT :=
include ./utils.mk
XSA :=
ifneq ($(PLATFORM),)
XSA := $(call device2xsa, $(PLATFORM))
endif
TEMP_DIR := ./_x.$(TARGET).$(XSA)
BUILD_DIR := ./build_dir.$(TARGET).$(XSA)
EMCONFIG_DIR := $(TEMP_DIR)
VPP := v++
VIVADO := vivado
DATASET_DIR ?= dataset
DATASET_NAME ?= facebook_combined
CMD_ARGS = -x $(BUILD_DIR)/streaming_tc.xclbin --dataset_dir $(DATASET_DIR) --dataset_name $(DATASET_NAME)
CXXFLAGS += -I$(XILINX_XRT)/include -Wall -O2 -g -std=c++17
CXXFLAGS += -I./common/includes/cmdparser
CXXFLAGS += -I./common/includes/logger
# HLS headers (ap_int.h etc.). XILINX_HLS is exported by Vitis' settings64.sh;
# override HLS_INC if your install lives elsewhere.
HLS_INC ?= $(XILINX_HLS)/include
CXXFLAGS += -I./src -I. -I$(HLS_INC)
LDFLAGS += -L$(XILINX_XRT)/lib -lxrt_coreutil -pthread
HOST_SRCS += ./common/includes/cmdparser/cmdlineparser.cpp
HOST_SRCS += ./common/includes/logger/logger.cpp
HOST_SRCS += ./host/streaming_host.cpp
EXECUTABLE := ./streaming_tc_host
VPP_FLAGS += -t $(TARGET) --platform $(PLATFORM) --save-temps --kernel_frequency $(FREQ)
ifneq ($(TARGET),hw)
VPP_FLAGS += -g
endif
ifeq ($(findstring u250,$(XSA)),u250)
VPP_LDFLAGS += --config ./streaming_tc_u250.cfg
else
# All targets (sw_emu, hw_emu, hw) use depth-512 FIFOs.
# The single-process decode_search_packer cannot read inputs while
# writing outputs, so depth-64 causes backpressure deadlock.
VPP_LDFLAGS += --config ./streaming_tc.cfg
endif
# TUPLE_IMPL: auto=HLS for sw_emu only, DSP for hw_emu and hw
# (sw_emu cannot simulate RTL kernels, so it must use the HLS version)
TUPLE_IMPL ?= auto
ifeq ($(TUPLE_IMPL),auto)
ifeq ($(TARGET),sw_emu)
TUPLE_IMPL_RESOLVED := hls
else
TUPLE_IMPL_RESOLVED := dsp
endif
else
TUPLE_IMPL_RESOLVED := $(TUPLE_IMPL)
endif
KERNEL_XOS += $(TEMP_DIR)/edge_range_reader.xo
KERNEL_XOS += $(TEMP_DIR)/edge_meta_fanout.xo
KERNEL_XOS += $(TEMP_DIR)/src_block_reader.xo
KERNEL_XOS += $(TEMP_DIR)/dst_block_reader.xo
KERNEL_XOS += $(TEMP_DIR)/decode_search_packer.xo
KERNEL_XOS += $(TEMP_DIR)/cmd_merger.xo
KERNEL_XOS += $(TEMP_DIR)/router_tc.xo
KERNEL_XOS += $(TEMP_DIR)/post_router.xo
KERNEL_XOS += $(TEMP_DIR)/sum_reduce_16.xo
ifeq ($(TUPLE_IMPL_RESOLVED),hls)
TUPLE_XO := $(TEMP_DIR)/tuple_list_k_hls.xo
else
TUPLE_XO := $(TEMP_DIR)/tuple_list_k_dsp.xo
endif
KERNEL_XOS += $(TUPLE_XO)
BINARY_CONTAINER := $(BUILD_DIR)/streaming_tc.xclbin
all: build
host: $(EXECUTABLE)
build: check-platform check-vitis check-device $(EXECUTABLE) $(BINARY_CONTAINER)
ifneq ($(TARGET),hw)
build: emconfig
endif
kernels: check-platform check-vitis check-device $(KERNEL_XOS)
$(EXECUTABLE): $(HOST_SRCS) common/includes/cmdparser/cmdlineparser.h common/includes/logger/logger.h | check-xrt
$(CXX) -o $@ $(HOST_SRCS) $(CXXFLAGS) $(LDFLAGS)
# HLS kernel compilation rules
$(TEMP_DIR)/edge_range_reader.xo: kernels/edge_range_reader.cpp packet_types.hpp ./src/tuple_tc_common.h
mkdir -p $(TEMP_DIR)
$(VPP) $(VPP_FLAGS) -c -k edge_range_reader --temp_dir $(TEMP_DIR) -I./kernels -I. -I./src -o'$@' '$<'
$(TEMP_DIR)/edge_meta_fanout.xo: kernels/edge_meta_fanout.cpp packet_types.hpp ./src/tuple_tc_common.h
mkdir -p $(TEMP_DIR)
$(VPP) $(VPP_FLAGS) -c -k edge_meta_fanout --temp_dir $(TEMP_DIR) -I./kernels -I. -I./src -o'$@' '$<'
$(TEMP_DIR)/src_block_reader.xo: kernels/src_block_reader.cpp packet_types.hpp ./src/tuple_tc_common.h
mkdir -p $(TEMP_DIR)
$(VPP) $(VPP_FLAGS) -c -k src_block_reader --temp_dir $(TEMP_DIR) -I./kernels -I. -I./src -o'$@' '$<'
$(TEMP_DIR)/dst_block_reader.xo: kernels/dst_block_reader.cpp packet_types.hpp ./src/tuple_tc_common.h
mkdir -p $(TEMP_DIR)
$(VPP) $(VPP_FLAGS) -c -k dst_block_reader --temp_dir $(TEMP_DIR) -I./kernels -I. -I./src -o'$@' '$<'
$(TEMP_DIR)/decode_search_packer.xo: kernels/decode_search_packer.cpp packet_types.hpp ./src/tuple_tc_common.h
mkdir -p $(TEMP_DIR)
$(VPP) $(VPP_FLAGS) -c -k decode_search_packer --temp_dir $(TEMP_DIR) -I./kernels -I. -I./src -o'$@' '$<'
$(TEMP_DIR)/cmd_merger.xo: kernels/cmd_merger.cpp packet_types.hpp ./src/tuple_tc_common.h
mkdir -p $(TEMP_DIR)
$(VPP) $(VPP_FLAGS) -c -k cmd_merger --temp_dir $(TEMP_DIR) -I./kernels -I. -I./src -o'$@' '$<'
$(TEMP_DIR)/router_tc.xo: ./src/router_tc.cpp ./src/tuple_tc_common.h
mkdir -p $(TEMP_DIR)
$(VPP) $(VPP_FLAGS) -c -k router_tc --temp_dir $(TEMP_DIR) -I./src -o'$@' '$<'
$(TEMP_DIR)/post_router.xo: ./src/post_router.cpp ./src/tuple_tc_common.h
mkdir -p $(TEMP_DIR)
$(VPP) $(VPP_FLAGS) -c -k post_router --temp_dir $(TEMP_DIR) -I./src -o'$@' '$<'
$(TEMP_DIR)/tuple_list_k_hls.xo: ./src/tuple_list_k.cpp ./src/tuple_tc_common.h
mkdir -p $(TEMP_DIR)
$(VPP) $(VPP_FLAGS) -c -k tuple_list_k --temp_dir $(TEMP_DIR) -I./src -o'$@' '$<'
# DSP RTL kernel packaging
DSP_TUPLE_DIR := ./tuple_list_k_dsp
DSP_TUPLE_SRC := $(DSP_TUPLE_DIR)/src/tuple_cmp_one_dsp.v \
$(DSP_TUPLE_DIR)/src/tuple_list_k_dsp.v
DSP_KERNEL_XML := ./rtl/tuple_list_k_dsp/kernel.xml
$(TEMP_DIR)/tuple_list_k_dsp.xo: $(DSP_TUPLE_SRC) $(DSP_KERNEL_XML) scripts/package_tuple_list_k_dsp.tcl
mkdir -p $(TEMP_DIR)
$(VIVADO) -mode batch -nolog -nojournal -source ./scripts/package_tuple_list_k_dsp.tcl -tclargs '$@'
$(TEMP_DIR)/sum_reduce_16.xo: kernels/sum_reduce_16.cpp packet_types.hpp ./src/tuple_tc_common.h
mkdir -p $(TEMP_DIR)
$(VPP) $(VPP_FLAGS) -c -k sum_reduce_16 --temp_dir $(TEMP_DIR) -I./kernels -I. -I./src -o'$@' '$<'
$(BINARY_CONTAINER): $(KERNEL_XOS)
mkdir -p $(BUILD_DIR)
$(VPP) $(VPP_FLAGS) -l $(VPP_LDFLAGS) --temp_dir $(TEMP_DIR) -o'$@' $(+)
emconfig: $(EMCONFIG_DIR)/emconfig.json
$(EMCONFIG_DIR)/emconfig.json:
mkdir -p $(EMCONFIG_DIR)
emconfigutil --platform $(PLATFORM) --od $(EMCONFIG_DIR)
run: all
ifeq ($(TARGET),$(filter $(TARGET),sw_emu hw_emu))
cp -f $(EMCONFIG_DIR)/emconfig.json .
XCL_EMULATION_MODE=$(TARGET) $(EXECUTABLE) $(CMD_ARGS)
else
$(EXECUTABLE) $(CMD_ARGS)
endif
clean:
-$(RMDIR) $(EXECUTABLE) emconfig.json *.log *.jou *.wdb *.wcfg
cleanall: clean
-$(RMDIR) $(TEMP_DIR) $(BUILD_DIR) .run