agb/justfile

181 lines
5.5 KiB
Makefile
Raw Normal View History

export CARGO_TARGET_DIR := env_var_or_default('CARGO_TARGET_DIR', justfile_directory() + "/target")
CLIPPY_ARGUMENTS := "-Dwarnings -Dclippy::all -Aclippy::empty-loop"
build: build-roms
2022-02-25 08:29:33 +11:00
build-debug:
just _build-debug agb
just _build-debug tracker/agb-tracker
build-release:
just _build-release agb
just _build-release tracker/agb-tracker
clippy:
just _all-crates _clippy
2022-08-05 07:23:49 +10:00
just _clippy tools
test:
just _test-debug agb
2023-10-18 09:49:57 +11:00
just _test-multiboot
just _test-debug agb-fixnum
2023-04-24 03:48:16 +10:00
just _test-debug agb-hashmap
just _test-debug tracker/agb-tracker
2022-08-02 02:36:12 +10:00
just _test-debug-arm agb
2022-08-05 07:23:49 +10:00
just _test-debug tools
2023-08-06 04:15:06 +10:00
just _test-debug emulator
test-release:
just _test-release agb
just _test-release agb-fixnum
just _test-release tracker/agb-tracker
2022-08-02 02:36:12 +10:00
just _test-release-arm agb
doctest-agb:
(cd agb && cargo test --doc -Z doctest-xcompile)
2022-10-13 03:29:20 +11:00
check-docs:
2023-07-24 04:52:11 +10:00
(cd agb && cargo doc --target=thumbv4t-none-eabi --no-deps)
(cd tracker/agb-tracker && cargo doc --target=thumbv4t-none-eabi --no-deps)
2022-10-13 03:29:20 +11:00
just _build_docs agb-fixnum
2023-04-24 03:37:22 +10:00
just _build_docs agb-hashmap
2022-10-13 03:29:20 +11:00
_build_docs crate:
(cd "{{crate}}" && cargo doc --no-deps)
2022-10-13 03:29:20 +11:00
clean:
just _all-crates _clean
fmt:
just _all-crates _fmt
just _fmt tools
fmt-check:
just _all-crates _fmt-check
just _fmt-check tools
2022-02-25 09:07:28 +11:00
run-example example:
just _build-example "{{example}}"
mgba-qt "$CARGO_TARGET_DIR/thumbv4t-none-eabi/debug/examples/{{example}}"
run-example-release example:
just _build-example-release "{{example}}"
mgba-qt "$CARGO_TARGET_DIR/thumbv4t-none-eabi/release/examples/{{example}}"
2022-02-25 09:19:25 +11:00
run-game game:
(cd "examples/{{game}}" && cargo run --release)
run-game-debug game:
(cd "examples/{{game}}" && cargo run)
ci: build-debug clippy fmt-check test miri build-release test-release doctest-agb test-games build-roms build-book check-docs
2022-02-25 08:29:33 +11:00
build-roms:
2022-02-25 08:29:33 +11:00
just _build-rom "examples/the-purple-night" "PURPLENIGHT"
just _build-rom "examples/the-hat-chooses-the-wizard" "HATWIZARD"
2022-07-25 06:35:28 +10:00
just _build-rom "examples/hyperspace-roll" "HYPERSPACE"
2023-07-26 05:27:03 +10:00
just _build-rom "examples/the-dungeon-puzzlers-lament" "DUNGLAMENT"
2023-04-26 10:37:37 +10:00
just _build-rom "examples/amplitude" "AMPLITUDE"
just _build-rom "examples/combo" "AGBGAMES"
2022-02-25 08:29:33 +11:00
just _build-rom "book/games/pong" "PONG"
(cd examples/target && zip examples.zip examples/*.gba)
2022-02-25 08:36:18 +11:00
build-book:
(cd book && mdbook build)
update-lockfiles *args:
bash .github/scripts/update-lockfiles.sh {{args}}
2022-02-25 08:37:22 +11:00
publish *args: (_run-tool "publish" args)
2022-08-05 06:30:52 +10:00
2022-10-03 03:55:05 +11:00
release +args: (_run-tool "release" args)
2023-04-24 02:46:00 +10:00
miri:
(cd agb-hashmap && cargo miri test)
2024-04-04 08:58:10 +11:00
build-mgba-wasm:
2024-04-04 11:07:10 +11:00
rm -rf website/app/src/vendor
2024-04-04 08:58:10 +11:00
mkdir website/app/src/vendor
podman build --file website/mgba-wasm/BuildMgbaWasm --output=website/app/src/vendor .
2024-04-04 11:07:10 +11:00
build-combo-rom-site:
just _build-rom "examples/combo" "AGBGAMES"
cp examples/target/examples/combo.gba website/app/public/game.gba
build-site-mgba-wrapper: build-mgba-wasm
(cd website/app && npm run build)
build-site: build-combo-rom-site build-site-mgba-wrapper build-book
rm -rf website/build
cp website/site website/build -r
cp book/book website/build/book -r
cp website/app/build website/build/mgba -r
2022-08-05 06:30:52 +10:00
_run-tool +tool:
2022-10-03 03:53:42 +11:00
(cd tools && cargo build)
"$CARGO_TARGET_DIR/debug/tools" {{tool}}
2022-08-05 06:30:52 +10:00
2023-09-14 21:29:13 +10:00
test-games:
just test-game the-dungeon-puzzlers-lament
test-game game:
(cd "examples/{{game}}" && CARGO_TARGET_THUMBV4T_NONE_EABI_RUNNER=mgba-test-runner cargo test)
2022-02-25 08:29:33 +11:00
_build-rom folder name:
#!/usr/bin/env bash
set -euxo pipefail
2022-02-25 08:29:33 +11:00
GAME_FOLDER="{{folder}}"
INTERNAL_NAME="{{name}}"
GAME_NAME="$(basename "$GAME_FOLDER")"
TARGET_FOLDER="${CARGO_TARGET_DIR:-$GAME_FOLDER/target}"
GBA_FILE="$TARGET_FOLDER/$GAME_NAME.gba"
(cd "$GAME_FOLDER" && cargo build --release --target thumbv4t-none-eabi && cargo clippy --release --target thumbv4t-none-eabi -- {{CLIPPY_ARGUMENTS}} && cargo fmt --all -- --check)
2022-02-25 08:29:33 +11:00
mkdir -p examples/target/examples
2023-04-09 06:18:27 +10:00
just gbafix --title "${INTERNAL_NAME:0:12}" --gamecode "${INTERNAL_NAME:0:4}" --makercode GC "$TARGET_FOLDER/thumbv4t-none-eabi/release/$GAME_NAME" -o "$GBA_FILE"
2022-02-25 08:29:33 +11:00
cp -v "$GBA_FILE" "examples/target/examples/$GAME_NAME.gba"
2023-04-09 06:14:11 +10:00
gbafix *args:
(cd agb-gbafix && cargo run --release -- {{args}})
2022-02-25 08:29:33 +11:00
_all-crates target:
for CARGO_PROJECT_FILE in agb-*/Cargo.toml agb/Cargo.toml tracker/agb-*/Cargo.toml; do \
2022-02-25 08:29:33 +11:00
PROJECT_DIR=$(dirname "$CARGO_PROJECT_FILE"); \
2022-03-14 07:10:37 +11:00
just "{{target}}" "$PROJECT_DIR" || exit $?; \
2022-02-25 08:29:33 +11:00
done
_build-debug crate:
(cd "{{crate}}" && cargo build --examples --tests)
_build-release crate:
(cd "{{crate}}" && cargo build --release --examples --tests)
2022-02-25 08:29:33 +11:00
_test-release crate:
just _build-release {{crate}}
(cd "{{crate}}" && cargo test --release)
2022-08-02 02:36:12 +10:00
_test-release-arm crate:
(cd "{{crate}}" && cargo test --release --target=armv4t-none-eabi)
2022-02-25 08:29:33 +11:00
_test-debug crate:
just _build-debug {{crate}}
(cd "{{crate}}" && cargo test)
2022-08-02 02:36:12 +10:00
_test-debug-arm crate:
2022-08-24 11:52:32 +10:00
(cd "{{crate}}" && cargo test --target=armv4t-none-eabi)
2023-10-18 09:49:57 +11:00
_test-multiboot:
(cd "agb" && AGB_MULTIBOOT=true cargo test --features=multiboot --test=test_multiboot)
2022-02-25 08:29:33 +11:00
_clippy crate:
(cd "{{crate}}" && cargo clippy --examples --tests -- {{CLIPPY_ARGUMENTS}})
_clean crate:
(cd "{{crate}}" && cargo clean)
_fmt crate:
(cd "{{crate}}" && cargo fmt --all)
_fmt-check crate:
(cd "{{crate}}" && cargo fmt --all -- --check)
2022-02-25 09:07:28 +11:00
_build-example example:
(cd agb && cargo build "--example={{example}}")
_build-example-release example:
2022-08-24 11:52:32 +10:00
(cd agb && cargo build "--example={{example}}" --release)