ReonV/riscv/Makefile
2018-07-24 13:48:48 -03:00

133 lines
3.6 KiB
Makefile

################################################################################
#
# Author: Lucas Castro
# Last modification: april/2018
#
# Makefile for running programs on ReonV
#
################################################################################
#
# Update the following variables to your environment and board used
# Cross compiler (Must be RV32I only)
CROSS=../../riscv-gcc/bin/riscv32-unknown-elf-
GRMON=../../grmon-eval-3.0.9/linux/bin64/grmon
GRMON_OPTIONS=-digilent -u
# Design you are targeting
DESIGN=leon3-digilent-nexys4ddr
CC=gcc
AS=as
OBJCOPY=objcopy
CFLAGS=-nostdlib
OBJCPFLAGS=-O binary -j .text -j .data
LD_SCRIPT=ld_script
WRAP=-Wl,-wrap,exit,-wrap,open,-wrap,close,-wrap,write,-wrap,read,-wrap,lseek,-wrap,sbrk
################################################################################
#
# Targets for compiling
#
MAIN_OBJS=reonv_crt0.o mini_printf.o posix.o
# Compiled binary linked with reonv_crt0
#%.out : %.c reonv_crt0.o posix.o
# ${CROSS}${CC} -static -static-libgcc -march=rv32i ${WRAP} -T${LD_SCRIPT} $< -o $@
%.out : $(MAIN_OBJS) %.o
${CROSS}gcc -static -nostartfiles -march=rv32i $^ \
${WRAP},-lm,--no-relax,-melf32lriscv,-Ttext=0x40001000,-e,__reonv_start -o $@
# ${WRAP},--verbose -Tlinker_script -o $@
# Targets for .S.
# .o is for linking programs (i.e. crt0.S)
# .hex is for other assembly programs
%.hex : %.S
${CROSS}$(AS) $< -o $@
%.o : %.c
${CROSS}${CC} -lm -march=rv32i -D TEST -c $< -o $@
#mini_printf.o : mini_printf.c
# ${CROSS}${CC} -c $< -o $@
posix.o : posix.c
${CROSS}${CC} -c $< -o $@ -nostdlib
reonv_crt0.o : reonv_crt0.S
${CROSS}${CC} -c $< -o $@ -nostdlib
# Target raw binary to avoid grmon2 errors saying this is not SPARC '-'
%.bin : %.out
${CROSS}$(OBJCOPY) $(OBJCPFLAGS) $< $@
%.bin : %.hex
${CROSS}$(OBJCOPY) $(OBJCPFLAGS) $< $@
# Make binaries readable
%.read : %.* ./tools/to_text.x86
./tools/to_text.x86 $< $@
# Copy grmon-dump.bin from design directory
copy_dump : ../designs/$(DESIGN)/grmon-dump.bin
cp ../designs/$(DESIGN)/grmon-dump.bin .
# Read dump from grmon
read_dump : copy_dump ./tools/to_text.x86
./tools/to_text.x86 grmon-dump.bin grmon-dump.read
rm grmon-dump.bin ./tools/*.x86 -f
################################################################################
#
# Benchmarks
#
#
SRC := wcet_benchmark
SOURCES := $(wildcard $(SRC)/*.c)
TESTS := $(patsubst $(SRC)/%.c, $(SRC)/%.out, $(SOURCES))
X86 := $(patsubst $(SRC)/%.c, $(SRC)/%.x86, $(SOURCES))
tests: $(TESTS)
@echo "Generated tests for ReonV"
x86: $(X86)
@echo "Generated x86 to check correct output"
bench: tests x86
@chmod +x tools/run_bench.sh
@tools/run_bench.sh $(GRMON) $(GRMON_OPTIONS)
grmon_run :
$(GRMON) $(GRMON_OPTIONS) -c grmon_script.txt -log grmon_log.txt -abaud 115200 > /dev/null
grmon_norun :
$(GRMON) $(GRMON_OPTIONS) -c grmon_norun.txt > /dev/null
#$(SRC)/%.out: $(SRC)/%.c
# $(CC) -I$(SRC) $< -o $@
$(SRC)/%.x86 : $(SRC)/%.c
gcc $< -o $@ -lm
################################################################################
#
# Boot Code
#
# Adapted PROM generation based on original leon3 script (found at ../bin)
ahbrom.vhd : ahbrom boot_code.bin
./ahbrom boot_code.bin ahbrom.vhd
bootcode : ahbrom.vhd
cp ahbrom.vhd ../designs/${DESIGN}/ahbrom.vhd -f
@echo "Generated ahbrom.vhd and placed at ../../designs/${DESIGN}"
ahbrom : ../bin/ahbrom.c
gcc ../bin/ahbrom.c -o ahbrom
clean:
rm -rf ahbrom* tools/*.x86 *.hex *.inv *.convert *.bin *.o *log *.jou *.str \
$(SRC)/*.out $(SRC)/*.o $(SRC)/*.x86 $(SRC)/*.log *.out *.read grmon_log.txt \
./tools/grmon_run ./tools/grmon_norun ./tools/res.* ./tools/to_text