You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
trezor-firmware/build.sh

77 lines
2.2 KiB

#!/bin/bash
set -e
IMAGE=trezor-mcu-build
BOOTLOADER_TAG=${1:-master}
FIRMWARE_TAG=${2:-master}
REPOSITORY=${3:-trezor}
if [ "$REPOSITORY" = "local" ]; then
REPOSITORY=file:///local/
else
REPOSITORY=https://github.com/$REPOSITORY/trezor-mcu.git
fi
BOOTLOADER_BINFILE=build/bootloader-$BOOTLOADER_TAG.bin
BOOTLOADER_ELFFILE=build/bootloader-$BOOTLOADER_TAG.elf
FIRMWARE_BINFILE=build/trezor-$FIRMWARE_TAG.bin
FIRMWARE_ELFFILE=build/trezor-$FIRMWARE_TAG.elf
docker build -t $IMAGE .
echo
echo "STARTING BUILD:"
echo
echo "Building bootloader '$BOOTLOADER_TAG' + firmware '$FIRMWARE_TAG' from repo: $REPOSITORY"
echo
docker run -i -t -v $(pwd):/local -v $(pwd)/build:/build:z $IMAGE /bin/sh -c "\
cd /tmp && \
git clone $REPOSITORY trezor-mcu-bl && \
cd trezor-mcu-bl && \
git checkout $BOOTLOADER_TAG && \
git submodule update --init --recursive && \
make -C vendor/libopencm3 && \
make && \
make -C bootloader align && \
cp bootloader/bootloader.bin /$BOOTLOADER_BINFILE && \
cp bootloader/bootloader.elf /$BOOTLOADER_ELFFILE && \
cd /tmp && \
git clone $REPOSITORY trezor-mcu-fw && \
cd trezor-mcu-fw && \
git checkout $FIRMWARE_TAG && \
git submodule update --init --recursive && \
make -C vendor/libopencm3 && \
make -C vendor/nanopb/generator/proto && \
make -C firmware/protob && \
make && \
cp /tmp/trezor-mcu-bl/bootloader/bootloader.bin bootloader/bootloader.bin
make -C firmware sign && \
cp firmware/trezor.bin /$FIRMWARE_BINFILE && \
cp firmware/trezor.elf /$FIRMWARE_ELFFILE
"
echo
echo "FINISHED BUILD"
echo
/usr/bin/env python -c "
from __future__ import print_function
import hashlib
import sys
for arg in sys.argv[1:]:
(fn, fprint_start, hashing, max_size) = arg.split(':')
fprint_start = int(fprint_start)
max_size = int(max_size)
data = open(fn, 'rb').read()
if hashing == 'd':
fprint = hashlib.sha256(hashlib.sha256(data[fprint_start:]).digest()).hexdigest()
else:
fprint = hashlib.sha256(data[fprint_start:]).hexdigest()
print('Filename :', fn)
print('Fingerprint :', fprint)
print('Size : %d bytes (out of %d maximum)' % (len(data), max_size))
" $BOOTLOADER_BINFILE:0:d:32768 $FIRMWARE_BINFILE:256:s:491520