aboutsummaryrefslogtreecommitdiff
path: root/xtask/src
diff options
context:
space:
mode:
authorGravatar bors[bot] <26634292+bors[bot]@users.noreply.github.com> 2021-11-25 00:55:07 +0000
committerGravatar GitHub <noreply@github.com> 2021-11-25 00:55:07 +0000
commita78c497b7d1eb68335eb664e7dfbaf8a8fd879dd (patch)
treef8f3c093ada6b19ddca60c009b9a3ac80cea6100 /xtask/src
parent6b013138b734b9bbeb24a345f75d2bcc1c69fa8d (diff)
parent74e9bbe6811deb4888bf0c20157506ab06e4f957 (diff)
downloadcortex-m-a78c497b7d1eb68335eb664e7dfbaf8a8fd879dd.tar.gz
cortex-m-a78c497b7d1eb68335eb664e7dfbaf8a8fd879dd.tar.zst
cortex-m-a78c497b7d1eb68335eb664e7dfbaf8a8fd879dd.zip
Merge #363
363: scb: derive serde, Hash, PartialOrd for VectActive behind gates r=thalesfragoso a=tmplt Exposes two new feature gates for VectActive serde::{Serialize, Deserialize} (via "serde") and Hash, PartialOrd (via "std-map") for use on host-side ITM tracing programs. While the struct itself is not received directly over ITM, its use greatly simplifies the implementation by allowing VectActive as keys in map collections and file/socket {,de}serialization to forward the structure elsewhere. These features are not enabled by default. Before this patch, serde functionality could be realized via [0], but this does not propagate down a dependency chain (i.e. if realized for crate B, which crate A depends on, serde functionality is not exposed in crate A unless VectActive is wrapped in a type from crate B). I am not aware of any method to realize PartialOrd, Hash derivation for a downstream crate. [0] https://serde.rs/remote-derive.html Co-authored-by: Viktor Sonesten <v@tmplt.dev>
Diffstat (limited to 'xtask/src')
-rw-r--r--xtask/src/lib.rs21
-rw-r--r--xtask/src/main.rs8
2 files changed, 26 insertions, 3 deletions
diff --git a/xtask/src/lib.rs b/xtask/src/lib.rs
index a7b85e7..c3d8356 100644
--- a/xtask/src/lib.rs
+++ b/xtask/src/lib.rs
@@ -208,3 +208,24 @@ pub fn check_blobs() {
println!("Blobs identical.");
}
+
+// Check that serde and PartialOrd works with VectActive
+pub fn check_host_side() {
+ use cortex_m::peripheral::scb::VectActive;
+
+ // check serde
+ {
+ let v = VectActive::from(22).unwrap();
+ let json = serde_json::to_string(&v).expect("Failed to serialize VectActive");
+ let deser_v: VectActive =
+ serde_json::from_str(&json).expect("Failed to deserialize VectActive");
+ assert_eq!(deser_v, v);
+ }
+
+ // check PartialOrd
+ {
+ let a = VectActive::from(19).unwrap();
+ let b = VectActive::from(20).unwrap();
+ assert_eq!(a < b, true);
+ }
+}
diff --git a/xtask/src/main.rs b/xtask/src/main.rs
index ec55bf8..3e4b394 100644
--- a/xtask/src/main.rs
+++ b/xtask/src/main.rs
@@ -1,17 +1,19 @@
use std::{env, process};
-use xtask::{assemble_blobs, check_blobs};
+use xtask::{assemble_blobs, check_blobs, check_host_side};
fn main() {
let subcommand = env::args().skip(1).next();
match subcommand.as_ref().map(|s| &**s) {
Some("assemble") => assemble_blobs(),
Some("check-blobs") => check_blobs(),
+ Some("check-host-side") => check_host_side(),
_ => {
eprintln!("usage: cargo xtask <subcommand>");
eprintln!();
eprintln!("subcommands:");
- eprintln!(" assemble Reassemble the pre-built artifacts");
- eprintln!(" check-blobs Check that the pre-built artifacts are up-to-date and reproducible");
+ eprintln!(" assemble Reassemble the pre-built artifacts");
+ eprintln!(" check-blobs Check that the pre-built artifacts are up-to-date and reproducible");
+ eprintln!(" check-host-side Build the crate in a non-Cortex-M host application and check host side usage of certain types");
process::exit(1);
}
}