diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 95c971b401..9283dbf342 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -437,13 +437,19 @@ jobs: toolchain: nightly override: true + - name: Add the `thumbv7em-none-eabi` target + run: | + rustup target add `thumbv7em-none-eabi` + - name: Rust Cache uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84 # v2.7.3 - # Note: in `no_std` no real tests are possible, we just run a binary with some tests in it which panic upon failure. - - name: Run no_std tests + # Note: We currently do not have a way to run real tests in a `no_std` environment. + # We can only make sure that they compile to ARM thumb ISA. + # Running the binary and inspecting the output would require an actual machine with matching ISA or some sort of emulator. + - name: Compile `no-std-tests` crate to `thumbv7em-none-eabi` target. run: | - cargo run + cargo build --target thumbv7em-none-eabi working-directory: testing/no-std-tests - if: "failure()" diff --git a/testing/no-std-tests/src/main.rs b/testing/no-std-tests/src/main.rs index 8f8eace211..7a7b411479 100644 --- a/testing/no-std-tests/src/main.rs +++ b/testing/no-std-tests/src/main.rs @@ -9,7 +9,7 @@ #[start] fn start(_argc: isize, _argv: *const *const u8) -> isize { - run_tests(); + compile_test(); 0 } @@ -19,9 +19,7 @@ pub extern "C" fn rust_eh_personality() {} #[panic_handler] fn panic(_info: &core::panic::PanicInfo) -> ! { - unsafe { - libc::abort(); - } + loop {} } use libc_alloc::LibcAlloc; @@ -33,15 +31,13 @@ static ALLOCATOR: LibcAlloc = LibcAlloc; extern crate alloc; -// Note: Panics in this function will lead to `Aborted (core dumped)` and a non-zero exit status => suitable for CI tests. -fn run_tests() { - subxt_metadata_test(); - subxt_signer_test(); - subxt_core_test(); +/// Including code here makes sure it is not pruned. +/// We want all code included to compile fine for the `thumbv7em-none-eabi` target. +fn compile_test() { + subxt_metadata_compiles(); } -/// Makes sure, subxt-metadata works in a no-std-context: -fn subxt_metadata_test() { +fn subxt_metadata_compiles() { use codec::Decode; let bytes: alloc::vec::Vec = alloc::vec![0, 1, 2, 3, 4]; subxt_metadata::Metadata::decode(&mut &bytes[..]).expect_err("invalid byte sequence");