mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-30 01:58:11 +00:00
120 lines
3.2 KiB
Bash
Executable File
120 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
cd $(dirname $0)/..
|
|
|
|
PROTOB=common/protob
|
|
|
|
CORE_PROTOBUF_SOURCES="\
|
|
$PROTOB/messages.proto \
|
|
$PROTOB/messages-binance.proto \
|
|
$PROTOB/messages-bitcoin.proto \
|
|
$PROTOB/messages-cardano.proto \
|
|
$PROTOB/messages-common.proto \
|
|
$PROTOB/messages-crypto.proto \
|
|
$PROTOB/messages-debug.proto \
|
|
$PROTOB/messages-eos.proto \
|
|
$PROTOB/messages-ethereum.proto \
|
|
$PROTOB/messages-lisk.proto \
|
|
$PROTOB/messages-management.proto \
|
|
$PROTOB/messages-monero.proto \
|
|
$PROTOB/messages-nem.proto \
|
|
$PROTOB/messages-ripple.proto \
|
|
$PROTOB/messages-stellar.proto \
|
|
$PROTOB/messages-tezos.proto \
|
|
$PROTOB/messages-webauthn.proto \
|
|
"
|
|
|
|
PYTHON_PROTOBUF_SOURCES=$PROTOB/*.proto
|
|
|
|
CORE_MESSAGES_IGNORE="\
|
|
CosiCommit \
|
|
CosiCommitment \
|
|
CosiSign \
|
|
CosiSignature \
|
|
DebugLinkFlashErase \
|
|
DebugLinkLog \
|
|
DebugLinkMemory \
|
|
DebugLinkMemoryRead \
|
|
DebugLinkMemoryWrite \
|
|
DebugLinkStop \
|
|
NEMDecryptMessage \
|
|
NEMDecryptedMessage \
|
|
PinMatrixAck \
|
|
PinMatrixRequest \
|
|
PinMatrixRequestType \
|
|
WordAck \
|
|
WordRequest \
|
|
WordRequestType \
|
|
"
|
|
|
|
PYTHON_MESSAGES_IGNORE=""
|
|
|
|
RETURN=0
|
|
|
|
do_rebuild() {
|
|
# rebuild protobuf in specified directory
|
|
local DESTDIR="$1"
|
|
shift
|
|
local SOURCES="$1"
|
|
shift
|
|
local IGNORE="$1"
|
|
shift
|
|
local APPLY_BITCOIN_ONLY="$1"
|
|
shift
|
|
|
|
mkdir -p "$DESTDIR"
|
|
rm -f "$DESTDIR"/[A-Z]*.py
|
|
|
|
# note $SOURCES is unquoted - we want wildcard expansion and multiple args
|
|
$PROTOB/pb2py "$@" -o "$DESTDIR" $SOURCES
|
|
|
|
# TODO: make this less hackish
|
|
# maybe introduce attribute "altcoin" in protobuf?
|
|
if [ "$APPLY_BITCOIN_ONLY" == "TRUE" ]; then
|
|
sed -i "3ifrom trezor import utils\n" "$DESTDIR"/Capability.py
|
|
sed -i "3ifrom trezor import utils\n" "$DESTDIR"/MessageType.py
|
|
sed -i "/^EthereumGetPublicKey/iif not utils.BITCOIN_ONLY:" "$DESTDIR"/MessageType.py
|
|
for altcoin in Ethereum NEM Lisk Tezos Stellar Cardano Ripple Monero DebugMonero Eos Binance WebAuthn; do
|
|
sed -i "s:^$altcoin: $altcoin:" "$DESTDIR"/Capability.py
|
|
sed -i "s:^$altcoin: $altcoin:" "$DESTDIR"/MessageType.py
|
|
done
|
|
sed -i "/^Bitcoin_like/iif not utils.BITCOIN_ONLY:" "$DESTDIR"/Capability.py
|
|
sed -i "/^EOS/iif not utils.BITCOIN_ONLY:" "$DESTDIR"/Capability.py
|
|
for feature in Bitcoin_like EOS U2F; do
|
|
sed -i "s:^$feature: $feature:" "$DESTDIR"/Capability.py
|
|
done
|
|
fi
|
|
# ENDTODO
|
|
|
|
# delete unused messages
|
|
for F in $IGNORE; do
|
|
rm -f "$DESTDIR"/"$F".py
|
|
done
|
|
}
|
|
|
|
do_check() {
|
|
# rebuild protobuf in tmpdir and check result against specified directory
|
|
local TMPDIR=$(mktemp -d proto-check.XXXXXX)
|
|
local DESTDIR="$1"
|
|
shift
|
|
|
|
cp -rT "$DESTDIR" "$TMPDIR"
|
|
do_rebuild "$TMPDIR" "$@"
|
|
DIFF=$(diff -ur "$DESTDIR" "$TMPDIR")
|
|
rm -r "$TMPDIR"
|
|
if [ -n "$DIFF" ]; then
|
|
echo "$DIFF"
|
|
RETURN=1
|
|
fi
|
|
}
|
|
|
|
if [ "$1" == "--check" ]; then
|
|
func=do_check
|
|
else
|
|
func=do_rebuild
|
|
fi
|
|
|
|
$func core/src/trezor/messages "$CORE_PROTOBUF_SOURCES" "$CORE_MESSAGES_IGNORE" TRUE --no-init-py
|
|
$func python/src/trezorlib/messages "$PYTHON_PROTOBUF_SOURCES" "$PYTHON_MESSAGES_IGNORE" FALSE -P ..protobuf
|
|
|
|
exit $RETURN
|