Replace rustflags with build.rs extra-link-args.

Rustflags apply to ALL the crates in the graph, while we only need
them for the toplevel crate which is the only one getting linked.

Rustflags are not equal for all crates, this caused cargo to re-build the
same dependency crate multiple times uselessly. After this change, deps
are reused more, making builds faster.

Note that this only applies when sharing the target/ dir for multiple crates
in the repo which is not the default.
This commit is contained in:
Dario Nieuwenhuis 2021-11-07 23:52:11 +01:00
parent 90095adedf
commit 2221e1fa93
32 changed files with 63 additions and 198 deletions

View file

@ -2,17 +2,5 @@
# replace nRF82840_xxAA with your chip as listed in `probe-run --list-chips` # replace nRF82840_xxAA with your chip as listed in `probe-run --list-chips`
runner = "probe-run --chip nRF52840_xxAA" runner = "probe-run --chip nRF52840_xxAA"
rustflags = [
# LLD (shipped with the Rust toolchain) is used as the default linker
"-C", "link-arg=--nmagic",
"-C", "link-arg=-Tlink.x",
"-C", "link-arg=-Tdefmt.x",
# Code-size optimizations.
"-Z", "trap-unreachable=no",
"-C", "inline-threshold=5",
"-C", "no-vectorize-loops",
]
[build] [build]
target = "thumbv7em-none-eabi" target = "thumbv7em-none-eabi"

View file

@ -28,4 +28,8 @@ fn main() {
// here, we ensure the build script is only re-run when // here, we ensure the build script is only re-run when
// `memory.x` is changed. // `memory.x` is changed.
println!("cargo:rerun-if-changed=memory.x"); println!("cargo:rerun-if-changed=memory.x");
println!("cargo:rustc-link-arg-bins=--nmagic");
println!("cargo:rustc-link-arg-bins=-Tlink.x");
println!("cargo:rustc-link-arg-bins=-Tdefmt.x");
} }

View file

@ -1,16 +1,5 @@
[target.'cfg(all(target_arch = "arm", target_os = "none"))'] [target.'cfg(all(target_arch = "arm", target_os = "none"))']
runner = "probe-run-rp --chip RP2040" runner = "probe-run-rp --chip RP2040"
rustflags = [
# LLD (shipped with the Rust toolchain) is used as the default linker
"-C", "link-arg=--nmagic",
"-C", "link-arg=-Tlink.x",
"-C", "link-arg=-Tlink-rp.x",
"-C", "link-arg=-Tdefmt.x",
# Code-size optimizations.
"-Z", "trap-unreachable=no",
]
[build] [build]
target = "thumbv6m-none-eabi" # Cortex-M0 and Cortex-M0+ target = "thumbv6m-none-eabi" # Cortex-M0 and Cortex-M0+

View file

@ -28,4 +28,9 @@ fn main() {
// here, we ensure the build script is only re-run when // here, we ensure the build script is only re-run when
// `memory.x` is changed. // `memory.x` is changed.
println!("cargo:rerun-if-changed=memory.x"); println!("cargo:rerun-if-changed=memory.x");
println!("cargo:rustc-link-arg-bins=--nmagic");
println!("cargo:rustc-link-arg-bins=-Tlink.x");
println!("cargo:rustc-link-arg-bins=-Tlink-rp.x");
println!("cargo:rustc-link-arg-bins=-Tdefmt.x");
} }

View file

@ -11,7 +11,7 @@ smoltcp = { git = "https://github.com/smoltcp-rs/smoltcp", rev="e4241510337e095b
async-io = "1.6.0" async-io = "1.6.0"
env_logger = "0.9.0" env_logger = "0.9.0"
futures = { version = "0.3.17", default-features = false, features = ["async-await"] } futures = { version = "0.3.17" }
log = "0.4.14" log = "0.4.14"
nix = "0.22.1" nix = "0.22.1"
libc = "0.2.101" libc = "0.2.101"

View file

@ -1,10 +1,5 @@
[target.thumbv6m-none-eabi] [target.thumbv6m-none-eabi]
runner = 'probe-run --chip STM32F030F4Px' runner = 'probe-run --chip STM32F030F4Px'
rustflags = [
# LLD (shipped with the Rust toolchain) is used as the default linker
"-C", "link-arg=-Tlink.x",
"-C", "link-arg=-Tdefmt.x",
]
[build] [build]
target = "thumbv6m-none-eabi" target = "thumbv6m-none-eabi"

View file

@ -15,7 +15,7 @@ defmt-rtt = "0.2.0"
panic-probe = "0.2.0" panic-probe = "0.2.0"
rtt-target = { version = "0.3.1", features = ["cortex-m"] } rtt-target = { version = "0.3.1", features = ["cortex-m"] }
embassy = { path = "../../embassy", features = ["defmt"] } embassy = { path = "../../embassy", features = ["defmt"] }
embassy-stm32 = { path = "../../embassy-stm32", features = ["defmt", "stm32f030f4", "time-driver-tim3"] } embassy-stm32 = { path = "../../embassy-stm32", features = ["defmt", "memory-x", "stm32f030f4", "time-driver-tim3"] }
[features] [features]
default = [ default = [

View file

@ -1,31 +1,5 @@
//! This build script copies the `memory.x` file from the crate root into
//! a directory where the linker can always find it at build time.
//! For many projects this is optional, as the linker always searches the
//! project root directory -- wherever `Cargo.toml` is. However, if you
//! are using a workspace or have a more complicated build setup, this
//! build script becomes required. Additionally, by requesting that
//! Cargo re-run the build script whenever `memory.x` is changed,
//! updating `memory.x` ensures a rebuild of the application with the
//! new memory settings.
use std::env;
use std::fs::File;
use std::io::Write;
use std::path::PathBuf;
fn main() { fn main() {
// Put `memory.x` in our output directory and ensure it's println!("cargo:rustc-link-arg-bins=--nmagic");
// on the linker search path. println!("cargo:rustc-link-arg-bins=-Tlink.x");
let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap()); println!("cargo:rustc-link-arg-bins=-Tdefmt.x");
File::create(out.join("memory.x"))
.unwrap()
.write_all(include_bytes!("memory.x"))
.unwrap();
println!("cargo:rustc-link-search={}", out.display());
// By default, Cargo will re-run a build script whenever
// any file in the project changes. By specifying `memory.x`
// here, we ensure the build script is only re-run when
// `memory.x` is changed.
println!("cargo:rerun-if-changed=memory.x");
} }

View file

@ -1,6 +0,0 @@
MEMORY
{
FLASH : ORIGIN = 0x08000000, LENGTH = 16K
/* DTCM */
RAM : ORIGIN = 0x20000000, LENGTH = 4K
}

View file

@ -2,17 +2,5 @@
# replace STM32F103C8 with your chip as listed in `probe-run --list-chips` # replace STM32F103C8 with your chip as listed in `probe-run --list-chips`
runner = "probe-run --chip STM32F103C8" runner = "probe-run --chip STM32F103C8"
rustflags = [
# LLD (shipped with the Rust toolchain) is used as the default linker
"-C", "link-arg=--nmagic",
"-C", "link-arg=-Tlink.x",
"-C", "link-arg=-Tdefmt.x",
# Code-size optimizations.
"-Z", "trap-unreachable=no",
"-C", "inline-threshold=5",
"-C", "no-vectorize-loops",
]
[build] [build]
target = "thumbv7m-none-eabi" target = "thumbv7m-none-eabi"

View file

@ -0,0 +1,5 @@
fn main() {
println!("cargo:rustc-link-arg-bins=--nmagic");
println!("cargo:rustc-link-arg-bins=-Tlink.x");
println!("cargo:rustc-link-arg-bins=-Tdefmt.x");
}

View file

@ -2,17 +2,5 @@
# replace STM32F429ZITx with your chip as listed in `probe-run --list-chips` # replace STM32F429ZITx with your chip as listed in `probe-run --list-chips`
runner = "probe-run --chip STM32F429ZITx" runner = "probe-run --chip STM32F429ZITx"
rustflags = [
# LLD (shipped with the Rust toolchain) is used as the default linker
"-C", "link-arg=--nmagic",
"-C", "link-arg=-Tlink.x",
"-C", "link-arg=-Tdefmt.x",
# Code-size optimizations.
"-Z", "trap-unreachable=no",
"-C", "inline-threshold=5",
"-C", "no-vectorize-loops",
]
[build] [build]
target = "thumbv7em-none-eabi" target = "thumbv7em-none-eabi"

View file

@ -0,0 +1,5 @@
fn main() {
println!("cargo:rustc-link-arg-bins=--nmagic");
println!("cargo:rustc-link-arg-bins=-Tlink.x");
println!("cargo:rustc-link-arg-bins=-Tdefmt.x");
}

View file

@ -2,17 +2,5 @@
# replace STM32F429ZITx with your chip as listed in `probe-run --list-chips` # replace STM32F429ZITx with your chip as listed in `probe-run --list-chips`
runner = "probe-run --chip STM32F767ZITx" runner = "probe-run --chip STM32F767ZITx"
rustflags = [
# LLD (shipped with the Rust toolchain) is used as the default linker
"-C", "link-arg=--nmagic",
"-C", "link-arg=-Tlink.x",
"-C", "link-arg=-Tdefmt.x",
# Code-size optimizations.
"-Z", "trap-unreachable=no",
"-C", "inline-threshold=5",
"-C", "no-vectorize-loops",
]
[build] [build]
target = "thumbv7em-none-eabihf" target = "thumbv7em-none-eabihf"

View file

@ -35,5 +35,9 @@ fn main() -> Result<(), Error> {
// Tell Cargo where to find the file. // Tell Cargo where to find the file.
println!("cargo:rustc-link-search={}", out_dir.display()); println!("cargo:rustc-link-search={}", out_dir.display());
println!("cargo:rustc-link-arg-bins=--nmagic");
println!("cargo:rustc-link-arg-bins=-Tlink.x");
println!("cargo:rustc-link-arg-bins=-Tdefmt.x");
Ok(()) Ok(())
} }

View file

@ -2,17 +2,5 @@
# replace STM32G071C8Rx with your chip as listed in `probe-run --list-chips` # replace STM32G071C8Rx with your chip as listed in `probe-run --list-chips`
runner = "probe-run --chip STM32G071RBTx" runner = "probe-run --chip STM32G071RBTx"
rustflags = [
# LLD (shipped with the Rust toolchain) is used as the default linker
"-C", "link-arg=--nmagic",
"-C", "link-arg=-Tlink.x",
"-C", "link-arg=-Tdefmt.x",
# Code-size optimizations.
"-Z", "trap-unreachable=no",
"-C", "inline-threshold=5",
"-C", "no-vectorize-loops",
]
[build] [build]
target = "thumbv6m-none-eabi" target = "thumbv6m-none-eabi"

View file

@ -28,4 +28,8 @@ fn main() {
// here, we ensure the build script is only re-run when // here, we ensure the build script is only re-run when
// `memory.x` is changed. // `memory.x` is changed.
println!("cargo:rerun-if-changed=memory.x"); println!("cargo:rerun-if-changed=memory.x");
println!("cargo:rustc-link-arg-bins=--nmagic");
println!("cargo:rustc-link-arg-bins=-Tlink.x");
println!("cargo:rustc-link-arg-bins=-Tdefmt.x");
} }

View file

@ -1,10 +1,5 @@
[target.thumbv7em-none-eabihf] [target.thumbv7em-none-eabihf]
runner = 'probe-run --chip STM32H743ZITx' runner = 'probe-run --chip STM32H743ZITx'
rustflags = [
# LLD (shipped with the Rust toolchain) is used as the default linker
"-C", "link-arg=-Tlink.x",
"-C", "link-arg=-Tdefmt.x",
]
[build] [build]
target = "thumbv7em-none-eabihf" # Cortex-M4F and Cortex-M7F (with FPU) target = "thumbv7em-none-eabihf" # Cortex-M4F and Cortex-M7F (with FPU)

View file

@ -0,0 +1,5 @@
fn main() {
println!("cargo:rustc-link-arg-bins=--nmagic");
println!("cargo:rustc-link-arg-bins=-Tlink.x");
println!("cargo:rustc-link-arg-bins=-Tdefmt.x");
}

View file

@ -2,17 +2,5 @@
# replace your chip as listed in `probe-run --list-chips` # replace your chip as listed in `probe-run --list-chips`
runner = "probe-run --chip STM32L072CZ" runner = "probe-run --chip STM32L072CZ"
rustflags = [
# LLD (shipped with the Rust toolchain) is used as the default linker
"-C", "link-arg=--nmagic",
"-C", "link-arg=-Tlink.x",
"-C", "link-arg=-Tdefmt.x",
# Code-size optimizations.
"-Z", "trap-unreachable=no",
"-C", "inline-threshold=5",
"-C", "no-vectorize-loops",
]
[build] [build]
target = "thumbv6m-none-eabi" target = "thumbv6m-none-eabi"

View file

@ -28,4 +28,8 @@ fn main() {
// here, we ensure the build script is only re-run when // here, we ensure the build script is only re-run when
// `memory.x` is changed. // `memory.x` is changed.
println!("cargo:rerun-if-changed=memory.x"); println!("cargo:rerun-if-changed=memory.x");
println!("cargo:rustc-link-arg-bins=--nmagic");
println!("cargo:rustc-link-arg-bins=-Tlink.x");
println!("cargo:rustc-link-arg-bins=-Tdefmt.x");
} }

View file

@ -2,17 +2,5 @@
# replace your chip as listed in `probe-run --list-chips` # replace your chip as listed in `probe-run --list-chips`
runner = "probe-run --chip STM32L151CBxxA" runner = "probe-run --chip STM32L151CBxxA"
rustflags = [
# LLD (shipped with the Rust toolchain) is used as the default linker
"-C", "link-arg=--nmagic",
"-C", "link-arg=-Tlink.x",
"-C", "link-arg=-Tdefmt.x",
# Code-size optimizations.
"-Z", "trap-unreachable=no",
"-C", "inline-threshold=5",
"-C", "no-vectorize-loops",
]
[build] [build]
target = "thumbv7m-none-eabi" target = "thumbv7m-none-eabi"

View file

@ -28,4 +28,8 @@ fn main() {
// here, we ensure the build script is only re-run when // here, we ensure the build script is only re-run when
// `memory.x` is changed. // `memory.x` is changed.
println!("cargo:rerun-if-changed=memory.x"); println!("cargo:rerun-if-changed=memory.x");
println!("cargo:rustc-link-arg-bins=--nmagic");
println!("cargo:rustc-link-arg-bins=-Tlink.x");
println!("cargo:rustc-link-arg-bins=-Tdefmt.x");
} }

View file

@ -4,17 +4,5 @@
#runner = "probe-run --chip STM32L475VG" #runner = "probe-run --chip STM32L475VG"
runner = "probe-run --chip STM32L4S5VI" runner = "probe-run --chip STM32L4S5VI"
rustflags = [
# LLD (shipped with the Rust toolchain) is used as the default linker
"-C", "link-arg=--nmagic",
"-C", "link-arg=-Tlink.x",
"-C", "link-arg=-Tdefmt.x",
# Code-size optimizations.
"-Z", "trap-unreachable=no",
"-C", "inline-threshold=5",
"-C", "no-vectorize-loops",
]
[build] [build]
target = "thumbv7em-none-eabi" target = "thumbv7em-none-eabi"

View file

@ -28,4 +28,8 @@ fn main() {
// here, we ensure the build script is only re-run when // here, we ensure the build script is only re-run when
// `memory.x` is changed. // `memory.x` is changed.
println!("cargo:rerun-if-changed=memory.x"); println!("cargo:rerun-if-changed=memory.x");
println!("cargo:rustc-link-arg-bins=--nmagic");
println!("cargo:rustc-link-arg-bins=-Tlink.x");
println!("cargo:rustc-link-arg-bins=-Tdefmt.x");
} }

View file

@ -2,17 +2,5 @@
# replace STM32F429ZITx with your chip as listed in `probe-run --list-chips` # replace STM32F429ZITx with your chip as listed in `probe-run --list-chips`
runner = "probe-run --chip STM32U585AIIx" runner = "probe-run --chip STM32U585AIIx"
rustflags = [
# LLD (shipped with the Rust toolchain) is used as the default linker
"-C", "link-arg=--nmagic",
"-C", "link-arg=-Tlink.x",
"-C", "link-arg=-Tdefmt.x",
# Code-size optimizations.
"-Z", "trap-unreachable=no",
"-C", "inline-threshold=5",
"-C", "no-vectorize-loops",
]
[build] [build]
target = "thumbv7em-none-eabi" target = "thumbv7em-none-eabi"

View file

@ -0,0 +1,5 @@
fn main() {
println!("cargo:rustc-link-arg-bins=--nmagic");
println!("cargo:rustc-link-arg-bins=-Tlink.x");
println!("cargo:rustc-link-arg-bins=-Tdefmt.x");
}

View file

@ -2,17 +2,5 @@
# replace STM32WB55CCUx with your chip as listed in `probe-run --list-chips` # replace STM32WB55CCUx with your chip as listed in `probe-run --list-chips`
runner = "probe-run --chip STM32WB55CCUx --speed 1000 --connect-under-reset" runner = "probe-run --chip STM32WB55CCUx --speed 1000 --connect-under-reset"
rustflags = [
# LLD (shipped with the Rust toolchain) is used as the default linker
"-C", "link-arg=--nmagic",
"-C", "link-arg=-Tlink.x",
"-C", "link-arg=-Tdefmt.x",
# Code-size optimizations.
"-Z", "trap-unreachable=no",
"-C", "inline-threshold=5",
"-C", "no-vectorize-loops",
]
[build] [build]
target = "thumbv7em-none-eabihf" target = "thumbv7em-none-eabihf"

View file

@ -28,4 +28,8 @@ fn main() {
// here, we ensure the build script is only re-run when // here, we ensure the build script is only re-run when
// `memory.x` is changed. // `memory.x` is changed.
println!("cargo:rerun-if-changed=memory.x"); println!("cargo:rerun-if-changed=memory.x");
println!("cargo:rustc-link-arg-bins=--nmagic");
println!("cargo:rustc-link-arg-bins=-Tlink.x");
println!("cargo:rustc-link-arg-bins=-Tdefmt.x");
} }

View file

@ -1,21 +1,6 @@
[unstable]
build-std = ["core"]
[target.'cfg(all(target_arch = "arm", target_os = "none"))'] [target.'cfg(all(target_arch = "arm", target_os = "none"))']
# replace your chip as listed in `probe-run --list-chips` # replace your chip as listed in `probe-run --list-chips`
runner = "probe-run --chip STM32WLE5JCIx" runner = "probe-run --chip STM32WLE5JCIx"
rustflags = [
# LLD (shipped with the Rust toolchain) is used as the default linker
"-C", "link-arg=--nmagic",
"-C", "link-arg=-Tlink.x",
"-C", "link-arg=-Tdefmt.x",
# Code-size optimizations.
"-Z", "trap-unreachable=no",
"-C", "inline-threshold=5",
"-C", "no-vectorize-loops",
]
[build] [build]
target = "thumbv7em-none-eabihf" target = "thumbv7em-none-eabihf"

View file

@ -0,0 +1,5 @@
fn main() {
println!("cargo:rustc-link-arg-bins=--nmagic");
println!("cargo:rustc-link-arg-bins=-Tlink.x");
println!("cargo:rustc-link-arg-bins=-Tdefmt.x");
}

View file

@ -1,5 +0,0 @@
MEMORY
{
FLASH : ORIGIN = 0x08000000, LENGTH = 256K
RAM : ORIGIN = 0x20000000, LENGTH = 64K
}