aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jorge Aparicio <jorge@japaric.io> 2018-08-25 15:19:16 +0200
committerGravatar Jorge Aparicio <jorge@japaric.io> 2018-08-25 15:27:00 +0200
commitb26781c59e26739b0abc9a2b052f5294394f596a (patch)
tree86cf01eec6780f346a7b5d049ca26a47fdf888dc
parent5861058169dce0d65db7b20c0edce7b1e2dbb2de (diff)
downloadcortex-m-b26781c59e26739b0abc9a2b052f5294394f596a.tar.gz
cortex-m-b26781c59e26739b0abc9a2b052f5294394f596a.tar.zst
cortex-m-b26781c59e26739b0abc9a2b052f5294394f596a.zip
remove build dependency on arm-none-eabi-gcc
Before this commit we used gcc to assemble external assembly files into object files that we linked into our Rust program. This commit drops the dependency on gcc by shipping the already assembled object files with this crate source code.
-rw-r--r--cortex-m-rt/.gitignore1
-rw-r--r--cortex-m-rt/Cargo.toml3
-rw-r--r--cortex-m-rt/asm.s1
-rwxr-xr-xcortex-m-rt/assemble.sh17
-rw-r--r--cortex-m-rt/bin/thumbv6m-none-eabi.abin0 -> 886 bytes
-rw-r--r--cortex-m-rt/bin/thumbv7em-none-eabi.abin0 -> 886 bytes
-rw-r--r--cortex-m-rt/bin/thumbv7em-none-eabihf.abin0 -> 886 bytes
-rw-r--r--cortex-m-rt/bin/thumbv7m-none-eabi.abin0 -> 886 bytes
-rw-r--r--cortex-m-rt/build.rs11
9 files changed, 26 insertions, 7 deletions
diff --git a/cortex-m-rt/.gitignore b/cortex-m-rt/.gitignore
index 6dc3db1..9895bb1 100644
--- a/cortex-m-rt/.gitignore
+++ b/cortex-m-rt/.gitignore
@@ -1,3 +1,4 @@
**/*.rs.bk
Cargo.lock
+bin/*.o
target/
diff --git a/cortex-m-rt/Cargo.toml b/cortex-m-rt/Cargo.toml
index 988faa7..e831320 100644
--- a/cortex-m-rt/Cargo.toml
+++ b/cortex-m-rt/Cargo.toml
@@ -9,9 +9,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..f2ee3fd
--- /dev/null
+++ b/cortex-m-rt/assemble.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+set -euxo pipefail
+
+# cflags taken from cc 1.0.22
+
+arm-none-eabi-as -march=armv6s-m asm.s -o bin/cortex-m-rt.o
+ar crs bin/thumbv6m-none-eabi.a bin/cortex-m-rt.o
+
+arm-none-eabi-as -march=armv7-m asm.s -o bin/cortex-m-rt.o
+ar crs bin/thumbv7m-none-eabi.a bin/cortex-m-rt.o
+
+arm-none-eabi-as -march=armv7e-m asm.s -o bin/cortex-m-rt.o
+ar crs bin/thumbv7em-none-eabi.a bin/cortex-m-rt.o
+ar crs bin/thumbv7em-none-eabihf.a bin/cortex-m-rt.o
+
+rm bin/cortex-m-rt.o
diff --git a/cortex-m-rt/bin/thumbv6m-none-eabi.a b/cortex-m-rt/bin/thumbv6m-none-eabi.a
new file mode 100644
index 0000000..62ac317
--- /dev/null
+++ b/cortex-m-rt/bin/thumbv6m-none-eabi.a
Binary files differ
diff --git a/cortex-m-rt/bin/thumbv7em-none-eabi.a b/cortex-m-rt/bin/thumbv7em-none-eabi.a
new file mode 100644
index 0000000..ef9042f
--- /dev/null
+++ b/cortex-m-rt/bin/thumbv7em-none-eabi.a
Binary files differ
diff --git a/cortex-m-rt/bin/thumbv7em-none-eabihf.a b/cortex-m-rt/bin/thumbv7em-none-eabihf.a
new file mode 100644
index 0000000..ef9042f
--- /dev/null
+++ b/cortex-m-rt/bin/thumbv7em-none-eabihf.a
Binary files differ
diff --git a/cortex-m-rt/bin/thumbv7m-none-eabi.a b/cortex-m-rt/bin/thumbv7m-none-eabi.a
new file mode 100644
index 0000000..b93dae7
--- /dev/null
+++ b/cortex-m-rt/bin/thumbv7m-none-eabi.a
Binary files differ
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