# Scripts for managing the project This directory contains various scripts that are used either in some of the make targets, or manually, to generate code, check its size, etc. ## Most used tools ### `headertool` Lives in `trezor_core_tools/headertool.py` and is exposed as a CLI tool by the same name. Headertool can generate, analyze, and modify vendor and firmware headers. Use `headertool --help` to get the full list of commands. The most common usage is `headertool somefile.bin` that will dump header information. Another useful feature is `headertool -V vendor_header.bin firmware.bin`, which will replace the embedded vendor header in `firmware.bin` with the one in `vendor_header.bin`. ### `build_mocks` Generate `.pyi` stubs from C and Rust source files. ### `build_templates` Regenerate sources from Mako templates. ### `build_vendorheader` Generate a vendor header binary from a json description. ### `combine_firmware` Combine a flashable image from a boardloader, bootloader, and firmware. ## Everything else ### `codegen` Code generation tool for fonts, the loader graphic (deprecated) and cryptographic keys (also deprecated). ### `dialog-designer` Deprecated tool to visually preview multi-line dialogs in the old Trezor T UI. ### `gdb_scripts` Scripts for GDB debugger. ### `hid-bridge` Tool that creates a virtual HID device bridged to a UDP. This allows using the emulator as a FIDO/U2F authenticator in a browser. ### `size` Scripts to examine size of firmware. ### `snippets` Ad-hoc scripts for various one-off tasks that could become useful again. (the whole thing is prooobably deprecated by LLMs, which will regenerate any script on demand). ### `translations` Tools for checking validity of translation data and its usage. ### `trezor_core_tools` A Python package that exposes certain functionalities as CLI commands. `headertool` and `combine_firmware` live here, more may be moved or added. Additional tools are `layout_parser`, which is used to extract memory layout information from a model `.h` file, and related tool `lsgen` to generate linker script files from the model `.h`. ### `alloc.py` Generate a HTML report of allocation count per line of code, as captured when running `emu.py -p`. ### `analyze-memory-dump.py` Generate a HTML report of a state of the Micropython GC heap, as captured by `trezor.utils.mem_dump` at some execution point. ### `build_icons.py` Regenerate embedded TOIF icons for webauthn apps from png files. ### `coverage-report` Combine coverage reports from multiple CI jobs and generate a report. ### `frozen_mpy_translator.py` Translate bytecode instructions in frozen_mpy.c to human readable form. ### `generate_vendorheader.sh` Uses `build_vendorheader` to rebuild all vendor headers for all models. ### `jpg_to_h.py` Convert a JPG image to a C array that can be embedded into the firmware. (TODO could we replace it with xxd -i?) ### `make_cmakelists.py` Generate a CMakeLists.txt file for the core. ### `provision_device.py` Run the provisioning flow on a prodtest firmware, against a staging provisioning server. ### `rust_api_checks.py` Check that the Rust UI API is consistent with the Python UI API. ### `rust_api_models_unification.py` Checks the consistency of the Rust API between models.