From 580afa933535a2e0ec4c0e07c5b506b745d770f6 Mon Sep 17 00:00:00 2001 From: Gwilym Inzani Date: Sat, 20 Apr 2024 20:28:10 +0100 Subject: [PATCH 1/3] Make the backtrace feature optional --- agb/Cargo.toml | 5 +++-- agb/src/lib.rs | 17 +++++++++++------ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/agb/Cargo.toml b/agb/Cargo.toml index f824bd11..1d884349 100644 --- a/agb/Cargo.toml +++ b/agb/Cargo.toml @@ -8,7 +8,8 @@ license = "MPL-2.0" repository = "https://github.com/agbrs/agb" [features] -default = ["testing"] +default = ["backtrace", "testing"] +backtrace = ["testing", "dep:qrcodegen-no-heap"] testing = [] multiboot = [] @@ -20,7 +21,7 @@ agb_macros = { version = "0.19.1", path = "../agb-macros" } agb_fixnum = { version = "0.19.1", path = "../agb-fixnum" } agb_hashmap = { version = "0.19.1", path = "../agb-hashmap" } bilge = "0.2" -qrcodegen-no-heap = "1.8" +qrcodegen-no-heap = { version = "1.8", optional = true } portable-atomic = { version = "1.6.0", default-features = false, features = ["unsafe-assume-single-core"] } once_cell = { version = "1.19.0", default-features = false, features = ["critical-section"] } critical-section = { version = "1.1.2", features = ["restore-state-u16"] } diff --git a/agb/src/lib.rs b/agb/src/lib.rs index 26109560..c3184e4d 100644 --- a/agb/src/lib.rs +++ b/agb/src/lib.rs @@ -150,6 +150,7 @@ extern crate alloc; mod agb_alloc; mod agbabi; +#[cfg(feature = "backtrace")] mod backtrace; mod bitarray; /// Implements everything relating to things that are displayed on screen. @@ -167,6 +168,7 @@ pub mod mgba; pub use agb_fixnum as fixnum; /// Contains an implementation of a hashmap which suits the gameboy advance's hardware. pub use agb_hashmap as hash_map; +#[cfg(feature = "backtrace")] mod panics_render; /// Simple random number generator pub mod rng; @@ -201,10 +203,8 @@ pub use {agb_alloc::ExternalAllocator, agb_alloc::InternalAllocator}; #[panic_handler] #[allow(unused_must_use)] fn panic_implementation(info: &core::panic::PanicInfo) -> ! { - use core::fmt::Write; if let Some(mut mgba) = mgba::Mgba::new() { - write!(mgba, "{}", info); - mgba.set_level(mgba::DebugLevel::Fatal); + let _ = mgba.print(format_args!("{info}"), mgba::DebugLevel::Fatal); } #[allow(clippy::empty_loop)] @@ -296,8 +296,6 @@ impl Gba { /// You can run the tests using `cargo test`, but it will work better through `mgba-test-runner` by /// running something along the lines of `CARGO_TARGET_THUMBV4T_NONE_EABI_RUNNER=mgba-test-runner cargo test`. pub mod test_runner { - use self::panics_render::render_backtrace; - use super::*; #[doc(hidden)] @@ -327,13 +325,20 @@ pub mod test_runner { #[panic_handler] fn panic_implementation(info: &core::panic::PanicInfo) -> ! { + #[cfg(feature = "backtrace")] let frames = backtrace::unwind_exception(); if let Some(mut mgba) = mgba::Mgba::new() { let _ = mgba.print(format_args!("[failed]"), mgba::DebugLevel::Error); } - render_backtrace(&frames, info); + #[cfg(feature = "backtrace")] + crate::panics_render::render_backtrace(&frames, info); + + #[cfg(not(feature = "backtrace"))] + loop { + syscall::halt(); + } } static mut TEST_GBA: Option = None; From 96ad727b55d9dd33e8712c5606d55f01538b8368 Mon Sep 17 00:00:00 2001 From: Gwilym Inzani Date: Sat, 20 Apr 2024 20:28:17 +0100 Subject: [PATCH 2/3] Ensure feature flag combinations are built in CI and tested --- justfile | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/justfile b/justfile index c6ffcec3..ddff6f17 100644 --- a/justfile +++ b/justfile @@ -4,18 +4,22 @@ CLIPPY_ARGUMENTS := "-Dwarnings -Dclippy::all -Aclippy::empty-loop" build: build-roms build-debug: - just _build-debug agb - just _build-debug tracker/agb-tracker + (cd agb && cargo build --no-default-features) + (cd agb && cargo build --no-default-features --features=testing) + (cd agb && cargo build --examples --tests) + + (cd tracker/agb-tracker && cargo build --examples --tests) + build-release: - just _build-release agb - just _build-release tracker/agb-tracker + (cd agb && cargo build --examples --tests --release) + clippy: just _all-crates _clippy test: just _test-debug agb - just _test-multiboot just _test-debug tracker/agb-tracker + just _test-multiboot just _test-debug-arm agb test-release: @@ -147,17 +151,11 @@ _all-crates target: just "{{target}}" "$PROJECT_DIR" || exit $?; \ done -_build-debug crate: - (cd "{{crate}}" && cargo build --examples --tests) -_build-release crate: - (cd "{{crate}}" && cargo build --release --examples --tests) _test-release crate: - just _build-release {{crate}} (cd "{{crate}}" && cargo test --release) _test-release-arm crate: (cd "{{crate}}" && cargo test --release --target=armv4t-none-eabi) _test-debug crate: - just _build-debug {{crate}} (cd "{{crate}}" && cargo test) _test-debug-arm crate: (cd "{{crate}}" && cargo test --target=armv4t-none-eabi) From 300d834cfac8e7234ef2f7aadce25791b413cc8c Mon Sep 17 00:00:00 2001 From: Gwilym Inzani Date: Sat, 20 Apr 2024 20:42:38 +0100 Subject: [PATCH 3/3] Update changelog entry --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2bfc000f..f8d9524d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added a new crash screen which provides a mechanism for seeing a full stack trace of your program when it panics. This requires a change to your `.cargo/config.toml`. You must add the rust flag `"-Cforce-frame-pointers=yes"` to - your rustflags field. + your rustflags field. This can also be disabled by removing the `backtrace` feature. - Initial unicode support for font rendering. - Kerning support for font rendering. @@ -52,7 +52,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Replaced `.show()` and `.hide()` with `.set_visible()`in `RegularMap`, `AffineMap` and `InfiniteScrolledMap`. - Added `.into_inner()` to `InfiniteScrolledMap` to get the map back once you are done using it in the `InfiniteScrolledMap`. - Added `.hflip()`, `.vflip()`, `.priority()`, `.position()` to `ObjectUnmanaged` and `Object`. -- An abstraction over hblank DMA to allow for cool effects like gradients and circular windows. See the dma_effect* examples. +- An abstraction over hblank DMA to allow for cool effects like gradients and circular windows. See the dma_effect\* examples. - Expermental and incomplete support for MIDI files with agb-tracker. - Fixnum now implements [`num::Num`](https://docs.rs/num/0.4/num/trait.Num.html) from the [`num`](https://crates.io/crates/num) crate. - `Default` implementations for `RandomNumberGenerator`, `InitOnce` and `RawMutex`.