Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
mmilata committed Jan 9, 2025
1 parent 862c987 commit 8b66951
Show file tree
Hide file tree
Showing 48 changed files with 131 additions and 168 deletions.
10 changes: 6 additions & 4 deletions .github/workflows/common.yml
Original file line number Diff line number Diff line change
Expand Up @@ -133,21 +133,23 @@ jobs:
strategy:
fail-fast: false
matrix:
# model: [T1B1, T2T1, T2B1, T3B1, T3T1] # TODO update exprs below
model: ["1", "T", "R", T3B1, T3T1]
model: [T1B1, T2T1, T2B1, T3B1, T3T1]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- run: git checkout ${{ github.head_ref || github.ref_name }}
- run: ./build-docker.sh ${{ matrix.model == '1' && '--skip-core' || '--skip-legacy' }} --models ${{ matrix.model }} ${{ github.head_ref || github.ref_name }}
- run: ./build-docker.sh ${{ matrix.model == 'T1B1' && '--skip-core' || '--skip-legacy' }} --models ${{ matrix.model }} --targets bootloader,firmware,prodtest ${{ github.head_ref || github.ref_name }}
- name: Show fingerprints
run: |
echo "model **${{ matrix.model }}** commit \`${{ github.sha }}\` (fingerprint, sha256)" >> $GITHUB_STEP_SUMMARY
rm -rf build/*-bitcoinonly/bootloader
for file in build/*/*/*.fingerprint; do
if [ -f "$file" ]; then
origfile="${file%.fingerprint}"
fingerprint=$(tr -d '\n' < $file)
echo "\`$fingerprint\` $origfile" >> $GITHUB_STEP_SUMMARY
sha256=$(sha256sum $file | head -c 64)
echo "\`$fingerprint\` \`$sha256\` $origfile" >> $GITHUB_STEP_SUMMARY
fi
done
cat $GITHUB_STEP_SUMMARY
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/core-hw.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
model: [T2T1, T2B1]
coins: [universal, btconly]
env:
TREZOR_MODEL: ${{ matrix.model == 'T2T1' && 'T' || 'R' }}
TREZOR_MODEL: ${{ matrix.model }}
TREZOR_PYTEST_SKIP_ALTCOINS: ${{ matrix.coins == 'btconly' && '1' || '0' }}
PYTEST_TIMEOUT: 1200
PYOPT: 0
Expand Down Expand Up @@ -74,7 +74,7 @@ jobs:
matrix:
model: [T2T1, T2B1]
env:
TREZOR_MODEL: ${{ matrix.model == 'T2T1' && 'T' || 'R' }}
TREZOR_MODEL: ${{ matrix.model }}
PYTEST_TIMEOUT: 1200
PYOPT: 0
DISABLE_OPTIGA: 1
Expand Down
16 changes: 8 additions & 8 deletions .github/workflows/core.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ jobs:
strategy:
fail-fast: false
matrix:
model: [T2T1, T3B1, T3T1, T3W1]
model: [T2B1, T2T1, T3B1, T3T1, T3W1]
coins: [universal, btconly]
type: ${{ fromJSON(github.event_name == 'schedule' && '["normal", "debuglink", "production"]' || '["normal", "debuglink"]') }}
include:
Expand All @@ -65,7 +65,7 @@ jobs:
- model: T3W1
type: production
env:
TREZOR_MODEL: ${{ matrix.model == 'T2T1' && 'T' || matrix.model == 'D001' && 'DISC1' || matrix.model }}
TREZOR_MODEL: ${{ matrix.model }}
BITCOIN_ONLY: ${{ matrix.coins == 'universal' && '0' || '1' }}
PYOPT: ${{ matrix.type == 'debuglink' && '0' || '1' }}
PRODUCTION: ${{ matrix.type == 'production' && '1' || '0' }}
Expand Down Expand Up @@ -116,7 +116,7 @@ jobs:
- type: normal
asan: asan
env:
TREZOR_MODEL: ${{ matrix.model == 'T2T1' && 'T' || matrix.model }}
TREZOR_MODEL: ${{ matrix.model }}
BITCOIN_ONLY: ${{ matrix.coins == 'universal' && '0' || '1' }}
PYOPT: ${{ matrix.type == 'debuglink' && '0' || '1' }}
ADDRESS_SANITIZER: ${{ matrix.asan == 'asan' && '1' || '0' }}
Expand Down Expand Up @@ -154,7 +154,7 @@ jobs:
- type: normal
asan: asan
env:
TREZOR_MODEL: ${{ matrix.model == 'T2T1' && 'T' || matrix.model }}
TREZOR_MODEL: ${{ matrix.model }}
BITCOIN_ONLY: ${{ matrix.coins == 'universal' && '0' || '1' }}
PYOPT: ${{ matrix.type == 'debuglink' && '0' || '1' }}
ADDRESS_SANITIZER: ${{ matrix.asan == 'asan' && '1' || '0' }}
Expand Down Expand Up @@ -186,7 +186,7 @@ jobs:
model: [T2T1, T3B1, T3T1, T3W1]
asan: ${{ fromJSON(needs.param.outputs.asan) }}
env:
TREZOR_MODEL: ${{ matrix.model == 'T2T1' && 'T' || matrix.model }}
TREZOR_MODEL: ${{ matrix.model }}
ADDRESS_SANITIZER: ${{ matrix.asan == 'asan' && '1' || '0' }}
LSAN_OPTIONS: "suppressions=../../asan_suppressions.txt"
steps:
Expand All @@ -209,7 +209,7 @@ jobs:
model: [T2T1, T3B1, T3T1, T3W1]
asan: ${{ fromJSON(needs.param.outputs.asan) }}
env:
TREZOR_MODEL: ${{ matrix.model == 'T2T1' && 'T' || matrix.model }}
TREZOR_MODEL: ${{ matrix.model }}
ADDRESS_SANITIZER: ${{ matrix.asan == 'asan' && '1' || '0' }}
RUSTC_BOOTSTRAP: ${{ matrix.asan == 'asan' && '1' || '0' }}
RUSTFLAGS: ${{ matrix.asan == 'asan' && '-Z sanitizer=address' || '' }}
Expand Down Expand Up @@ -262,7 +262,7 @@ jobs:
lang: ${{ fromJSON(needs.param.outputs.test_lang) }}
env:
TREZOR_PROFILING: ${{ matrix.asan == 'noasan' && '1' || '0' }}
TREZOR_MODEL: ${{ matrix.model == 'T2T1' && 'T' || matrix.model }}
TREZOR_MODEL: ${{ matrix.model }}
TREZOR_PYTEST_SKIP_ALTCOINS: ${{ matrix.coins == 'btconly' && '1' || '0' }}
ADDRESS_SANITIZER: ${{ matrix.asan == 'asan' && '1' || '0' }}
PYTEST_TIMEOUT: ${{ matrix.asan == 'asan' && 600 || 400 }}
Expand Down Expand Up @@ -451,7 +451,7 @@ jobs:
if: false # NOTE manual job, comment out to run
runs-on: ubuntu-latest
env:
TREZOR_MODEL: T
TREZOR_MODEL: T2T1
TREZOR_MEMPERF: 1
PYOPT: 0
PYTEST_TIMEOUT: 900
Expand Down
5 changes: 3 additions & 2 deletions build-docker.sh
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ function help_and_die() {
echo " --skip-legacy - do not build legacy"
echo " --repository path/to/repo - checkout the repository from the given path/url"
echo " --no-init - do not recreate docker environments"
echo " --models - comma-separated list of models. default: --models R,T"
echo " --models - comma-separated list of models. default: --models T2B1,T2T1,T3T1"
echo " --targets - comma-separated list of targets for core build. default: --targets boardloader,bootloader,firmware"
echo " --help"
echo
Expand All @@ -69,7 +69,7 @@ OPT_BUILD_LEGACY=1
OPT_BUILD_NORMAL=1
OPT_BUILD_BITCOINONLY=1
INIT=1
MODELS=(R T T3T1)
MODELS=(T2B1 T2T1 T3T1)
CORE_TARGETS=(boardloader bootloader firmware)

REPOSITORY="file:///local"
Expand Down Expand Up @@ -324,6 +324,7 @@ for BITCOIN_ONLY in ${VARIANTS_legacy[@]}; do

DIRSUFFIX=${BITCOIN_ONLY/1/-bitcoinonly}
DIRSUFFIX=${DIRSUFFIX/0/}
DIRSUFFIX="-T1B1${DIRSUFFIX}"

SCRIPT_NAME=".build_legacy_$BITCOIN_ONLY.sh"
cat <<EOF > "build/$SCRIPT_NAME"
Expand Down
10 changes: 5 additions & 5 deletions core/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ BITCOIN_ONLY ?= 0
BOOTLOADER_QA ?= 0
BOOTLOADER_DEVEL ?= 0
DISABLE_OPTIGA ?= 0
TREZOR_MODEL ?= T
TREZOR_MODEL ?= T2T1
TREZOR_MEMPERF ?= 0
ADDRESS_SANITIZER ?= 0
CMAKELISTS ?= 0
Expand All @@ -50,11 +50,11 @@ OPENOCD_INTERFACE ?= stlink
# OpenOCD transport default. Alternative: jtag
OPENOCD_TRANSPORT ?= hla_swd

ifeq ($(TREZOR_MODEL),$(filter $(TREZOR_MODEL),T))
ifeq ($(TREZOR_MODEL),$(filter $(TREZOR_MODEL),T2T1))
MCU = STM32F4
OPENOCD_TARGET = target/stm32f4x.cfg
LAYOUT_FEATURE = layout_bolt
else ifeq ($(TREZOR_MODEL),$(filter $(TREZOR_MODEL),R))
else ifeq ($(TREZOR_MODEL),$(filter $(TREZOR_MODEL),T2B1))
MCU = STM32F4
OPENOCD_TARGET = target/stm32f4x.cfg
LAYOUT_FEATURE = layout_samson
Expand All @@ -70,10 +70,10 @@ else ifeq ($(TREZOR_MODEL),$(filter $(TREZOR_MODEL),T3W1))
MCU = STM32U5
OPENOCD_TARGET = target/stm32u5x.cfg
LAYOUT_FEATURE = layout_bolt
else ifeq ($(TREZOR_MODEL),$(filter $(TREZOR_MODEL),DISC1))
else ifeq ($(TREZOR_MODEL),$(filter $(TREZOR_MODEL),D001))
MCU = STM32F4
OPENOCD_TARGET = target/stm32f4x.cfg
else ifeq ($(TREZOR_MODEL),$(filter $(TREZOR_MODEL),DISC2))
else ifeq ($(TREZOR_MODEL),$(filter $(TREZOR_MODEL),D002))
MCU = STM32U5
OPENOCD_TARGET = target/stm32u5x.cfg
else
Expand Down
7 changes: 3 additions & 4 deletions core/SConscript.boardloader
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@
import os
import tools, models

TREZOR_MODEL = ARGUMENTS.get('TREZOR_MODEL', 'T')
TREZOR_MODEL = ARGUMENTS.get('TREZOR_MODEL', 'T2T1')
CMAKELISTS = int(ARGUMENTS.get('CMAKELISTS', 0))
HW_REVISION = ARGUMENTS.get('HW_REVISION', None)
MODEL_IDENTIFIER = models.get_model_identifier(TREZOR_MODEL)

FEATURES_WANTED = ["sd_card"]

Expand Down Expand Up @@ -163,7 +162,7 @@ obj_program += env.Object(source=SOURCE_HAL)

linkerscript_gen = env.Command(
target='memory.ld',
source=[f'embed/models/{MODEL_IDENTIFIER}/memory.ld', env.get('ENV')['LINKER_SCRIPT'].format(target='boardloader')],
source=[f'embed/models/{TREZOR_MODEL}/memory.ld', env.get('ENV')['LINKER_SCRIPT'].format(target='boardloader')],
action='$CAT $SOURCES > $TARGET',
)

Expand All @@ -176,7 +175,7 @@ program_elf = env.Command(

env.Depends(program_elf, linkerscript_gen)

BINARY_NAME = f"build/boardloader/boardloader-{models.get_model_identifier(TREZOR_MODEL)}"
BINARY_NAME = f"build/boardloader/boardloader-{TREZOR_MODEL}"
BINARY_NAME += "-" + tools.get_version('embed/projects/boardloader/version.h')
BINARY_NAME += "-" + tools.get_git_revision_short_hash()
BINARY_NAME += "-dirty" if tools.get_git_modified() else ""
Expand Down
7 changes: 3 additions & 4 deletions core/SConscript.bootloader
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,11 @@ import os
import shlex
import tools, models, ui

TREZOR_MODEL = ARGUMENTS.get('TREZOR_MODEL', 'T')
TREZOR_MODEL = ARGUMENTS.get('TREZOR_MODEL', 'T2T1')
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)
MODEL_IDENTIFIER = models.get_model_identifier(TREZOR_MODEL)

FEATURES_WANTED = ["input", "rgb_led", "consumption_mask", "usb", "optiga", "dma2d"]

Expand Down Expand Up @@ -246,7 +245,7 @@ obj_program += env.Object(source=SOURCE_HAL)

linkerscript_gen = env.Command(
target='memory.ld',
source=[f'embed/models/{MODEL_IDENTIFIER}/memory.ld', env.get('ENV')['LINKER_SCRIPT'].format(target='bootloader')],
source=[f'embed/models/{TREZOR_MODEL}/memory.ld', env.get('ENV')['LINKER_SCRIPT'].format(target='bootloader')],
action='$CAT $SOURCES > $TARGET',
)

Expand All @@ -262,7 +261,7 @@ env.Depends(program_elf, rust)

SUFFIX = '_qa' if BOOTLOADER_QA else ''

BINARY_NAME = f"build/bootloader/bootloader-{models.get_model_identifier(TREZOR_MODEL)}{SUFFIX}"
BINARY_NAME = f"build/bootloader/bootloader-{TREZOR_MODEL}{SUFFIX}"
BINARY_NAME += "-" + tools.get_version('embed/projects/bootloader/version.h')
BINARY_NAME += "-" + tools.get_git_revision_short_hash()
BINARY_NAME += "-dirty" if tools.get_git_modified() else ""
Expand Down
7 changes: 3 additions & 4 deletions core/SConscript.bootloader_ci
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@
import os
import tools, models, ui

TREZOR_MODEL = ARGUMENTS.get('TREZOR_MODEL', 'T')
TREZOR_MODEL = ARGUMENTS.get('TREZOR_MODEL', 'T2T1')
CMAKELISTS = int(ARGUMENTS.get('CMAKELISTS', 0))
HW_REVISION = ARGUMENTS.get('HW_REVISION', None)
MODEL_IDENTIFIER = models.get_model_identifier(TREZOR_MODEL)

FEATURES_WANTED = ["input", "rgb_led", "consumption_mask", "usb", "optiga"]

Expand Down Expand Up @@ -190,7 +189,7 @@ obj_program += env.Object(source=SOURCE_HAL)

linkerscript_gen = env.Command(
target='memory.ld',
source=[f'embed/models/{MODEL_IDENTIFIER}/memory.ld', env.get('ENV')['LINKER_SCRIPT'].format(target='bootloader')],
source=[f'embed/models/{TREZOR_MODEL}/memory.ld', env.get('ENV')['LINKER_SCRIPT'].format(target='bootloader')],
action='$CAT $SOURCES > $TARGET',
)

Expand All @@ -203,7 +202,7 @@ program_elf = env.Command(

env.Depends(program_elf, linkerscript_gen)

BINARY_NAME = f"build/bootloader_ci/bootloader_ci-{models.get_model_identifier(TREZOR_MODEL)}"
BINARY_NAME = f"build/bootloader_ci/bootloader_ci-{TREZOR_MODEL}"
BINARY_NAME += "-" + tools.get_version('embed/projects/bootloader_ci/version.h')
BINARY_NAME += "-" + tools.get_git_revision_short_hash()
BINARY_NAME += "-dirty" if tools.get_git_modified() else ""
Expand Down
5 changes: 2 additions & 3 deletions core/SConscript.bootloader_emu
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import os
import shlex
import tools, models, ui

TREZOR_MODEL = ARGUMENTS.get('TREZOR_MODEL', 'T')
TREZOR_MODEL = ARGUMENTS.get('TREZOR_MODEL', 'T2T1')
CMAKELISTS = int(ARGUMENTS.get('CMAKELISTS', 0))
HW_REVISION = 'emulator'

Expand Down Expand Up @@ -151,8 +151,7 @@ env.Replace(
PYTHON='python',
MAKECMAKELISTS='$PYTHON tools/make_cmakelists.py', )

MODEL_IDENTIFIER = models.get_model_identifier(TREZOR_MODEL)
MODEL_AS_NUMBER = str(models.get_hw_model_as_number(MODEL_IDENTIFIER))
MODEL_AS_NUMBER = str(models.get_hw_model_as_number(TREZOR_MODEL))

ALLPATHS = ['embed/rust',
'embed/projects/bootloader',
Expand Down
24 changes: 11 additions & 13 deletions core/SConscript.firmware
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,13 @@ PRODUCTION = ARGUMENTS.get('PRODUCTION', '0') == '1'
BOOTLOADER_QA = ARGUMENTS.get('BOOTLOADER_QA', '0') == '1'
BOOTLOADER_DEVEL = ARGUMENTS.get('BOOTLOADER_DEVEL', '0') == '1'
EVERYTHING = BITCOIN_ONLY != '1'
TREZOR_MODEL = ARGUMENTS.get('TREZOR_MODEL', 'T')
TREZOR_MODEL = ARGUMENTS.get('TREZOR_MODEL', 'T2T1')
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)
SCM_REVISION = ARGUMENTS.get('SCM_REVISION', None)
THP = ARGUMENTS.get('THP', '0') == '1' # Trezor-Host Protocol
MODEL_IDENTIFIER = models.get_model_identifier(TREZOR_MODEL)
BENCHMARK = ARGUMENTS.get('BENCHMARK', '0') == '1'
DISABLE_ANIMATION = ARGUMENTS.get('TREZOR_DISABLE_ANIMATION', '0') == '1'

Expand Down Expand Up @@ -79,8 +78,8 @@ CPPDEFINES_MOD += [
('USE_ETHEREUM', '1' if EVERYTHING else '0'),
('USE_MONERO', '1' if EVERYTHING else '0'),
('USE_CARDANO', '1' if EVERYTHING else '0'),
('USE_NEM', '1' if (EVERYTHING and TREZOR_MODEL == "T") else '0'),
('USE_EOS', '1' if (EVERYTHING and TREZOR_MODEL == "T") else '0'),
('USE_NEM', '1' if (EVERYTHING and TREZOR_MODEL == "T2T1") else '0'),
('USE_EOS', '1' if (EVERYTHING and TREZOR_MODEL == "T2T1") else '0'),
('DISABLE_ANIMATION', '1' if DISABLE_ANIMATION else '0'),
]
SOURCE_MOD += [
Expand Down Expand Up @@ -647,7 +646,7 @@ if FROZEN:
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/cardano/*/*.py'))
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/Cardano*.py'))

if TREZOR_MODEL == "T":
if TREZOR_MODEL == "T2T1":
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/eos/*.py'))
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/eos/*/*.py'))
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/Eos*.py'))
Expand All @@ -661,7 +660,7 @@ if FROZEN:
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/DebugMonero*.py'))
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/Monero*.py'))

if TREZOR_MODEL == "T":
if TREZOR_MODEL == "T2T1":
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/nem/*.py'))
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/nem/*/*.py'))
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/enums/NEM*.py'))
Expand All @@ -684,7 +683,7 @@ if FROZEN:

SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/webauthn/*.py'))

if TREZOR_MODEL == "T":
if TREZOR_MODEL == "T2T1":
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/bitcoin/sign_tx/decred.py'))
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/bitcoin/sign_tx/bitcoinlike.py'))
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'apps/bitcoin/sign_tx/zcash_v4.py'))
Expand Down Expand Up @@ -807,8 +806,7 @@ env.Append(LINKFLAGS=f' -L{RUST_LIBDIR}')
env.Append(LINKFLAGS=f' -l{RUST_LIB}')


MODEL_IDENTIFIER = models.get_model_identifier(TREZOR_MODEL)
BOOTLOADER_SUFFIX = MODEL_IDENTIFIER
BOOTLOADER_SUFFIX = TREZOR_MODEL
if BOOTLOADER_QA or BOOTLOADER_DEVEL:
BOOTLOADER_SUFFIX += '_qa'

Expand All @@ -818,14 +816,14 @@ if BOOTLOADER_QA or BOOTLOADER_DEVEL:
elif not PRODUCTION:
vendor = "unsafe_signed_prod"
else:
if TREZOR_MODEL in ('T',):
if TREZOR_MODEL in ('T2T1',):
vendor = "satoshilabs_signed_prod"
elif BITCOIN_ONLY == '1':
vendor = "trezor_btconly_signed_prod"
else:
vendor = "trezor_signed_prod"

VENDORHEADER = f'embed/models/{MODEL_IDENTIFIER}/vendorheader/vendorheader_{vendor}.bin'
VENDORHEADER = f'embed/models/{TREZOR_MODEL}/vendorheader/vendorheader_{vendor}.bin'

tools.embed_raw_binary(
obj_program,
Expand All @@ -849,7 +847,7 @@ env.Depends(obj_program, qstr_generated)

linkerscript_gen = env.Command(
target='memory.ld',
source=[f'embed/models/{MODEL_IDENTIFIER}/memory.ld', env.get('ENV')['LINKER_SCRIPT'].format(target='firmware')],
source=[f'embed/models/{TREZOR_MODEL}/memory.ld', env.get('ENV')['LINKER_SCRIPT'].format(target='firmware')],
action='$CAT $SOURCES > $TARGET',
)

Expand All @@ -866,7 +864,7 @@ if CMAKELISTS != 0:
env.Depends(program_elf, cmake_gen)
env.Depends(program_elf, rust)

BINARY_NAME = f"build/firmware/firmware-{MODEL_IDENTIFIER}"
BINARY_NAME = f"build/firmware/firmware-{TREZOR_MODEL}"
if not EVERYTHING:
BINARY_NAME += "-btconly"
BINARY_NAME += "-" + tools.get_version('embed/projects/firmware/version.h')
Expand Down
Loading

0 comments on commit 8b66951

Please sign in to comment.