From eb47a75ea4b6444ed355f95a44af8d05cf23a27d Mon Sep 17 00:00:00 2001 From: tychovrahe Date: Sun, 14 Apr 2024 12:28:57 +0200 Subject: [PATCH] refactor(core): reorganize model specific filex in site-scons [no changelog] --- core/SConscript.boardloader | 7 +- core/SConscript.bootloader | 7 +- core/SConscript.bootloader_ci | 7 +- core/SConscript.bootloader_emu | 8 +-- core/SConscript.firmware | 9 +-- core/SConscript.prodtest | 9 +-- core/SConscript.reflash | 9 +-- core/SConscript.unix | 3 +- core/site_scons/boards/__init__.py | 2 - core/site_scons/models/D001/__init__.py | 16 +++++ .../{boards => models/D001}/discovery.py | 4 +- core/site_scons/models/D002/__init__.py | 16 +++++ .../{boards => models/D002}/discovery2.py | 4 +- core/site_scons/models/T1B1/__init__.py | 16 +++++ .../{boards => models/T1B1}/trezor_1.py | 4 +- core/site_scons/models/T2B1/__init__.py | 29 ++++++++ .../{boards => models/T2B1}/trezor_r_v10.py | 4 +- .../{boards => models/T2B1}/trezor_r_v3.py | 4 +- .../{boards => models/T2B1}/trezor_r_v4.py | 4 +- .../{boards => models/T2B1}/trezor_r_v6.py | 4 +- core/site_scons/models/T2T1/__init__.py | 16 +++++ .../{boards => models/T2T1}/trezor_t.py | 4 +- core/site_scons/models/T3T1/__init__.py | 23 ++++++ .../T3T1}/trezor_t3t1_revE.py | 4 +- .../{boards => models/T3T1}/trezor_t3t1_v4.py | 4 +- core/site_scons/models/__init__.py | 40 +++++++++++ .../{boards => models}/stm32f4_common.py | 0 .../{boards => models}/stm32u5_common.py | 0 core/site_scons/tools.py | 72 ------------------- 29 files changed, 209 insertions(+), 120 deletions(-) delete mode 100644 core/site_scons/boards/__init__.py create mode 100644 core/site_scons/models/D001/__init__.py rename core/site_scons/{boards => models/D001}/discovery.py (96%) create mode 100644 core/site_scons/models/D002/__init__.py rename core/site_scons/{boards => models/D002}/discovery2.py (96%) create mode 100644 core/site_scons/models/T1B1/__init__.py rename core/site_scons/{boards => models/T1B1}/trezor_1.py (94%) create mode 100644 core/site_scons/models/T2B1/__init__.py rename core/site_scons/{boards => models/T2B1}/trezor_r_v10.py (96%) rename core/site_scons/{boards => models/T2B1}/trezor_r_v3.py (95%) rename core/site_scons/{boards => models/T2B1}/trezor_r_v4.py (95%) rename core/site_scons/{boards => models/T2B1}/trezor_r_v6.py (95%) create mode 100644 core/site_scons/models/T2T1/__init__.py rename core/site_scons/{boards => models/T2T1}/trezor_t.py (97%) create mode 100644 core/site_scons/models/T3T1/__init__.py rename core/site_scons/{boards => models/T3T1}/trezor_t3t1_revE.py (97%) rename core/site_scons/{boards => models/T3T1}/trezor_t3t1_v4.py (97%) create mode 100644 core/site_scons/models/__init__.py rename core/site_scons/{boards => models}/stm32f4_common.py (100%) rename core/site_scons/{boards => models}/stm32u5_common.py (100%) diff --git a/core/SConscript.boardloader b/core/SConscript.boardloader index 03a7b731b..3caf911cd 100644 --- a/core/SConscript.boardloader +++ b/core/SConscript.boardloader @@ -1,10 +1,11 @@ # pylint: disable=E0602 import os -import tools +import tools, models TREZOR_MODEL = ARGUMENTS.get('TREZOR_MODEL', 'T') CMAKELISTS = int(ARGUMENTS.get('CMAKELISTS', 0)) +HW_REVISION = ARGUMENTS.get('HW_REVISION', None) if TREZOR_MODEL in ('1', ): # skip boardloader build @@ -74,7 +75,7 @@ env = Environment(ENV=os.environ, CPPDEFINES_IMPLICIT=[] ) -FEATURES_AVAILABLE = tools.configure_board(TREZOR_MODEL, FEATURES_WANTED, env, CPPDEFINES_HAL, SOURCE_HAL, PATH_HAL) +FEATURES_AVAILABLE = models.configure_board(TREZOR_MODEL, HW_REVISION, FEATURES_WANTED, env, CPPDEFINES_HAL, SOURCE_HAL, PATH_HAL) FILE_SUFFIX= env.get('ENV')['SUFFIX'] LINKER_SCRIPT_SUFFIX= env.get('ENV')['LINKER_SCRIPT'] @@ -155,7 +156,7 @@ program_elf = env.Command( '$LINK -o $TARGET $CCFLAGS $CFLAGS $LINKFLAGS $SOURCES -lc_nano -lgcc', ) -BINARY_NAME = f"build/boardloader/boardloader-{tools.get_model_identifier(TREZOR_MODEL)}" +BINARY_NAME = f"build/boardloader/boardloader-{models.get_model_identifier(TREZOR_MODEL)}" BINARY_NAME += "-" + tools.get_version('embed/boardloader/version.h') BINARY_NAME += "-" + tools.get_git_revision_short_hash() BINARY_NAME += "-dirty" if tools.get_git_modified() else "" diff --git a/core/SConscript.bootloader b/core/SConscript.bootloader index 400cd3f2c..95c93f12b 100644 --- a/core/SConscript.bootloader +++ b/core/SConscript.bootloader @@ -1,12 +1,13 @@ # pylint: disable=E0602 import os -import tools +import tools, models TREZOR_MODEL = ARGUMENTS.get('TREZOR_MODEL', 'T') CMAKELISTS = int(ARGUMENTS.get('CMAKELISTS', 0)) BOOTLOADER_QA = ARGUMENTS.get('BOOTLOADER_QA', '0') == '1' PRODUCTION = 0 if BOOTLOADER_QA else ARGUMENTS.get('PRODUCTION', '0') == '1' +HW_REVISION = ARGUMENTS.get('HW_REVISION', None) if TREZOR_MODEL in ('1', ): # skip bootloader build @@ -121,7 +122,7 @@ env = Environment( CPPDEFINES_IMPLICIT=[] ) -FEATURES_AVAILABLE = tools.configure_board(TREZOR_MODEL, FEATURES_WANTED, env, CPPDEFINES_HAL, SOURCE_HAL, PATH_HAL) +FEATURES_AVAILABLE = models.configure_board(TREZOR_MODEL, HW_REVISION, FEATURES_WANTED, env, CPPDEFINES_HAL, SOURCE_HAL, PATH_HAL) FILE_SUFFIX= env.get('ENV')['SUFFIX'] LINKER_SCRIPT_SUFFIX= env.get('ENV')['LINKER_SCRIPT'] @@ -273,7 +274,7 @@ env.Depends(program_elf, rust) SUFFIX = '_qa' if BOOTLOADER_QA else '' -BINARY_NAME = f"build/bootloader/bootloader-{tools.get_model_identifier(TREZOR_MODEL)}{SUFFIX}" +BINARY_NAME = f"build/bootloader/bootloader-{models.get_model_identifier(TREZOR_MODEL)}{SUFFIX}" BINARY_NAME += "-" + tools.get_version('embed/bootloader/version.h') BINARY_NAME += "-" + tools.get_git_revision_short_hash() BINARY_NAME += "-dirty" if tools.get_git_modified() else "" diff --git a/core/SConscript.bootloader_ci b/core/SConscript.bootloader_ci index 1835b9305..cbd5d3ef2 100644 --- a/core/SConscript.bootloader_ci +++ b/core/SConscript.bootloader_ci @@ -1,10 +1,11 @@ # pylint: disable=E0602 import os -import tools +import tools, models TREZOR_MODEL = ARGUMENTS.get('TREZOR_MODEL', 'T') CMAKELISTS = int(ARGUMENTS.get('CMAKELISTS', 0)) +HW_REVISION = ARGUMENTS.get('HW_REVISION', None) if TREZOR_MODEL in ('1', 'DISC1', 'DISC2'): # skip bootloader_ci build @@ -112,7 +113,7 @@ env = Environment( CPPDEFINES_IMPLICIT=[] ) -FEATURES_AVAILABLE = tools.configure_board(TREZOR_MODEL, FEATURES_WANTED, env, CPPDEFINES_HAL, SOURCE_HAL, PATH_HAL) +FEATURES_AVAILABLE = models.configure_board(TREZOR_MODEL, HW_REVISION, FEATURES_WANTED, env, CPPDEFINES_HAL, SOURCE_HAL, PATH_HAL) FILE_SUFFIX= env.get('ENV')['SUFFIX'] LINKER_SCRIPT_SUFFIX= env.get('ENV')['LINKER_SCRIPT'] @@ -207,7 +208,7 @@ program_elf = env.Command( '$LINK -o $TARGET $CCFLAGS $CFLAGS $LINKFLAGS $SOURCES -lc_nano -lgcc', ) -BINARY_NAME = f"build/bootloader_ci/bootloader_ci-{tools.get_model_identifier(TREZOR_MODEL)}" +BINARY_NAME = f"build/bootloader_ci/bootloader_ci-{models.get_model_identifier(TREZOR_MODEL)}" BINARY_NAME += "-" + tools.get_version('embed/bootloader_ci/version.h') BINARY_NAME += "-" + tools.get_git_revision_short_hash() BINARY_NAME += "-dirty" if tools.get_git_modified() else "" diff --git a/core/SConscript.bootloader_emu b/core/SConscript.bootloader_emu index f999eda89..5eb0d581b 100644 --- a/core/SConscript.bootloader_emu +++ b/core/SConscript.bootloader_emu @@ -1,11 +1,11 @@ # pylint: disable=E0602 import os -import tools -import boards +import tools, models TREZOR_MODEL = ARGUMENTS.get('TREZOR_MODEL', 'T') CMAKELISTS = int(ARGUMENTS.get('CMAKELISTS', 0)) +HW_REVISION = 'emulator' DMA2D = False if TREZOR_MODEL in ('1', 'DISC1'): @@ -195,8 +195,8 @@ elif TREZOR_MODEL in ('1',): else: raise ValueError('Unknown Trezor model') -MODEL_IDENTIFIER = tools.get_model_identifier(TREZOR_MODEL) -MODEL_AS_NUMBER = str(boards.get_hw_model_as_number(MODEL_IDENTIFIER)) +MODEL_IDENTIFIER = models.get_model_identifier(TREZOR_MODEL) +MODEL_AS_NUMBER = str(models.get_hw_model_as_number(MODEL_IDENTIFIER)) ALLPATHS = ['embed/rust', 'embed/bootloader', diff --git a/core/SConscript.firmware b/core/SConscript.firmware index 6dc785bba..d4e095423 100644 --- a/core/SConscript.firmware +++ b/core/SConscript.firmware @@ -2,7 +2,7 @@ # fmt: off import os -import tools +import tools, models BITCOIN_ONLY = ARGUMENTS.get('BITCOIN_ONLY', '0') PRODUCTION = ARGUMENTS.get('PRODUCTION', '0') == '1' @@ -13,6 +13,7 @@ TREZOR_MODEL = ARGUMENTS.get('TREZOR_MODEL', 'T') CMAKELISTS = int(ARGUMENTS.get('CMAKELISTS', 0)) PYOPT = ARGUMENTS.get('PYOPT', '1') DISABLE_OPTIGA = ARGUMENTS.get('DISABLE_OPTIGA', '0') == '1' +HW_REVISION = ARGUMENTS.get('HW_REVISION', None) FEATURE_FLAGS = { @@ -400,7 +401,7 @@ env = Environment( CPPDEFINES_IMPLICIT=[] ) -FEATURES_AVAILABLE = tools.configure_board(TREZOR_MODEL, FEATURES_WANTED, env, CPPDEFINES_HAL, SOURCE_HAL, PATH_HAL) +FEATURES_AVAILABLE = models.configure_board(TREZOR_MODEL, HW_REVISION, FEATURES_WANTED, env, CPPDEFINES_HAL, SOURCE_HAL, PATH_HAL) FILE_SUFFIX= env.get('ENV')['SUFFIX'] @@ -806,7 +807,7 @@ env.Append(LINKFLAGS=f' -L{RUST_LIBDIR}') env.Append(LINKFLAGS=f' -l{RUST_LIB}') -MODEL_IDENTIFIER = tools.get_model_identifier(TREZOR_MODEL) +MODEL_IDENTIFIER = models.get_model_identifier(TREZOR_MODEL) BOOTLOADER_SUFFIX = MODEL_IDENTIFIER if BOOTLOADER_QA: BOOTLOADER_SUFFIX += '_qa' @@ -859,7 +860,7 @@ if CMAKELISTS != 0: env.Depends(program_elf, cmake_gen) env.Depends(program_elf, rust) -BINARY_NAME = f"build/firmware/firmware-{tools.get_model_identifier(TREZOR_MODEL)}" +BINARY_NAME = f"build/firmware/firmware-{models.get_model_identifier(TREZOR_MODEL)}" if not EVERYTHING: BINARY_NAME += "-btconly" BINARY_NAME += "-" + tools.get_version('embed/firmware/version.h') diff --git a/core/SConscript.prodtest b/core/SConscript.prodtest index 78d4320b9..c38b8cb05 100644 --- a/core/SConscript.prodtest +++ b/core/SConscript.prodtest @@ -1,12 +1,13 @@ # pylint: disable=E0602 import os -import tools +import tools, models TREZOR_MODEL = ARGUMENTS.get('TREZOR_MODEL', 'T') CMAKELISTS = int(ARGUMENTS.get('CMAKELISTS', 0)) PRODUCTION = ARGUMENTS.get('PRODUCTION', '0') == '1' BOOTLOADER_DEVEL = ARGUMENTS.get('BOOTLOADER_DEVEL', '0') == '1' +HW_REVISION = ARGUMENTS.get('HW_REVISION', None) if TREZOR_MODEL in ('DISC1', 'DISC2'): # skip prodtest build @@ -106,7 +107,7 @@ env = Environment( CFLAGS='%s -DPRODUCTION=%s' % (ARGUMENTS.get('CFLAGS', ''), ARGUMENTS.get('PRODUCTION', '0')), CPPDEFINES_IMPLICIT=[]) -FEATURES_AVAILABLE = tools.configure_board(TREZOR_MODEL, FEATURES_WANTED, env, CPPDEFINES_HAL, SOURCE_HAL, PATH_HAL) +FEATURES_AVAILABLE = models.configure_board(TREZOR_MODEL, HW_REVISION, FEATURES_WANTED, env, CPPDEFINES_HAL, SOURCE_HAL, PATH_HAL) FILE_SUFFIX= env.get('ENV')['SUFFIX'] LINKER_SCRIPT_SUFFIX= env.get('ENV')['LINKER_SCRIPT'] @@ -193,7 +194,7 @@ obj_program.extend(env.Object(source=SOURCE_MOD)) obj_program.extend(env.Object(source=SOURCE_PRODTEST)) obj_program.extend(env.Object(source=SOURCE_HAL)) -MODEL_IDENTIFIER = tools.get_model_identifier(TREZOR_MODEL) +MODEL_IDENTIFIER = models.get_model_identifier(TREZOR_MODEL) if PRODUCTION: VENDORHEADER = f'embed/vendorheader/{MODEL_IDENTIFIER}/vendorheader_prodtest_signed_prod.bin' @@ -219,7 +220,7 @@ program_elf = env.Command( '$LINK -o $TARGET $CCFLAGS $CFLAGS $LINKFLAGS $SOURCES -lc_nano -lgcc', ) -BINARY_NAME = f"build/prodtest/prodtest-{tools.get_model_identifier(TREZOR_MODEL)}" +BINARY_NAME = f"build/prodtest/prodtest-{models.get_model_identifier(TREZOR_MODEL)}" BINARY_NAME += "-" + tools.get_version('embed/prodtest/version.h') BINARY_NAME += "-" + tools.get_git_revision_short_hash() BINARY_NAME += "-dirty" if tools.get_git_modified() else "" diff --git a/core/SConscript.reflash b/core/SConscript.reflash index 4772d45a9..e280e143b 100644 --- a/core/SConscript.reflash +++ b/core/SConscript.reflash @@ -1,10 +1,11 @@ # pylint: disable=E0602 import os -import tools +import tools, models TREZOR_MODEL = ARGUMENTS.get('TREZOR_MODEL', 'T') CMAKELISTS = int(ARGUMENTS.get('CMAKELISTS', 0)) +HW_REVISION = ARGUMENTS.get('HW_REVISION', None) if TREZOR_MODEL in ('DISC1', 'DISC2'): # skip reflash build @@ -82,7 +83,7 @@ env = Environment( CPPDEFINES_IMPLICIT=[] ) -FEATURES_AVAILABLE = tools.configure_board(TREZOR_MODEL, FEATURES_WANTED, env, CPPDEFINES_HAL, SOURCE_HAL, PATH_HAL) +FEATURES_AVAILABLE = models.configure_board(TREZOR_MODEL, HW_REVISION, FEATURES_WANTED, env, CPPDEFINES_HAL, SOURCE_HAL, PATH_HAL) FILE_SUFFIX= env.get('ENV')['SUFFIX'] LINKER_SCRIPT_SUFFIX= env.get('ENV')['LINKER_SCRIPT'] @@ -158,7 +159,7 @@ obj_program += env.Object(source=SOURCE_MOD) obj_program += env.Object(source=SOURCE_REFLASH) obj_program += env.Object(source=SOURCE_HAL) -MODEL_IDENTIFIER = tools.get_model_identifier(TREZOR_MODEL) +MODEL_IDENTIFIER = models.get_model_identifier(TREZOR_MODEL) VENDORHEADER = f'embed/vendorheader/{MODEL_IDENTIFIER}/vendorheader_' + ('unsafe_signed_dev.bin' if ARGUMENTS.get('PRODUCTION', '0') == '0' else 'satoshilabs_signed_prod.bin') @@ -177,7 +178,7 @@ program_elf = env.Command( '$LINK -o $TARGET $CCFLAGS $CFLAGS $LINKFLAGS $SOURCES -lc_nano -lgcc', ) -BINARY_NAME = f"build/reflash/reflash-{tools.get_model_identifier(TREZOR_MODEL)}" +BINARY_NAME = f"build/reflash/reflash-{models.get_model_identifier(TREZOR_MODEL)}" BINARY_NAME += "-" + tools.get_version('embed/reflash/version.h') BINARY_NAME += "-" + tools.get_git_revision_short_hash() BINARY_NAME += "-dirty" if tools.get_git_modified() else "" diff --git a/core/SConscript.unix b/core/SConscript.unix index 0120ff9f9..b6e29c590 100644 --- a/core/SConscript.unix +++ b/core/SConscript.unix @@ -2,7 +2,7 @@ # fmt: off import os -import tools +import tools, models BITCOIN_ONLY = ARGUMENTS.get('BITCOIN_ONLY', '0') EVERYTHING = BITCOIN_ONLY != '1' @@ -10,6 +10,7 @@ TREZOR_MODEL = ARGUMENTS.get('TREZOR_MODEL', 'T') DMA2D = TREZOR_MODEL in ('T', 'T3T1') OPTIGA = TREZOR_MODEL in ('R', 'T3T1') CMAKELISTS = int(ARGUMENTS.get('CMAKELISTS', 0)) +HW_REVISION ='emulator' if TREZOR_MODEL in ('DISC1', 'DISC2'): # skip unix build diff --git a/core/site_scons/boards/__init__.py b/core/site_scons/boards/__init__.py deleted file mode 100644 index a4b4c81dd..000000000 --- a/core/site_scons/boards/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -def get_hw_model_as_number(hw_model: str) -> int: - return int.from_bytes(hw_model.encode(), "little") diff --git a/core/site_scons/models/D001/__init__.py b/core/site_scons/models/D001/__init__.py new file mode 100644 index 000000000..8df4c02a5 --- /dev/null +++ b/core/site_scons/models/D001/__init__.py @@ -0,0 +1,16 @@ +from __future__ import annotations + +from typing import Optional + +from .discovery import configure + + +def configure_board( + revision: Optional[str], + features_wanted: list[str], + env: dict, # type: ignore + defines: list[str | tuple[str, str]], + sources: list[str], + paths: list[str], +): + return configure(env, features_wanted, defines, sources, paths) diff --git a/core/site_scons/boards/discovery.py b/core/site_scons/models/D001/discovery.py similarity index 96% rename from core/site_scons/boards/discovery.py rename to core/site_scons/models/D001/discovery.py index 89c1be6d3..387464673 100644 --- a/core/site_scons/boards/discovery.py +++ b/core/site_scons/models/D001/discovery.py @@ -1,7 +1,7 @@ from __future__ import annotations -from . import get_hw_model_as_number -from .stm32f4_common import stm32f4_common_files +from .. import get_hw_model_as_number +from ..stm32f4_common import stm32f4_common_files def configure( diff --git a/core/site_scons/models/D002/__init__.py b/core/site_scons/models/D002/__init__.py new file mode 100644 index 000000000..18c892338 --- /dev/null +++ b/core/site_scons/models/D002/__init__.py @@ -0,0 +1,16 @@ +from __future__ import annotations + +from typing import Optional + +from .discovery2 import configure + + +def configure_board( + revision: Optional[str], + features_wanted: list[str], + env: dict, # type: ignore + defines: list[str | tuple[str, str]], + sources: list[str], + paths: list[str], +): + return configure(env, features_wanted, defines, sources, paths) diff --git a/core/site_scons/boards/discovery2.py b/core/site_scons/models/D002/discovery2.py similarity index 96% rename from core/site_scons/boards/discovery2.py rename to core/site_scons/models/D002/discovery2.py index 9f0741563..f0d448c41 100644 --- a/core/site_scons/boards/discovery2.py +++ b/core/site_scons/models/D002/discovery2.py @@ -1,7 +1,7 @@ from __future__ import annotations -from . import get_hw_model_as_number -from .stm32u5_common import stm32u5_common_files +from .. import get_hw_model_as_number +from ..stm32u5_common import stm32u5_common_files def configure( diff --git a/core/site_scons/models/T1B1/__init__.py b/core/site_scons/models/T1B1/__init__.py new file mode 100644 index 000000000..b0af63c46 --- /dev/null +++ b/core/site_scons/models/T1B1/__init__.py @@ -0,0 +1,16 @@ +from __future__ import annotations + +from typing import Optional + +from .trezor_1 import configure + + +def configure_board( + revision: Optional[str], + features_wanted: list[str], + env: dict, # type: ignore + defines: list[str | tuple[str, str]], + sources: list[str], + paths: list[str], +): + return configure(env, features_wanted, defines, sources, paths) diff --git a/core/site_scons/boards/trezor_1.py b/core/site_scons/models/T1B1/trezor_1.py similarity index 94% rename from core/site_scons/boards/trezor_1.py rename to core/site_scons/models/T1B1/trezor_1.py index 8c565383f..2fcdf6e28 100644 --- a/core/site_scons/boards/trezor_1.py +++ b/core/site_scons/models/T1B1/trezor_1.py @@ -1,7 +1,7 @@ from __future__ import annotations -from . import get_hw_model_as_number -from .stm32f4_common import stm32f4_common_files +from .. import get_hw_model_as_number +from ..stm32f4_common import stm32f4_common_files def configure( diff --git a/core/site_scons/models/T2B1/__init__.py b/core/site_scons/models/T2B1/__init__.py new file mode 100644 index 000000000..659138e37 --- /dev/null +++ b/core/site_scons/models/T2B1/__init__.py @@ -0,0 +1,29 @@ +from __future__ import annotations + +from typing import Optional + +from .trezor_r_v3 import configure as configure_r3 +from .trezor_r_v4 import configure as configure_r4 +from .trezor_r_v6 import configure as configure_r6 +from .trezor_r_v10 import configure as configure_r10 + + +def configure_board( + revision: Optional[int], + features_wanted: list[str], + env: dict, # type: ignore + defines: list[str | tuple[str, str]], + sources: list[str], + paths: list[str], +): + if revision is None: + revision = 10 + if revision == 3: + return configure_r3(env, features_wanted, defines, sources, paths) + elif revision == 4: + return configure_r4(env, features_wanted, defines, sources, paths) + elif revision == 6: + return configure_r6(env, features_wanted, defines, sources, paths) + elif revision == 10: + return configure_r10(env, features_wanted, defines, sources, paths) + raise Exception("Unknown model_r_version") diff --git a/core/site_scons/boards/trezor_r_v10.py b/core/site_scons/models/T2B1/trezor_r_v10.py similarity index 96% rename from core/site_scons/boards/trezor_r_v10.py rename to core/site_scons/models/T2B1/trezor_r_v10.py index 3489aafa9..40e119c64 100644 --- a/core/site_scons/boards/trezor_r_v10.py +++ b/core/site_scons/models/T2B1/trezor_r_v10.py @@ -1,7 +1,7 @@ from __future__ import annotations -from . import get_hw_model_as_number -from .stm32f4_common import stm32f4_common_files +from .. import get_hw_model_as_number +from ..stm32f4_common import stm32f4_common_files def configure( diff --git a/core/site_scons/boards/trezor_r_v3.py b/core/site_scons/models/T2B1/trezor_r_v3.py similarity index 95% rename from core/site_scons/boards/trezor_r_v3.py rename to core/site_scons/models/T2B1/trezor_r_v3.py index 86eef1738..dc18631c5 100644 --- a/core/site_scons/boards/trezor_r_v3.py +++ b/core/site_scons/models/T2B1/trezor_r_v3.py @@ -1,7 +1,7 @@ from __future__ import annotations -from . import get_hw_model_as_number -from .stm32f4_common import stm32f4_common_files +from .. import get_hw_model_as_number +from ..stm32f4_common import stm32f4_common_files def configure( diff --git a/core/site_scons/boards/trezor_r_v4.py b/core/site_scons/models/T2B1/trezor_r_v4.py similarity index 95% rename from core/site_scons/boards/trezor_r_v4.py rename to core/site_scons/models/T2B1/trezor_r_v4.py index f0ce7e39b..49fe6fbf8 100644 --- a/core/site_scons/boards/trezor_r_v4.py +++ b/core/site_scons/models/T2B1/trezor_r_v4.py @@ -1,7 +1,7 @@ from __future__ import annotations -from . import get_hw_model_as_number -from .stm32f4_common import stm32f4_common_files +from .. import get_hw_model_as_number +from ..stm32f4_common import stm32f4_common_files def configure( diff --git a/core/site_scons/boards/trezor_r_v6.py b/core/site_scons/models/T2B1/trezor_r_v6.py similarity index 95% rename from core/site_scons/boards/trezor_r_v6.py rename to core/site_scons/models/T2B1/trezor_r_v6.py index b3f790071..f17d6887d 100644 --- a/core/site_scons/boards/trezor_r_v6.py +++ b/core/site_scons/models/T2B1/trezor_r_v6.py @@ -1,7 +1,7 @@ from __future__ import annotations -from . import get_hw_model_as_number -from .stm32f4_common import stm32f4_common_files +from .. import get_hw_model_as_number +from ..stm32f4_common import stm32f4_common_files def configure( diff --git a/core/site_scons/models/T2T1/__init__.py b/core/site_scons/models/T2T1/__init__.py new file mode 100644 index 000000000..bebe0b3aa --- /dev/null +++ b/core/site_scons/models/T2T1/__init__.py @@ -0,0 +1,16 @@ +from __future__ import annotations + +from typing import Optional + +from .trezor_t import configure + + +def configure_board( + revision: Optional[str], + features_wanted: list[str], + env: dict, # type: ignore + defines: list[str | tuple[str, str]], + sources: list[str], + paths: list[str], +): + return configure(env, features_wanted, defines, sources, paths) diff --git a/core/site_scons/boards/trezor_t.py b/core/site_scons/models/T2T1/trezor_t.py similarity index 97% rename from core/site_scons/boards/trezor_t.py rename to core/site_scons/models/T2T1/trezor_t.py index c2be10fb7..7cbb5a34d 100644 --- a/core/site_scons/boards/trezor_t.py +++ b/core/site_scons/models/T2T1/trezor_t.py @@ -1,7 +1,7 @@ from __future__ import annotations -from . import get_hw_model_as_number -from .stm32f4_common import stm32f4_common_files +from .. import get_hw_model_as_number +from ..stm32f4_common import stm32f4_common_files def configure( diff --git a/core/site_scons/models/T3T1/__init__.py b/core/site_scons/models/T3T1/__init__.py new file mode 100644 index 000000000..2b968aca0 --- /dev/null +++ b/core/site_scons/models/T3T1/__init__.py @@ -0,0 +1,23 @@ +from __future__ import annotations + +from typing import Optional + +from .trezor_t3t1_revE import configure as configure_revE +from .trezor_t3t1_v4 import configure as configure_v4 + + +def configure_board( + revision: Optional[int | str], + features_wanted: list[str], + env: dict, # type: ignore + defines: list[str | tuple[str, str]], + sources: list[str], + paths: list[str], +): + if revision is None: + revision = "E" + if revision == 4: + return configure_v4(env, features_wanted, defines, sources, paths) + elif revision == "E": + return configure_revE(env, features_wanted, defines, sources, paths) + raise Exception("Unknown model_t3t1_version") diff --git a/core/site_scons/boards/trezor_t3t1_revE.py b/core/site_scons/models/T3T1/trezor_t3t1_revE.py similarity index 97% rename from core/site_scons/boards/trezor_t3t1_revE.py rename to core/site_scons/models/T3T1/trezor_t3t1_revE.py index a15436263..e332b2e12 100644 --- a/core/site_scons/boards/trezor_t3t1_revE.py +++ b/core/site_scons/models/T3T1/trezor_t3t1_revE.py @@ -1,7 +1,7 @@ from __future__ import annotations -from . import get_hw_model_as_number -from .stm32u5_common import stm32u5_common_files +from .. import get_hw_model_as_number +from ..stm32u5_common import stm32u5_common_files def configure( diff --git a/core/site_scons/boards/trezor_t3t1_v4.py b/core/site_scons/models/T3T1/trezor_t3t1_v4.py similarity index 97% rename from core/site_scons/boards/trezor_t3t1_v4.py rename to core/site_scons/models/T3T1/trezor_t3t1_v4.py index c98376589..426a7c534 100644 --- a/core/site_scons/boards/trezor_t3t1_v4.py +++ b/core/site_scons/models/T3T1/trezor_t3t1_v4.py @@ -1,7 +1,7 @@ from __future__ import annotations -from . import get_hw_model_as_number -from .stm32u5_common import stm32u5_common_files +from .. import get_hw_model_as_number +from ..stm32u5_common import stm32u5_common_files def configure( diff --git a/core/site_scons/models/__init__.py b/core/site_scons/models/__init__.py new file mode 100644 index 000000000..1703168f6 --- /dev/null +++ b/core/site_scons/models/__init__.py @@ -0,0 +1,40 @@ +from __future__ import annotations + +import importlib +from typing import Optional + + +def get_hw_model_as_number(hw_model: str) -> int: + return int.from_bytes(hw_model.encode(), "little") + + +def configure_board( + model: str, + revision: Optional[str | int], + features_wanted: list[str], + env: dict, # type: ignore + defines: list[str | tuple[str, str]], + sources: list[str], + paths: list[str], +) -> list[str]: + imported_module = importlib.import_module("models." + get_model_identifier(model)) + return imported_module.configure_board( + revision, features_wanted, env, defines, sources, paths + ) + + +def get_model_identifier(model: str) -> str: + if model == "1": + return "T1B1" + elif model == "T": + return "T2T1" + elif model == "R": + return "T2B1" + elif model == "T3T1": + return "T3T1" + elif model == "DISC1": + return "D001" + elif model == "DISC2": + return "D002" + else: + raise Exception("Unknown model") diff --git a/core/site_scons/boards/stm32f4_common.py b/core/site_scons/models/stm32f4_common.py similarity index 100% rename from core/site_scons/boards/stm32f4_common.py rename to core/site_scons/models/stm32f4_common.py diff --git a/core/site_scons/boards/stm32u5_common.py b/core/site_scons/models/stm32u5_common.py similarity index 100% rename from core/site_scons/boards/stm32u5_common.py rename to core/site_scons/models/stm32u5_common.py diff --git a/core/site_scons/tools.py b/core/site_scons/tools.py index 312b4014d..b4820a4db 100644 --- a/core/site_scons/tools.py +++ b/core/site_scons/tools.py @@ -4,19 +4,6 @@ import subprocess import zlib from pathlib import Path -from boards import ( - discovery, - discovery2, - trezor_1, - trezor_r_v3, - trezor_r_v4, - trezor_r_v6, - trezor_r_v10, - trezor_t, - trezor_t3t1_revE, - trezor_t3t1_v4, -) - HERE = Path(__file__).parent.resolve() # go up from site_scons to core/ @@ -36,65 +23,6 @@ def add_font( sources.append(sourcefile) -def configure_board( - model: str, - features_wanted: list[str], - env: dict, # type: ignore - defines: list[str | tuple[str, str]], - sources: list[str], - paths: list[str], -) -> list[str]: - model_r_version = 10 - model_t3t1_version = "E" - - if model in ("1",): - return trezor_1.configure(env, features_wanted, defines, sources, paths) - elif model in ("T",): - return trezor_t.configure(env, features_wanted, defines, sources, paths) - elif model in ("R",): - if model_r_version == 3: - return trezor_r_v3.configure(env, features_wanted, defines, sources, paths) - elif model_r_version == 4: - return trezor_r_v4.configure(env, features_wanted, defines, sources, paths) - elif model_r_version == 6: - return trezor_r_v6.configure(env, features_wanted, defines, sources, paths) - elif model_r_version == 10: - return trezor_r_v10.configure(env, features_wanted, defines, sources, paths) - raise Exception("Unknown model_r_version") - elif model in ("T3T1",): - if model_t3t1_version == 4: - return trezor_t3t1_v4.configure( - env, features_wanted, defines, sources, paths - ) - elif model_t3t1_version == "E": - return trezor_t3t1_revE.configure( - env, features_wanted, defines, sources, paths - ) - raise Exception("Unknown model_t3t1_version") - elif model in ("DISC1",): - return discovery.configure(env, features_wanted, defines, sources, paths) - elif model in ("DISC2",): - return discovery2.configure(env, features_wanted, defines, sources, paths) - raise Exception("Unknown model") - - -def get_model_identifier(model: str) -> str: - if model == "1": - return "T1B1" - elif model == "T": - return "T2T1" - elif model == "R": - return "T2B1" - elif model == "T3T1": - return "T3T1" - elif model == "DISC1": - return "D001" - elif model == "DISC2": - return "D002" - else: - raise Exception("Unknown model") - - def get_version(file: str) -> str: major = 0 minor = 0