diff options
Diffstat (limited to 'components/rust/examples/modules')
| -rw-r--r-- | components/rust/examples/modules/SConscript | 37 | ||||
| -rw-r--r-- | components/rust/examples/modules/example_lib/Cargo.toml | 2 | ||||
| -rw-r--r-- | components/rust/examples/modules/example_lib/src/lib.rs | 4 |
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 } |
