mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-10-13 06:55:31 +08:00
Improve the Rust build integration across core, applications, components, and module examples. Fix build failure propagation, target and feature handling, linker flags, example configuration semantics, and add STM32 CI attach coverage.
75 lines
1.9 KiB
Python
75 lines
1.9 KiB
Python
import os
|
|
import sys
|
|
from building import *
|
|
|
|
cwd = GetCurrentDir()
|
|
|
|
# Import usrapp build module and build support
|
|
sys.path.append(os.path.join(cwd, '../../tools'))
|
|
from build_usrapp import UserAppBuildError, build_example_usrapp
|
|
from build_support import clean_rust_build
|
|
|
|
|
|
def _has(sym: str) -> bool:
|
|
try:
|
|
return bool(GetDepend([sym]))
|
|
except Exception:
|
|
return bool(GetDepend(sym))
|
|
|
|
|
|
def load_extended_feature_configs():
|
|
"""
|
|
Load extended feature configurations if available.
|
|
This allows users to add custom configuration mappings.
|
|
"""
|
|
try:
|
|
from feature_config_examples import setup_all_example_features
|
|
setup_all_example_features()
|
|
print("Extended feature configurations loaded successfully.")
|
|
except ImportError:
|
|
print("Using default feature configurations.")
|
|
|
|
group = []
|
|
|
|
if not (_has('RT_RUST_BUILD_APPLICATIONS') or _has('RT_RUST_BUILD_ALL_EXAMPLES')) and not GetOption('clean'):
|
|
Return('group')
|
|
|
|
# Load extended feature configurations
|
|
load_extended_feature_configs()
|
|
|
|
src = []
|
|
LIBS = []
|
|
LIBPATH = []
|
|
LINKFLAGS = ""
|
|
|
|
if GetOption('clean'):
|
|
app_build_dir = clean_rust_build(Dir('#').abspath, "example_usrapp")
|
|
if os.path.exists(app_build_dir):
|
|
print(f'Registering {app_build_dir} for cleanup')
|
|
Clean('.', app_build_dir)
|
|
else:
|
|
print('No example_usrapp build artifacts to clean')
|
|
else:
|
|
import rtconfig
|
|
try:
|
|
LIBS, LIBPATH, LINKFLAGS = build_example_usrapp(
|
|
cwd=cwd,
|
|
has_func=_has,
|
|
rtconfig=rtconfig,
|
|
build_root=os.path.join(Dir('#').abspath, "build", "example_usrapp")
|
|
)
|
|
except UserAppBuildError as e:
|
|
print(f'Error: {e}')
|
|
sys.exit(1)
|
|
|
|
group = DefineGroup(
|
|
'example_usrapp',
|
|
src,
|
|
depend=['RT_USING_RUST'],
|
|
LIBS=LIBS,
|
|
LIBPATH=LIBPATH,
|
|
LINKFLAGS=LINKFLAGS
|
|
)
|
|
|
|
Return('group')
|