summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rust/Cargo.toml7
-rw-r--r--src/rust/build.rs19
-rw-r--r--src/rust/src/main.rs26
-rw-r--r--src/rust/wrapper.h3
4 files changed, 55 insertions, 0 deletions
diff --git a/src/rust/Cargo.toml b/src/rust/Cargo.toml
new file mode 100644
index 00000000..e45d616f
--- /dev/null
+++ b/src/rust/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "rust"
+version = "0.1.0"
+edition = "2021"
+
+[build-dependencies]
+bindgen = "*" \ No newline at end of file
diff --git a/src/rust/build.rs b/src/rust/build.rs
new file mode 100644
index 00000000..8bc6fb16
--- /dev/null
+++ b/src/rust/build.rs
@@ -0,0 +1,19 @@
+extern crate bindgen;
+
+use std::env;
+use std::path::PathBuf;
+
+fn main() {
+ println!("cargo:rustc-link-lib=libcamera_c");
+ println!("cargo::rustc-link-search=/home/jmondi/project/libcamera/worktrees/c-abi/build/src/libcamera_c/");
+
+ let bindings = bindgen::Builder::default()
+ .header("wrapper.h")
+ .generate()
+ .expect("Unable to generate bindings");
+
+ let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
+ bindings
+ .write_to_file(out_path.join("bindings.rs"))
+ .expect("Couldn't write bindings!");
+} \ No newline at end of file
diff --git a/src/rust/src/main.rs b/src/rust/src/main.rs
new file mode 100644
index 00000000..eae33f97
--- /dev/null
+++ b/src/rust/src/main.rs
@@ -0,0 +1,26 @@
+#![allow(non_upper_case_globals)]
+#![allow(non_camel_case_types)]
+#![allow(non_snake_case)]
+
+include!(concat!(env!("OUT_DIR"),"/bindings.rs"));
+
+fn manager_create() -> *mut camera_manager {
+ unsafe {
+ camera_manager_create()
+ }
+}
+
+fn manager_start(mngr: *mut camera_manager) {
+ unsafe { camera_manager_start(mngr); }
+}
+
+fn manager_stop(mngr: *mut camera_manager) {
+ unsafe { camera_manager_stop(mngr); }
+}
+
+fn main() {
+ println!("Hello, world!");
+ let manager = manager_create();
+ manager_start(manager);
+ manager_stop(manager);
+}
diff --git a/src/rust/wrapper.h b/src/rust/wrapper.h
new file mode 100644
index 00000000..1747542b
--- /dev/null
+++ b/src/rust/wrapper.h
@@ -0,0 +1,3 @@
+#include "../../include/libcamera_c/camera_manager_c.h"
+#include "../../include/libcamera_c/camera_c.h"
+#include "../../include/libcamera_c/request_c.h"