|
| 1 | +.PHONY: csim cosim hw hls clean exe bitstream check-afi-status check-aws-bucket |
| 2 | + |
| 3 | +APP ?= kernel |
| 4 | +SDA_VER ?= 2018.3 |
| 5 | +XILINX_SDX ?= /opt/tools/xilinx/SDx/$(SDA_VER) |
| 6 | +XILINX_XRT ?= /opt/xilinx/xrt |
| 7 | +XDEVICE ?= xilinx:vcu1525:xdma:201830.1 |
| 8 | + |
| 9 | +CSIM_XCLBIN ?= $(APP)-csim.xclbin |
| 10 | +COSIM_XCLBIN ?= $(APP)-cosim.xclbin |
| 11 | +HW_XCLBIN ?= $(APP)-hw.xclbin |
| 12 | + |
| 13 | +KERNEL_SRCS ?= device_kernel.cpp |
| 14 | +KERNEL_NAME ?= device_chain_kernel |
| 15 | +HOST_SRCS ?= common.cpp device_kernel_wrapper.cpp \ |
| 16 | + host_data_io.cpp host_kernel.cpp \ |
| 17 | + main.cpp memory_scheduler.cpp |
| 18 | +HOST_ARGS ?= |
| 19 | +HOST_BIN ?= $(APP) |
| 20 | + |
| 21 | +SRC ?= src |
| 22 | +OBJ ?= obj/$(SDA_VER)/$(word 2,$(subst :, ,$(XDEVICE))) |
| 23 | +BIN ?= bin/$(SDA_VER)/$(word 2,$(subst :, ,$(XDEVICE))) |
| 24 | +BIT ?= bit/$(SDA_VER)/$(word 2,$(subst :, ,$(XDEVICE))) |
| 25 | +RPT ?= rpt/$(SDA_VER)/$(word 2,$(subst :, ,$(XDEVICE))) |
| 26 | +TMP ?= tmp/$(SDA_VER)/$(word 2,$(subst :, ,$(XDEVICE))) |
| 27 | + |
| 28 | +AWS_AFI_DIR ?= afis |
| 29 | +AWS_AFI_LOG ?= logs |
| 30 | +CXX ?= g++ |
| 31 | +CLCXX ?= xocc |
| 32 | + |
| 33 | +HOST_CFLAGS += -std=c++0x -g -O2 -Wall -DFPGA_DEVICE -DC_KERNEL |
| 34 | +HOST_CFLAGS += -I$(XILINX_XRT)/include |
| 35 | +HOST_CFLAGS += -I$(XILINX_SDX)/runtime/include/1_2 |
| 36 | +HOST_CFLAGS += -I$(subst SDx,Vivado,$(XILINX_SDX))/include |
| 37 | +HOST_CFLAGS += -I$(subst SDx,Vivado_HLS,$(XILINX_SDX))/include |
| 38 | +HOST_LFLAGS += -L$(XILINX_XRT)/lib -lxilinxopencl -lrt |
| 39 | +HOST_LFLAGS += -L$(XILINX_SDX)/runtime/lib/x86_64 -lxilinxopencl -lrt |
| 40 | + |
| 41 | +ifeq ($(XDEVICE),"xilinx:aws-vu9p-f1:4ddr-xpr-2pr:4.0") |
| 42 | + SDA_VER = 2017.1 |
| 43 | +endif |
| 44 | + |
| 45 | +ifeq ($(SDA_VER),2017.1) |
| 46 | + # 2017.1 |
| 47 | + PLATFORM := $(XDEVICE) |
| 48 | + HOST_CFLAGS += -DTARGET_DEVICE=\"$(PLATFORM)\" |
| 49 | +else |
| 50 | +ifeq ($(SDA_VER),2017.2) |
| 51 | + # 2017.2 |
| 52 | + PLATFORM := $(XDEVICE) |
| 53 | + HOST_CFLAGS += -DTARGET_DEVICE=\"$(subst :,_,$(subst .,_,$(PLATFORM)))\" |
| 54 | +else |
| 55 | + # 2017.4 or 2018.2 |
| 56 | + PLATFORM := $(subst :,_,$(subst .,_,$(XDEVICE))) |
| 57 | + HOST_CFLAGS += -DTARGET_DEVICE=\"$(PLATFORM)\" |
| 58 | +endif |
| 59 | +endif |
| 60 | + |
| 61 | +CLCXX_OPT += $(CLCXX_OPT_LEVEL) $(DEVICE_REPO_OPT) --platform $(PLATFORM) $(KERNEL_DEFS) $(KERNEL_INCS) |
| 62 | +CLCXX_OPT += --kernel $(KERNEL_NAME) |
| 63 | +CLCXX_OPT += --xp prop:kernel.$(KERNEL_NAME).kernel_flags="-std=c++0x" |
| 64 | +CLCXX_OPT += --sp device_chain_kernel_1.m_axi_gmem_0:bank0 --sp device_chain_kernel_1.m_axi_gmem_1:bank1 |
| 65 | +CLCXX_OPT += -s -g |
| 66 | +CLCXX_CSIM_OPT = -t sw_emu --temp_dir $(abspath $(TMP)/$(CSIM_XCLBIN:.xclbin=)) |
| 67 | +CLCXX_COSIM_OPT = -t hw_emu --temp_dir $(abspath $(TMP)/$(COSIM_XCLBIN:.xclbin=)) |
| 68 | +CLCXX_HW_OPT = -t hw --temp_dir $(abspath $(TMP)/$(HW_XCLBIN:.xclbin=)) |
| 69 | + |
| 70 | +############################## phony targets ############################## |
| 71 | + |
| 72 | +csim: $(BIN)/$(HOST_BIN) $(BIT)/$(CSIM_XCLBIN) $(BIN)/emconfig.json |
| 73 | + ulimit -s unlimited;. $(XILINX_SDX)/settings64.sh;XCL_EMULATION_MODE=sw_emu $(BIN)/$(HOST_BIN) $(BIT)/$(CSIM_XCLBIN) $(HOST_ARGS) |
| 74 | + @rm -f sdaccel_profile_summary.{csv,html} |
| 75 | + |
| 76 | +cosim: $(BIN)/$(HOST_BIN) $(BIT)/$(COSIM_XCLBIN) $(BIN)/emconfig.json |
| 77 | + . $(XILINX_SDX)/settings64.sh;XCL_EMULATION_MODE=hw_emu $(BIN)/$(HOST_BIN) $(BIT)/$(COSIM_XCLBIN) $(HOST_ARGS) |
| 78 | + @rm -f sdaccel_profile_summary.{csv,html} ${PLATFORM}-*-$(APP)-cosim_simulate.log |
| 79 | + |
| 80 | +ifneq (,$(findstring aws-vu9p-f1,$(XDEVICE))) |
| 81 | +bitstream: $(BIT)/$(HW_XCLBIN:.xclbin=.awsxclbin) |
| 82 | + |
| 83 | +hw: $(BIN)/$(HOST_BIN) $(BIT)/$(HW_XCLBIN:.xclbin=.awsxclbin) |
| 84 | + . $(XILINX_SDX)/settings64.sh;$^ $(HOST_ARGS) |
| 85 | + @rm -f sdaccel_profile_summary.{csv,html} |
| 86 | + |
| 87 | +else |
| 88 | +bitstream: $(BIT)/$(HW_XCLBIN) |
| 89 | + |
| 90 | +hw: $(BIN)/$(HOST_BIN) $(BIT)/$(HW_XCLBIN) |
| 91 | + . $(XILINX_SDX)/settings64.sh;$^ $(HOST_ARGS) |
| 92 | + @rm -f sdaccel_profile_summary.{csv,html} |
| 93 | +endif |
| 94 | + |
| 95 | +hls: $(OBJ)/$(HW_XCLBIN:.xclbin=.xo) |
| 96 | + |
| 97 | +exe: $(BIN)/$(HOST_BIN) |
| 98 | + |
| 99 | +check-afi-status: |
| 100 | + @echo -n 'AFI state: ';aws ec2 describe-fpga-images --fpga-image-ids $$(jq -r '.FpgaImageId' $(BIT)/$(HW_XCLBIN:.xclbin=.afi))|jq '.FpgaImages[0].State.Code' -r |
| 101 | + |
| 102 | +check-aws-bucket: |
| 103 | +ifndef AWS_BUCKET |
| 104 | + $(error AWS_BUCKET must be set to an available AWS S3 bucket) |
| 105 | +endif |
| 106 | + |
| 107 | +clean: |
| 108 | + rm -rf $(BIN) $(BIT) $(RPT) $(OBJ) $(TMP) .Xil sdaccel_profile_summary.{csv,html} |
| 109 | + rmdir -p $(BIN) $(BIT) $(RPT) $(OBJ) $(TMP) --ignore-fail-on-non-empty 2>/dev/null || true |
| 110 | + |
| 111 | +############################## helpers ############################## |
| 112 | + |
| 113 | +WITH_SDACCEL = echo "$(1)";TMP=$$(mktemp -d /tmp/sdaccel-XXXXXXXXXX);cd $${TMP};. $(XILINX_SDX)/settings64.sh;$(1);RC=$$?;rm -rf $${TMP};exit $${RC} |
| 114 | + |
| 115 | +############################## bin ############################## |
| 116 | + |
| 117 | +$(BIN)/$(HOST_BIN): $(HOST_SRCS:%.cpp=$(OBJ)/%.o) |
| 118 | + @mkdir -p $(BIN) |
| 119 | + @$(call WITH_SDACCEL,$(CXX) $(abspath $^) $(HOST_LFLAGS) -o $(abspath $@)) |
| 120 | + |
| 121 | +$(BIN)/emconfig.json: |
| 122 | + @mkdir -p $(BIN) |
| 123 | + @echo "emconfigutil --platform $(PLATFORM) $(DEVICE_REPO_OPT) --od $(BIN)" |
| 124 | + @cd $(BIN);ln -sf /tmp/ .Xil;. $(XILINX_SDX)/settings64.sh;emconfigutil --platform $(PLATFORM) $(DEVICE_REPO_OPT);rm -f .Xil |
| 125 | + |
| 126 | +#@$(call WITH_SDACCEL,emconfigutil --platform $(PLATFORM) $(DEVICE_REPO_OPT) --od $(abspath $(BIN))) |
| 127 | + |
| 128 | +############################## obj ############################## |
| 129 | + |
| 130 | +$(OBJ)/%.o: $(SRC)/%.cpp |
| 131 | + @mkdir -p $(OBJ) |
| 132 | + @$(call WITH_SDACCEL,$(CXX) $(HOST_CFLAGS) -MM -MP -MT $@ -MF $(abspath $(@:.o=.d)) $(abspath $<)) |
| 133 | + @$(call WITH_SDACCEL,$(CXX) $(HOST_CFLAGS) -c $(abspath $<) -o $(abspath $@)) |
| 134 | + |
| 135 | +$(OBJ)/$(CSIM_XCLBIN:.xclbin=.xo): $(SRC)/$(KERNEL_SRCS) |
| 136 | + @mkdir -p $(OBJ) |
| 137 | + @$(call WITH_SDACCEL,$(CLCXX) $(CLCXX_CSIM_OPT) $(CLCXX_OPT) -c -o $(abspath $@) $(abspath $<)) |
| 138 | + |
| 139 | +$(OBJ)/$(HW_XCLBIN:.xclbin=.xo): $(SRC)/$(KERNEL_SRCS) |
| 140 | + @mkdir -p $(OBJ) |
| 141 | + @$(call WITH_SDACCEL,$(CLCXX) $(CLCXX_HW_OPT) $(CLCXX_OPT) --log --log_dir $(abspath $(RPT)/$(HW_XCLBIN:.xclbin=)) --report system --report_dir $(abspath $(RPT)/$(HW_XCLBIN:.xclbin=)) -c -o $(abspath $@) $(abspath $<)) |
| 142 | + |
| 143 | +-include $(OBJ)/$(HOST_SRCS:%.cpp=%.d) |
| 144 | + |
| 145 | +############################## bit ############################## |
| 146 | + |
| 147 | +$(BIT)/$(CSIM_XCLBIN): $(OBJ)/$(CSIM_XCLBIN:.xclbin=.xo) |
| 148 | + @mkdir -p $(BIT) |
| 149 | + @$(call WITH_SDACCEL,$(CLCXX) $(CLCXX_CSIM_OPT) $(CLCXX_OPT) -l -o $(abspath $@) $(abspath $<)) |
| 150 | + |
| 151 | +$(BIT)/$(COSIM_XCLBIN): $(OBJ)/$(HW_XCLBIN:.xclbin=.xo) |
| 152 | + @mkdir -p $(BIT) |
| 153 | + @$(call WITH_SDACCEL,$(CLCXX) $(CLCXX_COSIM_OPT) $(CLCXX_OPT) -l -o $(abspath $@) $(abspath $<)) |
| 154 | + |
| 155 | +$(BIT)/$(HW_XCLBIN): $(OBJ)/$(HW_XCLBIN:.xclbin=.xo) |
| 156 | + @mkdir -p $(BIT) |
| 157 | + @$(call WITH_SDACCEL,$(CLCXX) $(CLCXX_HW_OPT) $(CLCXX_OPT) --log --log_dir $(abspath $(RPT)/$(HW_XCLBIN:.xclbin=)) --report system --report_dir $(abspath $(RPT)/$(HW_XCLBIN:.xclbin=)) -l -o $(abspath $@) $(abspath $<)) |
| 158 | + |
| 159 | +$(BIT)/$(HW_XCLBIN:.xclbin=.awsxclbin): check-aws-bucket $(BIT)/$(HW_XCLBIN) |
| 160 | + @TMP=$$(mktemp -d);ln -rs ${BIT}/$(HW_XCLBIN) $${TMP};pushd $${TMP} >/dev/null;create-sdaccel-afi -xclbin=$(HW_XCLBIN) -o=$(HW_XCLBIN:.xclbin=) -s3_bucket=$(AWS_BUCKET) -s3_dcp_key=$(AWS_AFI_DIR) -s3_logs_key=$(AWS_AFI_LOG);popd >/dev/null;mv $${TMP}/$(HW_XCLBIN:.xclbin=.awsxclbin) $(BIT);mv $${TMP}/*afi_id.txt $(BIT)/$(HW_XCLBIN:.xclbin=.afi);rm -rf $${TMP} |
0 commit comments