mirror of
https://github.com/trezor/trezor-firmware.git
synced 2026-02-20 00:33:30 +01:00
build(core): fix Rust library path in SConscript
[no changelog]
This commit is contained in:
@@ -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 ''
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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')
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user