build(core): fix Rust library path in SConscript

[no changelog]
This commit is contained in:
Roman Zeyde
2026-01-13 15:23:42 +01:00
committed by Roman Zeyde
parent 6d8bab7a6d
commit 98ba19b081
8 changed files with 17 additions and 23 deletions

View File

@@ -278,6 +278,7 @@ obj_program += env.Object(source=SOURCE_MOD_CRYPTO, CCFLAGS='$CCFLAGS -ftrivial-
obj_program += env.Object(source=SOURCE_BOOTLOADER)
obj_program += env.Object(source=SOURCE_NANOPB)
obj_program += env.Object(source=SOURCE_HAL)
obj_program += [rust]
if 'boot_ucb' in FEATURES_AVAILABLE:
obj_program += env.Object(
@@ -299,7 +300,6 @@ program_elf = env.Command(
)
env.Depends(program_elf, linkerscript_gen)
env.Depends(program_elf, rust)
SUFFIX = '_qa' if BOOTLOADER_QA else ''

View File

@@ -266,6 +266,7 @@ obj_program += env.Object(source=SOURCE_MOD_CRYPTO, CCFLAGS='$CCFLAGS -ftrivial-
obj_program += env.Object(source=SOURCE_BOOTLOADER)
obj_program += env.Object(source=SOURCE_NANOPB)
obj_program += env.Object(source=SOURCE_UNIX)
obj_program += [rust]
program_elf = env.Command(
target='bootloader.elf',
@@ -273,7 +274,5 @@ program_elf = env.Command(
action=
'$CC -o $TARGET $SOURCES $_LIBDIRFLAGS $_LIBFLAGS $LINKFLAGS')
env.Depends(program_elf, rust)
if CMAKELISTS != 0:
env.Depends(program_elf, cmake_gen)

View File

@@ -904,6 +904,7 @@ rust = tools.add_rust_lib(
all_paths=ALLPATHS,
build_dir=str(Dir('.').abspath),
)
obj_program += [rust]
env.Depends(rust, protobuf_blobs)
@@ -997,7 +998,6 @@ env.Depends(program_elf, linkerscript_gen)
if CMAKELISTS != 0:
env.Depends(program_elf, cmake_gen)
env.Depends(program_elf, rust)
BINARY_NAME = f"build/firmware/firmware-{TREZOR_MODEL}"
if not EVERYTHING:

View File

@@ -444,6 +444,7 @@ rust = tools.add_rust_lib(
all_paths=ALLPATHS,
build_dir=str(Dir('.').abspath),
)
obj_program += [rust]
if "secmon_layout" in FEATURES_AVAILABLE:
@@ -460,7 +461,6 @@ program_elf = env.Command(
)
env.Depends(program_elf, linkerscript_gen)
env.Depends(program_elf, rust)
if CMAKELISTS != 0:
env.Depends(program_elf, cmake_gen)

View File

@@ -338,6 +338,7 @@ rust = tools.add_rust_lib(
all_paths=ALLPATHS,
build_dir=str(Dir('.').abspath),
)
obj_program += [rust]
if (vh := ARGUMENTS.get("VENDOR_HEADER", None)):
@@ -378,7 +379,6 @@ program_elf = env.Command(
)
env.Depends(program_elf, linkerscript_gen)
env.Depends(program_elf, rust)
BINARY_NAME = f"build/prodtest/prodtest-{TREZOR_MODEL}"
BINARY_NAME += "-" + tools.get_version('embed/projects/prodtest/version.h')

View File

@@ -302,6 +302,7 @@ obj_program += env.Object(source=SOURCE_MOD_CRYPTO, CCFLAGS='$CCFLAGS -ftrivial-
obj_program += env.Object(source=SOURCE_PRODTEST)
obj_program += env.Object(source=SOURCE_HAL)
obj_program += env.Object(source=SOURCE_MLDSA)
obj_program += [rust]
program_elf = env.Command(
target='prodtest.elf',
@@ -309,7 +310,5 @@ program_elf = env.Command(
action=
'$CC -o $TARGET $SOURCES $_LIBDIRFLAGS $_LIBFLAGS $LINKFLAGS')
env.Depends(program_elf, rust)
if CMAKELISTS != 0:
env.Depends(program_elf, cmake_gen)

View File

@@ -925,7 +925,7 @@ rust = tools.add_rust_lib(
all_paths=ALLPATHS,
build_dir=str(Dir('.').abspath),
)
obj_program += [rust]
env.Depends(rust, protobuf_blobs)
env.Depends(rust, TRANSLATION_DATA)
@@ -938,4 +938,3 @@ program = env.Command(
if CMAKELISTS != 0:
env.Depends(program, cmake_gen)
env.Depends(program, rust)

View File

@@ -151,21 +151,18 @@ def add_rust_lib(*, env, build, profile, features, all_paths, build_dir):
RUST_TARGET = env.get("ENV")["RUST_TARGET"]
# Determine the profile build flags.
if profile == "release":
profile = "--release"
is_debug = False
RUST_LIBDIR = f"build/{build}/rust/{RUST_TARGET}/release"
else:
profile = ""
is_debug = True
RUST_LIBDIR = f"build/{build}/rust/{RUST_TARGET}/debug"
is_debug = {"dev": True, "release": False}[profile]
# Don't prefix with `build_dir` - the paths below should be relative to it.
RUST_LIBDIR = f"rust/{RUST_TARGET}/{'debug' if is_debug else 'release'}"
RUST_LIBPATH = f"{RUST_LIBDIR}/lib{RUST_LIB}.a"
def cargo_build():
lib_features = []
lib_features.extend(features)
cargo_opts = [
cargo_opts = [] if is_debug else ["--release"]
cargo_opts += [
f"--target={RUST_TARGET}",
f"--target-dir=../../build/{build}/rust",
"--no-default-features",
@@ -178,7 +175,7 @@ def add_rust_lib(*, env, build, profile, features, all_paths, build_dir):
"-Z build-std-features=panic_immediate_abort",
]
build_cmd = f"cargo build {profile} " + " ".join(cargo_opts)
build_cmd = "cargo build " + " ".join(cargo_opts)
unstable_rustc_flags = [
# see https://nnethercote.github.io/perf-book/type-sizes.html#measuring-type-sizes for more details
@@ -200,13 +197,13 @@ def add_rust_lib(*, env, build, profile, features, all_paths, build_dir):
f"cd embed/rust; {build_cmd} > {build_dir}/rust-type-sizes.log"
)
# Target path should be relative to `build_dir`.
rust = env.Command(
target=RUST_LIBPATH,
source="",
action=cargo_build(),
)
env.Append(LINKFLAGS=[f"-L{RUST_LIBDIR}"])
env.Append(LINKFLAGS=[f"-l{RUST_LIB}"])
# TODO: run `cargo` only if needed
env.AlwaysBuild(rust)
return rust