1
0
rocket-chip/Makefrag
Yunsup Lee e6a13cdeba New machine-mode timer facility
Mirroring Andrew's commit to reference-chip
2015-07-07 17:26:07 -07:00

476 lines
10 KiB
Plaintext

# UCB use only
-include $(base_dir)/Makefrag-boomchip
-include $(base_dir)/Makefrag-hwachachip
# check RISCV environment variable
ifndef RISCV
$(error Please set environment variable RISCV. Please take a look at README)
endif
MODEL := Top
CXX := g++
CXXFLAGS := -O1
SBT := java -Xmx2048M -Xss8M -XX:MaxPermSize=128M -jar sbt-launch.jar
SHELL := /bin/bash
src_path = src/main/scala
chisel_srcs = $(base_dir)/$(src_path)/*.scala $(base_dir)/rocket/$(src_path)/*.scala $(base_dir)/uncore/$(src_path)/*.scala $(SRC_EXTENSION)
disasm := 2>
which_disasm := $(shell which spike-dasm)
ifneq ($(which_disasm),)
disasm := 3>&1 1>&2 2>&3 | $(which_disasm) $(DISASM_EXTENSION) >
endif
timeout_cycles = 100000000
#--------------------------------------------------------------------
# Verilog Generation
#--------------------------------------------------------------------
$(generated_dir)/$(MODEL).$(CONFIG).v: $(chisel_srcs)
cd $(base_dir) && mkdir -p $(generated_dir) && $(SBT) "project rocketchip" "elaborate $(MODEL) --backend $(BACKEND) --targetDir $(generated_dir) --configDump --noInlineMem --configInstance rocketchip.$(CONFIG)"
cd $(generated_dir) && \
if [ -a $(MODEL).$(CONFIG).conf ]; then \
$(mem_gen) $(generated_dir)/$(MODEL).$(CONFIG).conf >> $(generated_dir)/$(MODEL).$(CONFIG).v; \
fi
$(generated_dir)/consts.$(CONFIG).vh: $(generated_dir)/$(MODEL).$(CONFIG).v
echo "\`ifndef CONST_VH" > $@
echo "\`define CONST_VH" >> $@
sed -r 's/\(([A-Za-z0-9_]+),([A-Za-z0-9_]+)\)/`define \1 \2/' $(patsubst %.v,%.prm,$<) >> $@
echo "\`endif // CONST_VH" >> $@
$(generated_dir)/memdessertMemDessert.$(CONFIG).v: $(base_dir)/$(src_path)/*.scala $(base_dir)/uncore/$(src_path)/*.scala
cd $(base_dir) && mkdir -p $(generated_dir) && $(SBT) "project rocketchip" "elaborate MemDessert --backend v --targetDir $(generated_dir) --moduleNamePrefix memdessert --configInstance rocketchip.$(CONFIG)"
#--------------------------------------------------------------------
# DRAMSim2
#--------------------------------------------------------------------
DRAMSIM_OBJS := $(patsubst %.cpp,%.o,$(wildcard $(base_dir)/dramsim2/*.cpp))
$(DRAMSIM_OBJS): %.o: %.cpp
$(CXX) $(CXXFLAGS) -DNO_STORAGE -DNO_OUTPUT -Dmain=nomain -c -o $@ $<
$(sim_dir)/libdramsim.a: $(DRAMSIM_OBJS)
ar rcs $@ $^
#--------------------------------------------------------------------
# ISA Tests
#--------------------------------------------------------------------
tests_isa_dir = $(base_dir)/riscv-tools/riscv-tests/isa
asm_p_tests = \
rv64ui-p-add \
rv64ui-p-addi \
rv64ui-p-amoadd_d \
rv64ui-p-amoadd_w \
rv64ui-p-amoand_d \
rv64ui-p-amoand_w \
rv64ui-p-amoor_d \
rv64ui-p-amoor_w \
rv64ui-p-amoxor_d \
rv64ui-p-amoxor_w \
rv64ui-p-amoswap_d \
rv64ui-p-amoswap_w \
rv64ui-p-amomax_d \
rv64ui-p-amomax_w \
rv64ui-p-amomaxu_d \
rv64ui-p-amomaxu_w \
rv64ui-p-amomin_d \
rv64ui-p-amomin_w \
rv64ui-p-amominu_d \
rv64ui-p-amominu_w \
rv64ui-p-auipc \
rv64ui-p-fence_i \
rv64ui-p-sb \
rv64ui-p-sd \
rv64ui-p-sh \
rv64ui-p-sw \
rv64ui-p-addiw \
rv64ui-p-addw \
rv64ui-p-and \
rv64ui-p-andi \
rv64ui-p-beq \
rv64ui-p-bge \
rv64ui-p-bgeu \
rv64ui-p-blt \
rv64ui-p-bltu \
rv64ui-p-bne \
rv64ui-p-div \
rv64ui-p-divu \
rv64ui-p-divuw \
rv64ui-p-divw \
rv64ui-p-j \
rv64ui-p-jal \
rv64ui-p-jalr \
rv64ui-p-lb \
rv64ui-p-lbu \
rv64ui-p-ld \
rv64ui-p-lh \
rv64ui-p-lhu \
rv64ui-p-lui \
rv64ui-p-lw \
rv64ui-p-lwu \
rv64ui-p-mul \
rv64ui-p-mulh \
rv64ui-p-mulhsu \
rv64ui-p-mulhu \
rv64ui-p-mulw \
rv64ui-p-or \
rv64ui-p-ori \
rv64ui-p-rem \
rv64ui-p-remu \
rv64ui-p-remuw \
rv64ui-p-remw \
rv64ui-p-simple \
rv64ui-p-sll \
rv64ui-p-slli \
rv64ui-p-slliw \
rv64ui-p-sllw \
rv64ui-p-slt \
rv64ui-p-slti \
rv64ui-p-sltiu \
rv64ui-p-sltu \
rv64ui-p-sra \
rv64ui-p-srai \
rv64ui-p-sraiw \
rv64ui-p-sraw \
rv64ui-p-srliw \
rv64ui-p-srlw \
rv64ui-p-sub \
rv64ui-p-subw \
rv64ui-p-xor \
rv64ui-p-xori \
rv64uf-p-ldst \
rv64uf-p-move \
rv64uf-p-fsgnj \
rv64uf-p-fcmp \
rv64uf-p-fcvt \
rv64uf-p-fcvt_w \
rv64uf-p-fclass \
rv64uf-p-fadd \
rv64uf-p-fmin \
rv64uf-p-fmadd \
rv64uf-p-fdiv \
rv64uf-p-structural \
rv64si-p-csr \
rv64si-p-wfi \
rv64si-p-illegal \
rv64si-p-ma_fetch \
rv64si-p-ma_addr \
rv64si-p-scall \
rv64si-p-sbreak \
rv64ui-pm-lrsc \
rv64mi-p-csr \
rv64mi-p-mcsr \
rv64mi-p-wfi \
rv64mi-p-dirty \
rv64mi-p-illegal \
rv64mi-p-ma_addr \
rv64mi-p-ma_fetch \
rv64mi-pm-ipi \
rv64mi-p-sbreak \
rv64mi-p-scall \
rv64mi-p-timer \
asm_pt_tests = \
rv64ui-pt-add \
rv64ui-pt-addi \
rv64ui-pt-amoadd_d \
rv64ui-pt-amoadd_w \
rv64ui-pt-amoand_d \
rv64ui-pt-amoand_w \
rv64ui-pt-amoor_d \
rv64ui-pt-amoor_w \
rv64ui-pt-amoxor_d \
rv64ui-pt-amoxor_w \
rv64ui-pt-amoswap_d \
rv64ui-pt-amoswap_w \
rv64ui-pt-amomax_d \
rv64ui-pt-amomax_w \
rv64ui-pt-amomaxu_d \
rv64ui-pt-amomaxu_w \
rv64ui-pt-amomin_d \
rv64ui-pt-amomin_w \
rv64ui-pt-amominu_d \
rv64ui-pt-amominu_w \
rv64ui-pt-auipc \
rv64ui-pt-fence_i \
rv64ui-pt-sb \
rv64ui-pt-sd \
rv64ui-pt-sh \
rv64ui-pt-sw \
rv64ui-pt-addiw \
rv64ui-pt-addw \
rv64ui-pt-and \
rv64ui-pt-andi \
rv64ui-pt-beq \
rv64ui-pt-bge \
rv64ui-pt-bgeu \
rv64ui-pt-blt \
rv64ui-pt-bltu \
rv64ui-pt-bne \
rv64ui-pt-div \
rv64ui-pt-divu \
rv64ui-pt-divuw \
rv64ui-pt-divw \
rv64ui-pt-j \
rv64ui-pt-jal \
rv64ui-pt-jalr \
rv64ui-pt-lb \
rv64ui-pt-lbu \
rv64ui-pt-ld \
rv64ui-pt-lh \
rv64ui-pt-lhu \
rv64ui-pt-lui \
rv64ui-pt-lw \
rv64ui-pt-lwu \
rv64ui-pt-mul \
rv64ui-pt-mulh \
rv64ui-pt-mulhsu \
rv64ui-pt-mulhu \
rv64ui-pt-mulw \
rv64ui-pt-or \
rv64ui-pt-ori \
rv64ui-pt-rem \
rv64ui-pt-remu \
rv64ui-pt-remuw \
rv64ui-pt-remw \
rv64ui-pt-simple \
rv64ui-pt-sll \
rv64ui-pt-slli \
rv64ui-pt-slliw \
rv64ui-pt-sllw \
rv64ui-pt-slt \
rv64ui-pt-slti \
rv64ui-pt-sltiu \
rv64ui-pt-sltu \
rv64ui-pt-sra \
rv64ui-pt-srai \
rv64ui-pt-sraiw \
rv64ui-pt-sraw \
rv64ui-pt-srliw \
rv64ui-pt-srlw \
rv64ui-pt-sub \
rv64ui-pt-subw \
rv64ui-pt-xor \
rv64ui-pt-xori \
rv64uf-pt-ldst \
rv64uf-pt-move \
rv64uf-pt-fsgnj \
rv64uf-pt-fcmp \
rv64uf-pt-fcvt \
rv64uf-pt-fcvt_w \
rv64uf-pt-fclass \
rv64uf-pt-fadd \
rv64uf-pt-fmin \
rv64uf-pt-fmadd \
rv64uf-pt-fdiv \
rv64uf-pt-structural \
asm_v_tests = \
rv64ui-v-add \
rv64ui-v-addi \
rv64ui-v-amoadd_d \
rv64ui-v-amoadd_w \
rv64ui-v-amoand_d \
rv64ui-v-amoand_w \
rv64ui-v-amoor_d \
rv64ui-v-amoor_w \
rv64ui-v-amoxor_d \
rv64ui-v-amoxor_w \
rv64ui-v-amoswap_d \
rv64ui-v-amoswap_w \
rv64ui-v-amomax_d \
rv64ui-v-amomax_w \
rv64ui-v-amomaxu_d \
rv64ui-v-amomaxu_w \
rv64ui-v-amomin_d \
rv64ui-v-amomin_w \
rv64ui-v-amominu_d \
rv64ui-v-amominu_w \
rv64ui-v-auipc \
rv64ui-v-fence_i \
rv64ui-v-sb \
rv64ui-v-sd \
rv64ui-v-sh \
rv64ui-v-sw \
rv64ui-v-addiw \
rv64ui-v-addw \
rv64ui-v-and \
rv64ui-v-andi \
rv64ui-v-beq \
rv64ui-v-bge \
rv64ui-v-bgeu \
rv64ui-v-blt \
rv64ui-v-bltu \
rv64ui-v-bne \
rv64ui-v-div \
rv64ui-v-divu \
rv64ui-v-divuw \
rv64ui-v-divw \
rv64ui-v-j \
rv64ui-v-jal \
rv64ui-v-jalr \
rv64ui-v-lb \
rv64ui-v-lbu \
rv64ui-v-ld \
rv64ui-v-lh \
rv64ui-v-lhu \
rv64ui-v-lui \
rv64ui-v-lw \
rv64ui-v-lwu \
rv64ui-v-mul \
rv64ui-v-mulh \
rv64ui-v-mulhsu \
rv64ui-v-mulhu \
rv64ui-v-mulw \
rv64ui-v-or \
rv64ui-v-ori \
rv64ui-v-rem \
rv64ui-v-remu \
rv64ui-v-remuw \
rv64ui-v-remw \
rv64ui-v-sll \
rv64ui-v-slli \
rv64ui-v-slliw \
rv64ui-v-sllw \
rv64ui-v-slt \
rv64ui-v-slti \
rv64ui-v-sltiu \
rv64ui-v-sltu \
rv64ui-v-sra \
rv64ui-v-srai \
rv64ui-v-sraiw \
rv64ui-v-sraw \
rv64ui-v-srliw \
rv64ui-v-srlw \
rv64ui-v-sub \
rv64ui-v-subw \
rv64ui-v-xor \
rv64ui-v-xori \
rv64uf-v-ldst \
rv64uf-v-move \
rv64uf-v-fsgnj \
rv64uf-v-fcmp \
rv64uf-v-fcvt \
rv64uf-v-fcvt_w \
rv64uf-v-fclass \
rv64uf-v-fadd \
rv64uf-v-fmin \
rv64uf-v-fmadd \
rv64uf-v-fdiv \
rv64uf-v-structural \
#--------------------------------------------------------------------
# Benchmark Tests
#--------------------------------------------------------------------
tests_bmark_dir = $(base_dir)/riscv-tools/riscv-tests/benchmarks
bmarks = \
median.riscv \
multiply.riscv \
qsort.riscv \
towers.riscv \
vvadd.riscv \
mm.riscv \
dhrystone.riscv \
spmv.riscv \
mt-vvadd.riscv \
mt-matmul.riscv \
#vec-vvadd.riscv \
#vec-cmplxmult.riscv \
#vec-matmul.riscv \
#--------------------------------------------------------------------
# Multi-threaded Benchmark Tests
#--------------------------------------------------------------------
test_mt_bmark_dir = $(base_dir)/riscv-tools/riscv-tests/mt
mt_bmarks = \
vvadd0.riscv \
vvadd1.riscv \
vvadd2.riscv \
vvadd3.riscv \
vvadd4.riscv \
ad_matmul.riscv \
ae_matmul.riscv \
af_matmul.riscv \
ag_matmul.riscv \
ai_matmul.riscv \
ak_matmul.riscv \
al_matmul.riscv \
am_matmul.riscv \
an_matmul.riscv \
ap_matmul.riscv \
aq_matmul.riscv \
ar_matmul.riscv \
at_matmul.riscv \
av_matmul.riscv \
ay_matmul.riscv \
az_matmul.riscv \
bb_matmul.riscv \
bc_matmul.riscv \
bf_matmul.riscv \
bh_matmul.riscv \
bj_matmul.riscv \
bk_matmul.riscv \
bm_matmul.riscv \
bo_matmul.riscv \
br_matmul.riscv \
bs_matmul.riscv \
ce_matmul.riscv \
cf_matmul.riscv \
cg_matmul.riscv \
ci_matmul.riscv \
ck_matmul.riscv \
cl_matmul.riscv \
cm_matmul.riscv \
cs_matmul.riscv \
cv_matmul.riscv \
cy_matmul.riscv \
dc_matmul.riscv \
df_matmul.riscv \
dm_matmul.riscv \
do_matmul.riscv \
dr_matmul.riscv \
ds_matmul.riscv \
du_matmul.riscv \
dv_matmul.riscv \
#--------------------------------------------------------------------
# Build Tests
#--------------------------------------------------------------------
%.hex:
$(MAKE) -C $(dir $@) $(notdir $@)
%.riscv.hex: %
$(MAKE) -C $(dir $@) $(notdir $@)
$(addprefix $(output_dir)/, $(addsuffix .hex, $(asm_p_tests) $(asm_pt_tests) $(asm_v_tests))): $(output_dir)/%.hex: $(tests_isa_dir)/%.hex
mkdir -p $(output_dir)
ln -fs $< $@
$(addprefix $(output_dir)/, $(addsuffix .hex, $(bmarks))): $(output_dir)/%.hex: $(tests_bmark_dir)/%.hex
mkdir -p $(output_dir)
ln -fs $< $@
$(addprefix $(output_dir)/, $(addsuffix .hex, $(mt_bmarks))): $(output_dir)/%.hex: $(test_mt_bmark_dir)/%.hex
mkdir -p $(output_dir)
ln -fs $< $@
$(addprefix $(output_dir)/, $(asm_p_tests) $(asm_pt_tests) $(asm_v_tests)): $(output_dir)/%: $(tests_isa_dir)/%
mkdir -p $(output_dir)
ln -fs $< $@
$(addprefix $(output_dir)/, $(bmarks)): $(output_dir)/%: $(tests_bmark_dir)/%
mkdir -p $(output_dir)
ln -fs $< $@
$(addprefix $(output_dir)/, $(mt_bmarks)): $(output_dir)/%: $(test_mt_bmark_dir)/%
mkdir -p $(output_dir)
ln -fs $< $@