From 4f509b4ad6e9512c2cd0905476426556bf8ba2fa Mon Sep 17 00:00:00 2001 From: James Pace Date: Sat, 4 Jul 2026 09:43:44 -0400 Subject: [PATCH] Init commit --- CMakeLists.txt | 37 ++++ j7s_diagnostics_cxx/Cargo.lock | 387 +++++++++++++++++++++++++++++++++ j7s_diagnostics_cxx/Cargo.toml | 13 ++ j7s_diagnostics_cxx/build.rs | 5 + j7s_diagnostics_cxx/src/lib.rs | 35 +++ package.xml | 15 ++ src/test.cpp | 13 ++ 7 files changed, 505 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 j7s_diagnostics_cxx/Cargo.lock create mode 100644 j7s_diagnostics_cxx/Cargo.toml create mode 100644 j7s_diagnostics_cxx/build.rs create mode 100644 j7s_diagnostics_cxx/src/lib.rs create mode 100644 package.xml create mode 100644 src/test.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..5d7694a --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,37 @@ +cmake_minimum_required(VERSION 3.22) +project(j7s_diagnostics_ros CXX) + +find_package(ament_cmake REQUIRED) +find_package(rclcpp REQUIRED) +include(FetchContent) + +FetchContent_Declare( + Corrosion + GIT_REPOSITORY https://github.com/corrosion-rs/corrosion.git + GIT_TAG master +) +FetchContent_MakeAvailable(Corrosion) + +set(CMAKE_CXX_STANDARD 20) + +corrosion_import_crate(MANIFEST_PATH j7s_diagnostics_cxx/Cargo.toml) +corrosion_add_cxxbridge(j7s_diagnostics_cxx_bridge + CRATE j7s_diagnostics_cxx + FILES lib.rs) + +add_executable(test_bin src/test.cpp) +target_link_libraries(test_bin PRIVATE j7s_diagnostics_cxx_bridge) + +corrosion_install(TARGETS j7s_diagnostics_cxx + EXPORT export_${PROJECT_NAME} + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin +) + +install(TARGETS + test_bin + DESTINATION lib/${PROJECT_NAME}) + +ament_export_targets(export_${PROJECT_NAME}) +ament_package() diff --git a/j7s_diagnostics_cxx/Cargo.lock b/j7s_diagnostics_cxx/Cargo.lock new file mode 100644 index 0000000..ff5fac4 --- /dev/null +++ b/j7s_diagnostics_cxx/Cargo.lock @@ -0,0 +1,387 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "anstyle" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" + +[[package]] +name = "cc" +version = "1.2.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e228eec9be7c17ccb640b59b36a5cd805ea2a564a4c5e162c2f659fea30d3b96" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "clap" +version = "4.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +dependencies = [ + "clap_builder", +] + +[[package]] +name = "clap_builder" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +dependencies = [ + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_lex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" + +[[package]] +name = "codespan-reporting" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af491d569909a7e4dee0ad7db7f5341fef5c614d5b8ec8cf765732aba3cff681" +dependencies = [ + "serde", + "termcolor", + "unicode-width", +] + +[[package]] +name = "cxx" +version = "1.0.194" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "747d8437319e3a2f43d93b341c137927ca70c0f5dabeea7a005a73665e247c7e" +dependencies = [ + "cc", + "cxx-build", + "cxxbridge-cmd", + "cxxbridge-flags", + "cxxbridge-macro", + "foldhash", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.194" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0f4697d190a142477b16aef7da8a99bfdc41e7e8b1687583c0d23a79c7afc1e" +dependencies = [ + "cc", + "codespan-reporting", + "indexmap", + "proc-macro2", + "quote", + "scratch", + "syn", +] + +[[package]] +name = "cxxbridge-cmd" +version = "1.0.194" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0956799fa8678d4c50eed028f2de1c0552ae183c76e976cf7ca8c4e36a7c328" +dependencies = [ + "clap", + "codespan-reporting", + "indexmap", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.194" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23384a836ab4f0ad98ace7e3955ad2de39de42378ab487dc28d3990392cb283a" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.194" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6acc6b5822b9526adfb4fc377b67128fdd60aac757cc4a741a6278603f763cf" +dependencies = [ + "indexmap", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + +[[package]] +name = "indexmap" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "j7s_diagnostics_cxx" +version = "0.1.0" +dependencies = [ + "cxx", + "cxx-build", +] + +[[package]] +name = "link-cplusplus" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f78c730aaa7d0b9336a299029ea49f9ee53b0ed06e9202e8cb7db9bae7b8c82" +dependencies = [ + "cc", +] + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "scratch" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d68f2ec51b097e4c1a75b681a8bec621909b5e91f15bb7b840c4f2f7b01148b2" + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "syn" +version = "2.0.118" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-width" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[patch.unused]] +name = "action_msgs" +version = "2.4.5" + +[[patch.unused]] +name = "builtin_interfaces" +version = "2.4.5" + +[[patch.unused]] +name = "composition_interfaces" +version = "2.4.5" + +[[patch.unused]] +name = "diagnostic_msgs" +version = "5.9.2" + +[[patch.unused]] +name = "geometry_msgs" +version = "5.9.2" + +[[patch.unused]] +name = "lifecycle_msgs" +version = "2.4.5" + +[[patch.unused]] +name = "limbo_graph" +version = "0.1.0" + +[[patch.unused]] +name = "nav_msgs" +version = "5.9.2" + +[[patch.unused]] +name = "rcl_interfaces" +version = "2.4.5" + +[[patch.unused]] +name = "rmw_dds_common" +version = "6.0.0" + +[[patch.unused]] +name = "rosbag2_interfaces" +version = "0.33.3" + +[[patch.unused]] +name = "rosgraph_msgs" +version = "2.4.5" + +[[patch.unused]] +name = "sensor_msgs" +version = "5.9.2" + +[[patch.unused]] +name = "service_msgs" +version = "2.4.5" + +[[patch.unused]] +name = "shape_msgs" +version = "5.9.2" + +[[patch.unused]] +name = "statistics_msgs" +version = "2.4.5" + +[[patch.unused]] +name = "std_msgs" +version = "5.9.2" + +[[patch.unused]] +name = "std_srvs" +version = "5.9.2" + +[[patch.unused]] +name = "stereo_msgs" +version = "5.9.2" + +[[patch.unused]] +name = "tf2_msgs" +version = "0.45.7" + +[[patch.unused]] +name = "trajectory_msgs" +version = "5.9.2" + +[[patch.unused]] +name = "type_description_interfaces" +version = "2.4.5" + +[[patch.unused]] +name = "unique_identifier_msgs" +version = "2.8.1" + +[[patch.unused]] +name = "visualization_msgs" +version = "5.9.2" diff --git a/j7s_diagnostics_cxx/Cargo.toml b/j7s_diagnostics_cxx/Cargo.toml new file mode 100644 index 0000000..d76cbc4 --- /dev/null +++ b/j7s_diagnostics_cxx/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "j7s_diagnostics_cxx" +version = "0.1.0" +edition = "2024" + +[lib] +crate-type = ["cdylib"] + +[dependencies] +cxx = "1.0" + +[build-dependencies] +cxx-build = "1.0" \ No newline at end of file diff --git a/j7s_diagnostics_cxx/build.rs b/j7s_diagnostics_cxx/build.rs new file mode 100644 index 0000000..35e6212 --- /dev/null +++ b/j7s_diagnostics_cxx/build.rs @@ -0,0 +1,5 @@ +#[allow(unused_must_use)] +fn main() { + cxx_build::bridge("src/lib.rs"); + println!("cargo:rerun-if-changed=src/lib.rs"); +} diff --git a/j7s_diagnostics_cxx/src/lib.rs b/j7s_diagnostics_cxx/src/lib.rs new file mode 100644 index 0000000..52b5eb2 --- /dev/null +++ b/j7s_diagnostics_cxx/src/lib.rs @@ -0,0 +1,35 @@ +#![allow(non_snake_case)] + +#[cxx::bridge] +mod ffi { + extern "Rust" { + fn add(a: &f64, b: &f64) -> f64; + + type MyStruct; + fn MyStruct_build(a: f64, b: f64) -> Box; + fn sum(self: &MyStruct) -> f64; + } +} + +pub struct MyStruct { + a: f64, + b: f64 +} + +impl MyStruct { + pub fn new(a: f64, b: f64) -> Self { + MyStruct {a: a, b: b} + } + + pub fn sum(&self) -> f64 { + self.a + self.b + } +} + +fn MyStruct_build(a: f64, b: f64) -> Box { + Box::new(MyStruct::new(a, b)) +} + +pub fn add(a: &f64, b: &f64) -> f64 { + a + b +} diff --git a/package.xml b/package.xml new file mode 100644 index 0000000..a2b26cd --- /dev/null +++ b/package.xml @@ -0,0 +1,15 @@ + + + + j7s_diagnostics_ros + 0.0.0 + TODO: Package description + jimmy + TODO: License declaration + + ament_cmake + + + ament_cmake + + diff --git a/src/test.cpp b/src/test.cpp new file mode 100644 index 0000000..5d9bc55 --- /dev/null +++ b/src/test.cpp @@ -0,0 +1,13 @@ +#include "j7s_diagnostics_cxx_bridge/lib.h" + +#include + +int main(int argc, char *argv[]) +{ + double result = add(1.0, 2.0); + std::cout << result << std::endl; + + const auto my_struct = MyStruct_build(3.0, 4.0); + std::cout << my_struct->sum() << std::endl; + return 0; +}