| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import os
- from building import *
- cwd = GetCurrentDir()
- sys.path.append(os.path.join(cwd, '../tools'))
- from build_support import (
- detect_rust_target,
- make_rustflags,
- collect_features,
- verify_rust_toolchain,
- ensure_rust_target_installed,
- cargo_build_staticlib,
- clean_rust_build,
- )
- def _has(sym: str) -> bool:
- try:
- return bool(GetDepend([sym]))
- except Exception:
- return bool(GetDepend(sym))
- # Source files – MSH command glue
- src = ['rust_cmd.c']
- LIBS = []
- LIBPATH = []
- if GetOption('clean'):
- # Register Rust artifacts for cleaning
- rust_build_dir = clean_rust_build(Dir('#').abspath)
- if os.path.exists(rust_build_dir):
- print(f'Registering {rust_build_dir} for cleanup')
- Clean('.', rust_build_dir)
- else:
- print('No rust build artifacts to clean')
- else:
- if verify_rust_toolchain():
- import rtconfig
- target = detect_rust_target(_has, rtconfig)
- if not target:
- print('Error: Unable to detect Rust target; please check configuration')
- else:
- print(f'Detected Rust target: {target}')
- # Optional hint if target missing
- ensure_rust_target_installed(target)
- # Build mode and features
- debug = bool(_has('RUST_DEBUG_BUILD'))
- features = collect_features(_has)
- rustflags = make_rustflags(rtconfig, target)
- rust_lib = cargo_build_staticlib(
- rust_dir=cwd, target=target, features=features, debug=debug, rustflags=rustflags
- )
- if rust_lib:
- LIBS = ['rt_rust']
- LIBPATH = [os.path.dirname(rust_lib)]
- print('Rust library linked successfully')
- else:
- print('Warning: Failed to build Rust library')
- else:
- print('Warning: Rust toolchain not found')
- print('Please install Rust from https://rustup.rs')
- # Define component group for SCons
- group = DefineGroup('rust', src, depend=['RT_USING_RUST'], LIBS=LIBS, LIBPATH=LIBPATH)
- Return('group')
|