release := ""
cargo_flags := if release != "" { "--release" } else { "" }

default: run

build_user_prog prog:
    cd {{ "user" / prog }} && \
    RUSTFLAGS="-C relocation-model=pic" cargo b {{ cargo_flags }}
    riscv64-elf-objcopy -O binary {{ "target/riscv64/debug" / prog }} {{ "user" / prog / prog + ".mem" }}

build: (map_dir "user" "build_user_prog")
    cargo b {{ cargo_flags }}

run: build
    cargo r {{ cargo_flags }} --bin kernel-rust

map_dir dir recipe:
    @for file in `ls {{ dir }}`; do \
        just cargo_flags={{ cargo_flags }} {{ recipe }} $file ; \
    done
