summaryrefslogtreecommitdiff
path: root/components/rust/examples/modules
diff options
context:
space:
mode:
Diffstat (limited to 'components/rust/examples/modules')
-rw-r--r--components/rust/examples/modules/SConscript37
-rw-r--r--components/rust/examples/modules/example_lib/Cargo.toml2
-rw-r--r--components/rust/examples/modules/example_lib/src/lib.rs4
3 files changed, 33 insertions, 10 deletions
diff --git a/components/rust/examples/modules/SConscript b/components/rust/examples/modules/SConscript
index 98e57d1fd9..056501c057 100644
--- a/components/rust/examples/modules/SConscript
+++ b/components/rust/examples/modules/SConscript
@@ -32,6 +32,20 @@ def _has(sym: str) -> bool:
except Exception:
return bool(GetDepend(sym))
+
+MODULE_CONFIG_MAP = {
+ 'example_lib': 'RT_RUST_MODULE_SIMPLE_MODULE',
+}
+
+
+def should_build_module(module_dir: str) -> bool:
+ if _has('RT_RUST_BUILD_ALL_EXAMPLES'):
+ return True
+
+ config = MODULE_CONFIG_MAP.get(os.path.basename(module_dir))
+ return bool(config and _has(config))
+
+
def detect_target_for_dynamic_modules():
"""
Detect the appropriate Rust target for dynamic modules.
@@ -68,7 +82,7 @@ def build_rust_module(module_dir, build_root):
cargo_config = toml.load(f)
module_name = cargo_config['package']['name']
-
+
# Detect target automatically based on the current configuration
target = detect_target_for_dynamic_modules()
print(f"Building Rust module '{module_name}' for target: {target}")
@@ -121,7 +135,12 @@ def build_rust_module(module_dir, build_root):
return [], [], ""
# Check dependencies
-if not _has('RT_RUST_BUILD_MODULES'):
+if not _has('RT_USING_MODULE') and not GetOption('clean'):
+ Return([])
+
+if not (
+ _has('RT_RUST_BUILD_MODULES') or _has('RT_RUST_BUILD_ALL_EXAMPLES')
+) and not GetOption('clean'):
Return([])
build_root = os.path.join(Dir('#').abspath, "build", "rust_modules")
@@ -142,7 +161,11 @@ else:
modules_built = []
for item in os.listdir(cwd):
item_path = os.path.join(cwd, item)
- if os.path.isdir(item_path) and os.path.exists(os.path.join(item_path, 'Cargo.toml')):
+ if (
+ os.path.isdir(item_path)
+ and os.path.exists(os.path.join(item_path, 'Cargo.toml'))
+ and should_build_module(item_path)
+ ):
result = build_rust_module(item_path, build_root)
if result[0]:
modules_built.extend(result[0])
@@ -151,9 +174,9 @@ else:
print(f"Successfully built {len(modules_built)} Rust dynamic module(s): {', '.join(modules_built)}")
group = DefineGroup(
- 'rust_modules',
- [],
- depend=['RT_RUST_BUILD_MODULES']
+ 'rust_modules',
+ [],
+ depend=['RT_USING_RUST']
)
-Return('group') \ No newline at end of file
+Return('group')
diff --git a/components/rust/examples/modules/example_lib/Cargo.toml b/components/rust/examples/modules/example_lib/Cargo.toml
index e44aae2848..6a490acad8 100644
--- a/components/rust/examples/modules/example_lib/Cargo.toml
+++ b/components/rust/examples/modules/example_lib/Cargo.toml
@@ -9,4 +9,4 @@ edition = "2024"
crate-type = ["cdylib"]
[dependencies]
-rt-rust = { path = "../../.." } \ No newline at end of file
+rt-rust = { path = "../../../core" } \ No newline at end of file
diff --git a/components/rust/examples/modules/example_lib/src/lib.rs b/components/rust/examples/modules/example_lib/src/lib.rs
index 79fe384e6a..8b86c593cd 100644
--- a/components/rust/examples/modules/example_lib/src/lib.rs
+++ b/components/rust/examples/modules/example_lib/src/lib.rs
@@ -11,7 +11,7 @@
/* Bring rt-rust's println! macro into scope */
use rt_rust::println;
use core::ffi::{c_char, CStr};
-#[no_mangle]
+#[unsafe(no_mangle)]
pub extern "C" fn rust_mylib_println(s: *const c_char) {
if s.is_null() {
println!("");
@@ -24,7 +24,7 @@ pub extern "C" fn rust_mylib_println(s: *const c_char) {
}
}
-#[no_mangle]
+#[unsafe(no_mangle)]
pub extern "C" fn rust_mylib_add(a: usize, b: usize) -> usize {
a + b
}