Merge #223 223: Add the ErrorCode type to libtock_platform. r=hudson-ayers a=jrvanwhy ErrorCode is a wrapper around an isize that is useful for type safety. Its intended use case is to wrap a non-successful ReturnCode returned from a system call. Co-authored-by: Johnathan Van Why <jrvanwhy@google.com>
diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml new file mode 100644 index 0000000..3617c11 --- /dev/null +++ b/.github/workflows/artifacts.yml
@@ -0,0 +1,53 @@ +name: Artifacts +on: [push] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Install Rust toolchain + uses: actions-rs/toolchain@v1.0.6 + with: + profile: minimal + + - name: Install dependencies + run: | + rustup target add thumbv7em-none-eabi + rustup target add riscv32imac-unknown-none-elf + rustup target add riscv32imc-unknown-none-elf + cargo install elf2tab --version 0.4.0 + + - name: Build Hello World + run: | + FEATURES="alloc" make flash-apollo3 EXAMPLE=hello_world -j2 + FEATURES="alloc" make flash-hail EXAMPLE=hello_world -j2 + FEATURES="alloc" make flash-nucleo_f429zi EXAMPLE=hello_world -j2 + FEATURES="alloc" make flash-nucleo_f446re EXAMPLE=hello_world -j2 + FEATURES="alloc" make flash-nrf52840 EXAMPLE=hello_world -j2 + FEATURES="alloc" make flash-opentitan EXAMPLE=hello_world -j2 + FEATURES="alloc" make flash-hifive1 EXAMPLE=hello_world -j2 + FEATURES="alloc" make flash-nrf52 EXAMPLE=hello_world -j2 + + - name: Build libtock-test + run: | + FEATURES="alloc" make flash-apollo3 EXAMPLE=libtock_test -j2 + FEATURES="alloc" make flash-hail EXAMPLE=libtock_test -j2 + FEATURES="alloc" make flash-nucleo_f429zi EXAMPLE=libtock_test -j2 + FEATURES="alloc" make flash-nucleo_f446re EXAMPLE=libtock_test -j2 + FEATURES="alloc" make flash-nrf52840 EXAMPLE=libtock_test -j2 + FEATURES="alloc" make flash-opentitan EXAMPLE=libtock_test -j2 + FEATURES="alloc" make flash-hifive1 EXAMPLE=libtock_test -j2 + FEATURES="alloc" make flash-nrf52 EXAMPLE=libtock_test -j2 + + - name: Build extra tests + run: | + FEATURES="alloc" make flash-opentitan EXAMPLE=hmac -j2 + + - name: Archive artifacts + uses: actions/upload-artifact@v2 + with: + name: libtock-rs examples + path: target/*/tab/*/*/*.tbf
diff --git a/Cargo.toml b/Cargo.toml index cb8e160..9ac3f91 100644 --- a/Cargo.toml +++ b/Cargo.toml
@@ -9,7 +9,11 @@ alloc = ["libtock_core/alloc"] custom_panic_handler = ["libtock_core/custom_panic_handler"] custom_alloc_error_handler = ["libtock_core/custom_alloc_error_handler"] +# In the QEMU-emulated HiFive1 target, we do not have connected GPIO pins or a +# working timer interface. These features allow the test's user to disable these +# tests in environments where they will not pass. __internal_disable_gpio_in_integration_test = [] +__internal_disable_timer_in_integration_test = [] [dependencies] libtock_core = { path = "core" }
diff --git a/Makefile b/Makefile index 0227e3d..d47b155 100644 --- a/Makefile +++ b/Makefile
@@ -68,7 +68,8 @@ .PHONY: test-qemu-hifive test-qemu-hifive: kernel-hifive PLATFORM=hifive1 cargo rrv32imac --example libtock_test --features=alloc \ - --features=__internal_disable_gpio_in_integration_test + --features=__internal_disable_gpio_in_integration_test \ + --features=__internal_disable_timer_in_integration_test cargo run -p test_runner .PHONY: examples
diff --git a/examples-features/libtock_test.rs b/examples-features/libtock_test.rs index 9a64e67..ac1e541 100644 --- a/examples-features/libtock_test.rs +++ b/examples-features/libtock_test.rs
@@ -51,6 +51,7 @@ test.formatting()?; test.heap()?; test.drivers_only_instantiable_once()?; + #[cfg(not(feature = "__internal_disable_timer_in_integration_test"))] test.callbacks(timer).await?; #[cfg(not(feature = "__internal_disable_gpio_in_integration_test"))] test.gpio(gpio)?; @@ -113,6 +114,10 @@ ) } + #[cfg_attr( + feature = "__internal_disable_timer_in_integration_test", + allow(dead_code) + )] async fn callbacks(&mut self, timer_context: &mut DriverContext) -> TockResult<()> { let mut callback_hit = false; let mut with_callback = timer_context.with_callback(|_, _| callback_hit = true);
diff --git a/test_runner/src/main.rs b/test_runner/src/main.rs index e297e8e..0bea1cf 100644 --- a/test_runner/src/main.rs +++ b/test_runner/src/main.rs
@@ -14,7 +14,7 @@ async fn perform_tests() -> Result<(), Box<dyn std::error::Error>> { let mut failed_tests = Vec::new(); - let tests = Command::new("tock/tools/qemu/riscv32-softmmu/qemu-system-riscv32") + let tests = Command::new("tock/tools/qemu-build/riscv32-softmmu/qemu-system-riscv32") .arg("-M") .arg("sifive_e,revb=true") .arg("-kernel")
diff --git a/tock b/tock index 957a890..6e38588 160000 --- a/tock +++ b/tock
@@ -1 +1 @@ -Subproject commit 957a890e97550db00ca38407d93d2896d2724ec5 +Subproject commit 6e38588c73dbd78d274c00ae7fb7789b78cf6856
diff --git a/tools/flash.sh b/tools/flash.sh index cee7571..56ffb88 100755 --- a/tools/flash.sh +++ b/tools/flash.sh
@@ -70,5 +70,10 @@ exit 0 fi +if ! [ -x "$(command -v tockloader)" ]; then + echo "Skipping flashing as tockloader isn't installed" + exit 0 +fi + tockloader uninstall ${tockloader_flags} || true tockloader install ${tockloader_flags} "${tab_file_name}"