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_BOOTLOADER)
obj_program += env.Object(source=SOURCE_NANOPB) obj_program += env.Object(source=SOURCE_NANOPB)
obj_program += env.Object(source=SOURCE_HAL) obj_program += env.Object(source=SOURCE_HAL)
obj_program += [rust]
if 'boot_ucb' in FEATURES_AVAILABLE: if 'boot_ucb' in FEATURES_AVAILABLE:
obj_program += env.Object( obj_program += env.Object(
@@ -299,7 +300,6 @@ program_elf = env.Command(
) )
env.Depends(program_elf, linkerscript_gen) env.Depends(program_elf, linkerscript_gen)
env.Depends(program_elf, rust)
SUFFIX = '_qa' if BOOTLOADER_QA else '' 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_BOOTLOADER)
obj_program += env.Object(source=SOURCE_NANOPB) obj_program += env.Object(source=SOURCE_NANOPB)
obj_program += env.Object(source=SOURCE_UNIX) obj_program += env.Object(source=SOURCE_UNIX)
obj_program += [rust]
program_elf = env.Command( program_elf = env.Command(
target='bootloader.elf', target='bootloader.elf',
@@ -273,7 +274,5 @@ program_elf = env.Command(
action= action=
'$CC -o $TARGET $SOURCES $_LIBDIRFLAGS $_LIBFLAGS $LINKFLAGS') '$CC -o $TARGET $SOURCES $_LIBDIRFLAGS $_LIBFLAGS $LINKFLAGS')
env.Depends(program_elf, rust)
if CMAKELISTS != 0: if CMAKELISTS != 0:
env.Depends(program_elf, cmake_gen) env.Depends(program_elf, cmake_gen)

View File

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

View File

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

View File

@@ -338,6 +338,7 @@ rust = tools.add_rust_lib(
all_paths=ALLPATHS, all_paths=ALLPATHS,
build_dir=str(Dir('.').abspath), build_dir=str(Dir('.').abspath),
) )
obj_program += [rust]
if (vh := ARGUMENTS.get("VENDOR_HEADER", None)): 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, linkerscript_gen)
env.Depends(program_elf, rust)
BINARY_NAME = f"build/prodtest/prodtest-{TREZOR_MODEL}" BINARY_NAME = f"build/prodtest/prodtest-{TREZOR_MODEL}"
BINARY_NAME += "-" + tools.get_version('embed/projects/prodtest/version.h') 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_PRODTEST)
obj_program += env.Object(source=SOURCE_HAL) obj_program += env.Object(source=SOURCE_HAL)
obj_program += env.Object(source=SOURCE_MLDSA) obj_program += env.Object(source=SOURCE_MLDSA)
obj_program += [rust]
program_elf = env.Command( program_elf = env.Command(
target='prodtest.elf', target='prodtest.elf',
@@ -309,7 +310,5 @@ program_elf = env.Command(
action= action=
'$CC -o $TARGET $SOURCES $_LIBDIRFLAGS $_LIBFLAGS $LINKFLAGS') '$CC -o $TARGET $SOURCES $_LIBDIRFLAGS $_LIBFLAGS $LINKFLAGS')
env.Depends(program_elf, rust)
if CMAKELISTS != 0: if CMAKELISTS != 0:
env.Depends(program_elf, cmake_gen) env.Depends(program_elf, cmake_gen)

View File

@@ -925,7 +925,7 @@ rust = tools.add_rust_lib(
all_paths=ALLPATHS, all_paths=ALLPATHS,
build_dir=str(Dir('.').abspath), build_dir=str(Dir('.').abspath),
) )
obj_program += [rust]
env.Depends(rust, protobuf_blobs) env.Depends(rust, protobuf_blobs)
env.Depends(rust, TRANSLATION_DATA) env.Depends(rust, TRANSLATION_DATA)
@@ -938,4 +938,3 @@ program = env.Command(
if CMAKELISTS != 0: if CMAKELISTS != 0:
env.Depends(program, cmake_gen) 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"] RUST_TARGET = env.get("ENV")["RUST_TARGET"]
# Determine the profile build flags. # Determine the profile build flags.
if profile == "release": is_debug = {"dev": True, "release": False}[profile]
profile = "--release"
is_debug = False # Don't prefix with `build_dir` - the paths below should be relative to it.
RUST_LIBDIR = f"build/{build}/rust/{RUST_TARGET}/release" RUST_LIBDIR = f"rust/{RUST_TARGET}/{'debug' if is_debug else 'release'}"
else:
profile = ""
is_debug = True
RUST_LIBDIR = f"build/{build}/rust/{RUST_TARGET}/debug"
RUST_LIBPATH = f"{RUST_LIBDIR}/lib{RUST_LIB}.a" RUST_LIBPATH = f"{RUST_LIBDIR}/lib{RUST_LIB}.a"
def cargo_build(): def cargo_build():
lib_features = [] lib_features = []
lib_features.extend(features) lib_features.extend(features)
cargo_opts = [ cargo_opts = [] if is_debug else ["--release"]
cargo_opts += [
f"--target={RUST_TARGET}", f"--target={RUST_TARGET}",
f"--target-dir=../../build/{build}/rust", f"--target-dir=../../build/{build}/rust",
"--no-default-features", "--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", "-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 = [ unstable_rustc_flags = [
# see https://nnethercote.github.io/perf-book/type-sizes.html#measuring-type-sizes for more details # 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" f"cd embed/rust; {build_cmd} > {build_dir}/rust-type-sizes.log"
) )
# Target path should be relative to `build_dir`.
rust = env.Command( rust = env.Command(
target=RUST_LIBPATH, target=RUST_LIBPATH,
source="", source="",
action=cargo_build(), action=cargo_build(),
) )
# TODO: run `cargo` only if needed
env.Append(LINKFLAGS=[f"-L{RUST_LIBDIR}"]) env.AlwaysBuild(rust)
env.Append(LINKFLAGS=[f"-l{RUST_LIB}"])
return rust return rust