# arch = {riscv32, riscv64, x86_64, aarch64} # mode = {debug, release} arch ?= riscv32 mode ?= debug rust_src_dir := src/bin rust_bin_path := target/$(arch)-rcore/$(mode) user_rust_bins := $(patsubst $(rust_src_dir)/%.rs, $(rust_bin_path)/%, $(wildcard $(rust_src_dir)/*.rs)) c_src_dir := c_bin_path := user_c_bins := user_bins := $(user_rust_bins) $(user_c_bins) build_path := build sfsroot := $(build_path)/sfsroot-$(arch) sfsimg := $(build_path)/user-$(arch).img mksfs := mksfs build_args := --target targets/$(arch)-rcore.json ifeq ($(mode), release) build_args := $(build_args) --release endif .PHONY: all clean build-rust build-c build mksfs sfsimg all: $(sfsimg) build-rust: @echo Building user rust programs @cargo xbuild $(build_args) build-c: @echo Building user C programs build: build-rust build-c $(user_rust_bins): build-rust $(user_c_bins): build-c mksfs: ifeq ($(shell which $(mksfs)),) @cargo install --git https://github.com/wangrunji0408/SimpleFileSystem-Rust --features="std" endif $(sfsroot): $(user_bins) @mkdir -p $@ @cp $^ $@/ $(sfsimg): $(user_bins) $(sfsroot) | mksfs @echo Creating SFS image at $@ @$(mksfs) zip $(sfsroot) $@ sfsimg: $(sfsimg) clean: @cargo clean @rm -rf $(build_path)