From fb0f2da3c4f96b2c589952ca016195baf106108c Mon Sep 17 00:00:00 2001 From: Federico Lolli <federico.lolli@skywarder.eu> Date: Sun, 5 May 2024 16:18:19 +0000 Subject: [PATCH] [Rust] Add Rust integration --- .gitignore | 6 +++++- README.md | 6 ++---- mavlink_rust/Cargo.toml | 32 ++++++++++++++++++++++++++++++++ mavlink_rust/build.rs | 13 +++++++++++++ mavlink_rust/src/lib.rs | 6 ++++++ 5 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 mavlink_rust/Cargo.toml create mode 100644 mavlink_rust/build.rs create mode 100644 mavlink_rust/src/lib.rs diff --git a/.gitignore b/.gitignore index 45f7d57..1b68824 100644 --- a/.gitignore +++ b/.gitignore @@ -33,4 +33,8 @@ # ide folder & virtual environments .venv/ -.vscode \ No newline at end of file +.vscode + +# rust specific +target +Cargo.lock diff --git a/README.md b/README.md index 622286b..4ba347a 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,7 @@ # mavlink_skyward_lib + Repo containing Skyward's implementation of the Mavlink protocol: * `message_definitions` - XML files describing the available messages - * `mavlink_lib ` - corresponding C header files, generated with `pymavlink` - - - +* `mavlink_rust` - Rust library of the Mavlink protocol diff --git a/mavlink_rust/Cargo.toml b/mavlink_rust/Cargo.toml new file mode 100644 index 0000000..7533590 --- /dev/null +++ b/mavlink_rust/Cargo.toml @@ -0,0 +1,32 @@ +[package] +name = "skyward_mavlink" +version = "0.1.0" +authors = ["Federico Lolli <federico.lolli@skywarder.eu>"] +edition = "2021" +license = "MIT" + +[dependencies] +num-traits = { version = "0.2.18", default-features = false } +num-derive = "0.4.2" +bitflags = "2.4.2" +serde = { version = "1.0.197", optional = true } +serde_arrays = { version = "0.1.0", optional = true } + +[dependencies.mavlink-core] +git = "https://github.com/mavlink/rust-mavlink.git" +rev = "8d61f75ac4a5bf04cd9401d9073244118117db5f" + +[build-dependencies.mavlink-bindgen] +git = "https://github.com/mavlink/rust-mavlink.git" +rev = "8d61f75ac4a5bf04cd9401d9073244118117db5f" + +[features] +default = ["lyra"] +lyra = [] +gemini = [] +pyxis = [] +lynx = [] +hermes = [] +r2a = [] +test = [] +serde = ["dep:serde", "dep:serde_arrays"] diff --git a/mavlink_rust/build.rs b/mavlink_rust/build.rs new file mode 100644 index 0000000..7090f51 --- /dev/null +++ b/mavlink_rust/build.rs @@ -0,0 +1,13 @@ +#![recursion_limit = "256"] + +use std::env; + +pub fn main() { + let out_path = env::var("OUT_DIR").unwrap(); + + let result = mavlink_bindgen::generate("../message_definitions", out_path) + .expect("Failed to generate Rust MAVLink bindings"); + + mavlink_bindgen::format_generated_code(&result); + mavlink_bindgen::emit_cargo_build_messages(&result); +} diff --git a/mavlink_rust/src/lib.rs b/mavlink_rust/src/lib.rs new file mode 100644 index 0000000..7269b9a --- /dev/null +++ b/mavlink_rust/src/lib.rs @@ -0,0 +1,6 @@ +mod bindings { + include!(concat!(env!("OUT_DIR"), "/mod.rs")); +} + +pub use bindings::*; +pub use mavlink_core as mavlink; -- GitLab