Files
2025-10-14 09:52:32 +09:00

143 lines
6.6 KiB
Makefile

export SHELLOPTS := igncr
CPU32 := -march=rv32ic -mabi=ilp32 -mcmodel=medany -msmall-data-limit=8
CPU64 := -march=rv64ic -mabi=lp64 -mcmodel=medany -msmall-data-limit=8
AOPT := -g3 -Wall -Wa,--gdwarf2 -xassembler-with-cpp -c
COPT := -std=c99 -g3 -O0 -fno-jump-tables -ffunction-sections -fdata-sections -Wall -c
INCLUDEDIR := . riscv
LOPT := -g -Wall -Wl,--nmagic -nostartfiles -Wl,--gc-sections
LIBS := -lm -lc
VPATH := .
CCGRP :=
NAME := coverage
MIRRORROOT_FULL := instrumented/full/riscv
MIRRORROOT_TARGETED := instrumented/targeted/riscv
.PHONY: all clean
.PRECIOUS: $(MIRRORROOT_FULL)/%.c $(MIRRORROOT_TARGETED)/rv32/%.c $(MIRRORROOT_TARGETED)/rv64/%.c
.SECONDARY: $(NAME)_riscv_rv32.json $(NAME)_riscv_rv64.json
all: $(NAME)_riscv_rv32.elf $(NAME)_riscv_rv64.elf $(NAME)_riscv_rv32_flash.elf $(NAME)_riscv_rv64_flash.elf \
$(NAME)_riscv_rv32_instr_full.elf $(NAME)_riscv_rv64_instr_full.elf $(NAME)_riscv_rv32_flash_instr_full.elf $(NAME)_riscv_rv64_flash_instr_full.elf \
$(NAME)_riscv_rv32_instr_targeted.elf $(NAME)_riscv_rv64_instr_targeted.elf $(NAME)_riscv_rv32_flash_instr_targeted.elf $(NAME)_riscv_rv64_flash_instr_targeted.elf \
$(NAME).c.eca
$(MIRRORROOT_FULL) $(MIRRORROOT_TARGETED)/rv32 $(MIRRORROOT_TARGETED)/rv64:
mkdir --parents $@
%.c.eca: %.c
$(ECAGRP)t32cast eca $(ECAOPT) --export-cfg -o $@ $^
riscv/t32pp.c:
$(ECAGRP)/t32cast instrument --mode=mcdc --gen-instr-source-files --probe-dir=riscv
%.json: %.elf $(NAME).c.eca
$(ECAGRP)/t32mriscv -c ./scripts/config_t32cast.t32 -s ./scripts/detect-obs-gaps.cmm $< $@
$(MIRRORROOT_FULL)/%.c: %.c
$(ECAGRP)/t32cast instrument --mode=mcdc $(ECAOPT) -o $(MIRRORROOT_FULL)/$^ $^
$(MIRRORROOT_TARGETED)/rv32/%.c: %.c %_riscv_rv32.json
$(ECAGRP)/t32cast instrument --mode=mcdc --probe-dir=riscv --filter=$(filter-out $<,$^) $(ECAOPT) -o $@ $<
$(MIRRORROOT_TARGETED)/rv64/%.c: %.c %_riscv_rv64.json
$(ECAGRP)/t32cast instrument --mode=mcdc --probe-dir=riscv --filter=$(filter-out $<,$^) $(ECAOPT) -o $@ $<
%.rv32.o: %.c $(MAKEFILE_LIST)
$(CCGRP)gcc $(COPT) $(CPU32) $(addprefix -I ,$(INCLUDEDIR)) -o $@ $<
riscv/%.rv32.o: %.c $(MAKEFILE_LIST)
$(CCGRP)gcc $(COPT) $(CPU32) $(addprefix -I ,$(INCLUDEDIR)) -o $@ $<
%.rv64.o: %.c $(MAKEFILE_LIST)
$(CCGRP)gcc $(COPT) $(CPU64) $(addprefix -I ,$(INCLUDEDIR)) -o $@ $<
riscv/%.rv64.o: %.c $(MAKEFILE_LIST)
$(CCGRP)gcc $(COPT) $(CPU64) $(addprefix -I ,$(INCLUDEDIR)) -o $@ $<
%.rv32.o: %.cpp $(MAKEFILE_LIST)
$(CCGRP)g++ $(COPT) $(CPU32) $(addprefix -I ,$(INCLUDEDIR)) -o $@ $<
%.rv64.o: %.cpp $(MAKEFILE_LIST)
$(CCGRP)g++ $(COPT) $(CPU64) $(addprefix -I ,$(INCLUDEDIR)) -o $@ $<
%.rv32.o: %.sx $(MAKEFILE_LIST)
$(CCGRP)gcc $(AOPT) $(CPU32) $(addprefix -I ,$(INCLUDEDIR)) -o $@ $<
%.rv64.o: %.sx $(MAKEFILE_LIST)
$(CCGRP)gcc $(AOPT) $(CPU64) $(addprefix -I ,$(INCLUDEDIR)) -o $@ $<
$(MIRRORROOT_FULL)/%.rv32.o: $(MIRRORROOT_FULL)/%.c $(MAKEFILE_LIST) | $(MIRRORROOT_FULL)
$(CCGRP)gcc $(COPT) $(CPU32) $(addprefix -I ,$(INCLUDEDIR)) -include t32pp.h -o $@ $<
$(MIRRORROOT_FULL)/%.rv64.o: $(MIRRORROOT_FULL)/%.c $(MAKEFILE_LIST) | $(MIRRORROOT_FULL)
$(CCGRP)gcc $(COPT) $(CPU64) $(addprefix -I ,$(INCLUDEDIR)) -include t32pp.h -o $@ $<
$(MIRRORROOT_TARGETED)/rv32/%.rv32.o: $(MIRRORROOT_TARGETED)/rv32/%.c $(MAKEFILE_LIST) | $(MIRRORROOT_TARGETED)/rv32
$(CCGRP)gcc $(COPT) $(CPU32) $(addprefix -I ,$(INCLUDEDIR)) -include t32pp.h -o $@ $<
$(MIRRORROOT_TARGETED)/rv64/%.rv64.o: $(MIRRORROOT_TARGETED)/rv64/%.c $(MAKEFILE_LIST) | $(MIRRORROOT_TARGETED)/rv64
$(CCGRP)gcc $(COPT) $(CPU64) $(addprefix -I ,$(INCLUDEDIR)) -include t32pp.h -o $@ $<
riscv/flash.ld: riscv/riscv.lds $(MAKEFILE_LIST)
$(CCGRP)cpp -P -o $@ $< -D FLASHSTART=0x0 -D RAMSTART=0x08000000 -D RAMSIZE=32K -D FLASHSIZE=128K
riscv/sram.ld: riscv/riscv.lds $(MAKEFILE_LIST)
$(CCGRP)cpp -P -o $@ $< -D RAMSTART=0x80000000 -D RAMSIZE=32K
$(NAME)_riscv_rv32_flash.elf: $(addprefix riscv/,flash.ld entry.rv32.o start.rv32.o main.rv32.o $(NAME).rv32.o)
$(CCGRP)gcc $(LOPT) $(CPU32) -o $@ -T $^ -Wl,--start-group $(LIBS) -Wl,--end-group
$(NAME)_riscv_rv64_flash.elf: $(addprefix riscv/,flash.ld entry.rv64.o start.rv64.o main.rv64.o $(NAME).rv64.o)
$(CCGRP)gcc $(LOPT) $(CPU64) -o $@ -T $^ -Wl,--start-group $(LIBS) -Wl,--end-group
$(NAME)_riscv_rv32.elf: $(addprefix riscv/,sram.ld start.rv32.o start.rv32.o main.rv32.o $(NAME).rv32.o)
$(CCGRP)gcc $(LOPT) $(CPU32) -o $@ -T $^ -Wl,--start-group $(LIBS) -Wl,--end-group
$(NAME)_riscv_rv64.elf: $(addprefix riscv/,sram.ld start.rv64.o start.rv64.o main.rv64.o $(NAME).rv64.o)
$(CCGRP)gcc $(LOPT) $(CPU64) -o $@ -T $^ -Wl,--start-group $(LIBS) -Wl,--end-group
$(NAME)_riscv_rv32_flash_instr_full.elf: $(addprefix riscv/,flash.ld entry.rv32.o start.rv32.o main.rv32.o t32pp.rv32.o) $(MIRRORROOT_FULL)/$(NAME).rv32.o
$(CCGRP)gcc $(LOPT) $(CPU32) -o $@ -T $^ -Wl,--start-group $(LIBS) -Wl,--end-group
$(NAME)_riscv_rv32_instr_full.elf: $(addprefix riscv/,sram.ld start.rv32.o main.rv32.o t32pp.rv32.o) $(MIRRORROOT_FULL)/$(NAME).rv32.o
$(CCGRP)gcc $(LOPT) $(CPU32) -o $@ -T $^ -Wl,--start-group $(LIBS) -Wl,--end-group
$(NAME)_riscv_rv64_flash_instr_full.elf: $(addprefix riscv/,flash.ld entry.rv64.o start.rv64.o main.rv64.o t32pp.rv64.o) $(MIRRORROOT_FULL)/$(NAME).rv64.o
$(CCGRP)gcc $(LOPT) $(CPU64) -o $@ -T $^ -Wl,--start-group $(LIBS) -Wl,--end-group
$(NAME)_riscv_rv64_instr_full.elf: $(addprefix riscv/,sram.ld start.rv64.o main.rv64.o t32pp.rv64.o) $(MIRRORROOT_FULL)/$(NAME).rv64.o
$(CCGRP)gcc $(LOPT) $(CPU64) -o $@ -T $^ -Wl,--start-group $(LIBS) -Wl,--end-group
$(NAME)_riscv_rv32_flash_instr_targeted.elf: $(addprefix riscv/,flash.ld entry.rv32.o start.rv32.o main.rv32.o t32pp.rv32.o) $(MIRRORROOT_TARGETED)/rv32/$(NAME).rv32.o
$(CCGRP)gcc $(LOPT) $(CPU32) -o $@ -T $^ -Wl,--start-group $(LIBS) -Wl,--end-group
$(NAME)_riscv_rv32_instr_targeted.elf: $(addprefix riscv/,sram.ld start.rv32.o main.rv32.o t32pp.rv32.o) $(MIRRORROOT_TARGETED)/rv32/$(NAME).rv32.o
$(CCGRP)gcc $(LOPT) $(CPU32) -o $@ -T $^ -Wl,--start-group $(LIBS) -Wl,--end-group
$(NAME)_riscv_rv64_flash_instr_targeted.elf: $(addprefix riscv/,flash.ld entry.rv64.o start.rv64.o main.rv64.o t32pp.rv64.o) $(MIRRORROOT_TARGETED)/rv64/$(NAME).rv64.o
$(CCGRP)gcc $(LOPT) $(CPU64) -o $@ -T $^ -Wl,--start-group $(LIBS) -Wl,--end-group
$(NAME)_riscv_rv64_instr_targeted.elf: $(addprefix riscv/,sram.ld start.rv64.o main.rv64.o t32pp.rv64.o) $(MIRRORROOT_TARGETED)/rv64/$(NAME).rv64.o
$(CCGRP)gcc $(LOPT) $(CPU64) -o $@ -T $^ -Wl,--start-group $(LIBS) -Wl,--end-group
clean:
-rm -fv riscv/*.o
-rm -fv riscv/t32pp.*
-rm -fv *.elf
-rm -fv *.eca
-rm -fv *.json
-rm -fv $(MIRRORROOT_FULL)/*.*
-rm -fv $(MIRRORROOT_TARGETED)/rv32/*.*
-rm -fv $(MIRRORROOT_TARGETED)/rv64/*.*