diff options
-rw-r--r-- | cortex-m-rt/.gitignore | 3 | ||||
-rw-r--r-- | cortex-m-rt/.travis.yml | 17 | ||||
-rw-r--r-- | cortex-m-rt/Cargo.toml | 3 | ||||
-rw-r--r-- | cortex-m-rt/asm.s | 1 | ||||
-rwxr-xr-x | cortex-m-rt/assemble.sh | 19 | ||||
-rw-r--r-- | cortex-m-rt/bin/thumbv6m-none-eabi.a | bin | 0 -> 886 bytes | |||
-rw-r--r-- | cortex-m-rt/bin/thumbv7em-none-eabi.a | bin | 0 -> 886 bytes | |||
-rw-r--r-- | cortex-m-rt/bin/thumbv7em-none-eabihf.a | bin | 0 -> 886 bytes | |||
-rw-r--r-- | cortex-m-rt/bin/thumbv7m-none-eabi.a | bin | 0 -> 886 bytes | |||
-rw-r--r-- | cortex-m-rt/build.rs | 11 | ||||
-rwxr-xr-x | cortex-m-rt/check-blobs.sh | 21 | ||||
-rw-r--r-- | cortex-m-rt/ci/install.sh | 8 | ||||
-rw-r--r-- | cortex-m-rt/ci/script.sh | 34 |
13 files changed, 71 insertions, 46 deletions
diff --git a/cortex-m-rt/.gitignore b/cortex-m-rt/.gitignore index 6dc3db1..c71d6db 100644 --- a/cortex-m-rt/.gitignore +++ b/cortex-m-rt/.gitignore @@ -1,3 +1,6 @@ **/*.rs.bk Cargo.lock +bin/*.after +bin/*.before +bin/*.o target/ diff --git a/cortex-m-rt/.travis.yml b/cortex-m-rt/.travis.yml index 7381b73..caa29ef 100644 --- a/cortex-m-rt/.travis.yml +++ b/cortex-m-rt/.travis.yml @@ -3,13 +3,10 @@ language: rust matrix: include: - env: TARGET=x86_64-unknown-linux-gnu - if: (branch = staging OR branch = trying) OR (type = pull_request AND branch = master) - - - env: TARGET=thumbv6m-none-eabi rust: stable if: (branch = staging OR branch = trying) OR (type = pull_request AND branch = master) - - env: TARGET=thumbv6m-none-eabi CC=clang + - env: TARGET=thumbv6m-none-eabi rust: stable if: (branch = staging OR branch = trying) OR (type = pull_request AND branch = master) @@ -17,26 +14,14 @@ matrix: rust: stable if: (branch = staging OR branch = trying) OR (type = pull_request AND branch = master) - - env: TARGET=thumbv7m-none-eabi CC=clang - rust: stable - if: (branch = staging OR branch = trying) OR (type = pull_request AND branch = master) - - env: TARGET=thumbv7em-none-eabi rust: stable if: (branch = staging OR branch = trying) OR (type = pull_request AND branch = master) - - env: TARGET=thumbv7em-none-eabi CC=clang - rust: stable - if: (branch = staging OR branch = trying) OR (type = pull_request AND branch = master) - - env: TARGET=thumbv7em-none-eabihf rust: stable if: (branch = staging OR branch = trying) OR (type = pull_request AND branch = master) - - env: TARGET=thumbv7em-none-eabihf CC=clang - rust: stable - if: (branch = staging OR branch = trying) OR (type = pull_request AND branch = master) - - env: TARGET=thumbv6m-none-eabi rust: nightly if: (branch = staging OR branch = trying) OR (type = pull_request AND branch = master) diff --git a/cortex-m-rt/Cargo.toml b/cortex-m-rt/Cargo.toml index 1ebcbb8..1cd9aaa 100644 --- a/cortex-m-rt/Cargo.toml +++ b/cortex-m-rt/Cargo.toml @@ -10,9 +10,6 @@ name = "cortex-m-rt" repository = "https://github.com/japaric/cortex-m-rt" version = "0.5.2" -[build-dependencies] -cc = "1.0.10" - [dependencies] r0 = "0.2.1" diff --git a/cortex-m-rt/asm.s b/cortex-m-rt/asm.s index 2937be8..c7133c0 100644 --- a/cortex-m-rt/asm.s +++ b/cortex-m-rt/asm.s @@ -1,3 +1,4 @@ + .section .text.HardFault .global HardFault .thumb_func HardFault: diff --git a/cortex-m-rt/assemble.sh b/cortex-m-rt/assemble.sh new file mode 100755 index 0000000..f9ec7d8 --- /dev/null +++ b/cortex-m-rt/assemble.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +set -euxo pipefail + +# cflags taken from cc 1.0.22 + +crate=cortex-m-rt + +arm-none-eabi-as -march=armv6s-m asm.s -o bin/$crate.o +ar crs bin/thumbv6m-none-eabi.a bin/$crate.o + +arm-none-eabi-as -march=armv7-m asm.s -o bin/$crate.o +ar crs bin/thumbv7m-none-eabi.a bin/$crate.o + +arm-none-eabi-as -march=armv7e-m asm.s -o bin/$crate.o +ar crs bin/thumbv7em-none-eabi.a bin/$crate.o +ar crs bin/thumbv7em-none-eabihf.a bin/$crate.o + +rm bin/$crate.o diff --git a/cortex-m-rt/bin/thumbv6m-none-eabi.a b/cortex-m-rt/bin/thumbv6m-none-eabi.a Binary files differnew file mode 100644 index 0000000..62ac317 --- /dev/null +++ b/cortex-m-rt/bin/thumbv6m-none-eabi.a diff --git a/cortex-m-rt/bin/thumbv7em-none-eabi.a b/cortex-m-rt/bin/thumbv7em-none-eabi.a Binary files differnew file mode 100644 index 0000000..ef9042f --- /dev/null +++ b/cortex-m-rt/bin/thumbv7em-none-eabi.a diff --git a/cortex-m-rt/bin/thumbv7em-none-eabihf.a b/cortex-m-rt/bin/thumbv7em-none-eabihf.a Binary files differnew file mode 100644 index 0000000..ef9042f --- /dev/null +++ b/cortex-m-rt/bin/thumbv7em-none-eabihf.a diff --git a/cortex-m-rt/bin/thumbv7m-none-eabi.a b/cortex-m-rt/bin/thumbv7m-none-eabi.a Binary files differnew file mode 100644 index 0000000..b93dae7 --- /dev/null +++ b/cortex-m-rt/bin/thumbv7m-none-eabi.a diff --git a/cortex-m-rt/build.rs b/cortex-m-rt/build.rs index fc53d79..8166b1b 100644 --- a/cortex-m-rt/build.rs +++ b/cortex-m-rt/build.rs @@ -1,18 +1,21 @@ -extern crate cc; - use std::env; -use std::fs::File; +use std::fs::{self, File}; use std::io::Write; use std::path::PathBuf; fn main() { let target = env::var("TARGET").unwrap(); + let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()); has_fpu(&target); let is_armv6m = is_armv6m(&target); if target.starts_with("thumbv") { - cc::Build::new().file("asm.s").compile("asm"); + fs::copy( + format!("bin/{}.a", target), + out_dir.join("libcortex-m-rt.a"), + ).unwrap(); + println!("cargo:rustc-link-lib=static=cortex-m-rt"); } // Put the linker script somewhere the linker can find it diff --git a/cortex-m-rt/check-blobs.sh b/cortex-m-rt/check-blobs.sh new file mode 100755 index 0000000..94fde42 --- /dev/null +++ b/cortex-m-rt/check-blobs.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# Checks that the blobs are up to date with the committed assembly files + +set -euxo pipefail + +for lib in $(ls bin/*.a); do + filename=$(basename $lib) + arm-none-eabi-objdump -Cd $lib > bin/${filename%.a}.before +done + +./assemble.sh + +for lib in $(ls bin/*.a); do + filename=$(basename $lib) + arm-none-eabi-objdump -Cd $lib > bin/${filename%.a}.after +done + +for cksum in $(ls bin/*.after); do + diff -u $cksum ${cksum%.after}.before +done diff --git a/cortex-m-rt/ci/install.sh b/cortex-m-rt/ci/install.sh index f211207..e63e805 100644 --- a/cortex-m-rt/ci/install.sh +++ b/cortex-m-rt/ci/install.sh @@ -3,13 +3,11 @@ set -euxo pipefail main() { if [ $TARGET != x86_64-unknown-linux-gnu ]; then rustup target add $TARGET + fi - if [ ${CC:-gcc} = gcc ]; then - mkdir gcc + mkdir gcc - curl -L https://developer.arm.com/-/media/Files/downloads/gnu-rm/7-2018q2/gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2?revision=bc2c96c0-14b5-4bb4-9f18-bceb4050fee7?product=GNU%20Arm%20Embedded%20Toolchain,64-bit,,Linux,7-2018-q2-update | tar --strip-components=1 -C gcc -xj - fi - fi + curl -L https://developer.arm.com/-/media/Files/downloads/gnu-rm/7-2018q2/gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2?revision=bc2c96c0-14b5-4bb4-9f18-bceb4050fee7?product=GNU%20Arm%20Embedded%20Toolchain,64-bit,,Linux,7-2018-q2-update | tar --strip-components=1 -C gcc -xj } main diff --git a/cortex-m-rt/ci/script.sh b/cortex-m-rt/ci/script.sh index 2e070bf..7d1cc67 100644 --- a/cortex-m-rt/ci/script.sh +++ b/cortex-m-rt/ci/script.sh @@ -20,65 +20,63 @@ main() { # linking with GNU LD for ex in "${examples[@]}"; do cargo rustc --target $TARGET --example $ex -- \ - -C link-arg=-nostartfiles \ - -C link-arg=-Wl,-Tlink.x + -C linker=arm-none-eabi-ld \ + -C link-arg=-Tlink.x cargo rustc --target $TARGET --example $ex --release -- \ - -C link-arg=-nostartfiles \ - -C link-arg=-Wl,-Tlink.x + -C linker=arm-none-eabi-ld \ + -C link-arg=-Tlink.x done for ex in "${fail_examples[@]}"; do ! cargo rustc --target $TARGET --example $ex -- \ - -C link-arg=-nostartfiles \ - -C link-arg=-Wl,-Tlink.x + -C linker=arm-none-eabi-ld \ + -C link-arg=-Tlink.x ! cargo rustc --target $TARGET --example $ex --release -- \ - -C link-arg=-nostartfiles \ - -C link-arg=-Wl,-Tlink.x + -C linker=arm-none-eabi-ld \ + -C link-arg=-Tlink.x done cargo rustc --target $TARGET --example device --features device -- \ - -C link-arg=-nostartfiles \ - -C link-arg=-Wl,-Tlink.x + -C linker=arm-none-eabi-ld \ + -C link-arg=-Tlink.x cargo rustc --target $TARGET --example device --features device --release -- \ - -C link-arg=-nostartfiles \ - -C link-arg=-Wl,-Tlink.x + -C linker=arm-none-eabi-ld \ + -C link-arg=-Tlink.x # linking with rustc's LLD for ex in "${examples[@]}"; do cargo rustc --target $TARGET --example $ex -- \ -C linker=rust-lld \ - -Z linker-flavor=ld.lld \ -C link-arg=-Tlink.x cargo rustc --target $TARGET --example $ex --release -- \ -C linker=rust-lld \ - -Z linker-flavor=ld.lld \ -C link-arg=-Tlink.x done for ex in "${fail_examples[@]}"; do ! cargo rustc --target $TARGET --example $ex -- \ -C linker=rust-lld \ - -Z linker-flavor=ld.lld \ -C link-arg=-Tlink.x ! cargo rustc --target $TARGET --example $ex --release -- \ -C linker=rust-lld \ - -Z linker-flavor=ld.lld \ -C link-arg=-Tlink.x done cargo rustc --target $TARGET --example device --features device -- \ -C linker=rust-lld \ - -Z linker-flavor=ld.lld \ -C link-arg=-Tlink.x cargo rustc --target $TARGET --example device --features device --release -- \ -C linker=rust-lld \ - -Z linker-flavor=ld.lld \ -C link-arg=-Tlink.x fi + + if [ $TARGET = x86_64-unknown-linux-gnu ]; then + ./check-blobs.sh + fi } main |