From 6e6ff78ce07ba5292de95cbf07e613c27df25898 Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Wed, 1 May 2019 13:39:44 +0200 Subject: [PATCH] core: re-enable frozen modules in the emulator build --- core/Makefile | 3 +++ core/SConscript.firmware | 32 ++++++++++++------------ core/SConscript.unix | 45 ++++++++++++++++++++++++++-------- core/embed/unix/mpconfigport.h | 2 +- tools/help.awk | 2 +- 5 files changed, 57 insertions(+), 27 deletions(-) diff --git a/core/Makefile b/core/Makefile index c684a6eb3..08b172287 100644 --- a/core/Makefile +++ b/core/Makefile @@ -108,6 +108,9 @@ build_unix: res ## build unix port build_unix_noui: res ## build unix port without UI support $(SCONS) CFLAGS="$(CFLAGS)" $(UNIX_BUILD_DIR)/micropython $(UNIX_PORT_OPTS) TREZOR_EMULATOR_NOUI=1 +build_unix_noui_frozen: res build_cross ## build unix port without UI support with frozen modules + $(SCONS) CFLAGS="$(CFLAGS)" $(UNIX_BUILD_DIR)/micropython $(UNIX_PORT_OPTS) TREZOR_EMULATOR_NOUI=1 TREZOR_FROZEN=1 + build_unix_raspi: res ## build unix port for Raspberry Pi $(SCONS) CFLAGS="$(CFLAGS)" $(UNIX_BUILD_DIR)/micropython $(UNIX_PORT_OPTS) TREZOR_EMULATOR_RASPI=1 diff --git a/core/SConscript.firmware b/core/SConscript.firmware index 9b9806451..2771a82d7 100644 --- a/core/SConscript.firmware +++ b/core/SConscript.firmware @@ -411,24 +411,25 @@ env.Ignore(qstr_collected, qstr_generated) # Frozen modules # -if env.get('TREZOR_MODEL') == '1': - SOURCE_PY_DIR = 'src1/' -else: - SOURCE_PY_DIR = 'src/' +if True: + if env.get('TREZOR_MODEL') == '1': + SOURCE_PY_DIR = 'src1/' + else: + SOURCE_PY_DIR = 'src/' -# TODO: recursive Glob -SOURCE_PY = Glob(SOURCE_PY_DIR + '*.py') -SOURCE_PY.extend(Glob(SOURCE_PY_DIR + '*/*.py')) -SOURCE_PY.extend(Glob(SOURCE_PY_DIR + '*/*/*.py')) -SOURCE_PY.extend(Glob(SOURCE_PY_DIR + '*/*/*/*.py')) -SOURCE_PY.extend(Glob(SOURCE_PY_DIR + '*/*/*/*/*.py')) + # TODO: recursive Glob + SOURCE_PY = Glob(SOURCE_PY_DIR + '*.py') + SOURCE_PY.extend(Glob(SOURCE_PY_DIR + '*/*.py')) + SOURCE_PY.extend(Glob(SOURCE_PY_DIR + '*/*/*.py')) + SOURCE_PY.extend(Glob(SOURCE_PY_DIR + '*/*/*/*.py')) + SOURCE_PY.extend(Glob(SOURCE_PY_DIR + '*/*/*/*/*.py')) -source_mpy = env.FrozenModule(source=SOURCE_PY, source_dir=SOURCE_PY_DIR) + source_mpy = env.FrozenModule(source=SOURCE_PY, source_dir=SOURCE_PY_DIR) -source_mpyc = env.FrozenCFile( - target='frozen_mpy.c', source=source_mpy, qstr_header=qstr_preprocessed) + source_mpyc = env.FrozenCFile( + target='frozen_mpy.c', source=source_mpy, qstr_header=qstr_preprocessed) -env.Depends(source_mpyc, qstr_generated) + env.Depends(source_mpyc, qstr_generated) # # static secp256-zkp ecmult context @@ -463,7 +464,8 @@ obj_program.extend(env.Object(source=SOURCE_MICROPYTHON)) obj_program.extend(env.Object(source=SOURCE_MICROPYTHON_SPEED, COPT='-O3')) obj_program.extend(env.Object(source=SOURCE_STMHAL)) obj_program.extend(env.Object(source=SOURCE_TREZORHAL)) -obj_program.extend(env.Object(source=source_mpyc)) +if True: + obj_program.extend(env.Object(source=source_mpyc)) VENDORHEADER = 'embed/vendorheader/vendorheader_' + ('unsafe_signed_prod.bin' if ARGUMENTS.get('PRODUCTION', '0') == '0' else 'satoshilabs_signed_prod.bin') diff --git a/core/SConscript.unix b/core/SConscript.unix index b5f53d0c5..af305ba53 100644 --- a/core/SConscript.unix +++ b/core/SConscript.unix @@ -5,9 +5,8 @@ import os CCFLAGS_MOD = '' CPPPATH_MOD = [] CPPDEFINES_MOD = [] -SOURCE_MOD_SECP256K1_ZKP = [] SOURCE_MOD = [] -LIBS_MOD = [] +SOURCE_MOD_SECP256K1_ZKP = [] # modtrezorconfig CPPPATH_MOD += [ @@ -73,6 +72,7 @@ SOURCE_MOD += [ 'vendor/trezor-crypto/hasher.c', 'vendor/trezor-crypto/hmac.c', 'vendor/trezor-crypto/memzero.c', + 'vendor/trezor-crypto/nem.c', 'vendor/trezor-crypto/nist256p1.c', 'vendor/trezor-crypto/pbkdf2.c', 'vendor/trezor-crypto/rand.c', @@ -80,12 +80,11 @@ SOURCE_MOD += [ 'vendor/trezor-crypto/secp256k1.c', 'vendor/trezor-crypto/sha2.c', 'vendor/trezor-crypto/sha3.c', - 'vendor/trezor-crypto/nem.c', ] # libsecp256k1-zkp CPPPATH_MOD += [ - 'vendor/secp256k1-zkp/', + 'vendor/secp256k1-zkp', 'vendor/secp256k1-zkp/src', 'vendor/secp256k1-zkp/include', ] @@ -314,12 +313,12 @@ env.Replace( env.Replace( COPT=env.get('OPTIMIZE', env.get('ENV').get('OPTIMIZE', '-Os')), - CCFLAGS='$COPT ' + CCFLAGS='$COPT -DMPZ_DIG_SIZE=16 ' '-g3 ' '-std=gnu99 -Wall -Werror -Wuninitialized ' '-fdata-sections -ffunction-sections ' + CCFLAGS_MOD, CCFLAGS_QSTR='-DNO_QSTR -DN_X64 -DN_X86 -DN_THUMB', - LIBS=['m'] + LIBS_MOD, + LIBS=['m'], CPPPATH=[ '.', 'embed/unix', @@ -373,6 +372,30 @@ qstr_generated = env.GenerateQstrDefs( env.Ignore(qstr_collected, qstr_generated) +# +# Frozen modules +# + +if ARGUMENTS.get('TREZOR_FROZEN', 0): + if env.get('TREZOR_MODEL') == '1': + SOURCE_PY_DIR = 'src1/' + else: + SOURCE_PY_DIR = 'src/' + + # TODO: recursive Glob + SOURCE_PY = Glob(SOURCE_PY_DIR + '*.py') + SOURCE_PY.extend(Glob(SOURCE_PY_DIR + '*/*.py')) + SOURCE_PY.extend(Glob(SOURCE_PY_DIR + '*/*/*.py')) + SOURCE_PY.extend(Glob(SOURCE_PY_DIR + '*/*/*/*.py')) + SOURCE_PY.extend(Glob(SOURCE_PY_DIR + '*/*/*/*/*.py')) + + source_mpy = env.FrozenModule(source=SOURCE_PY, source_dir=SOURCE_PY_DIR) + + source_mpyc = env.FrozenCFile( + target='frozen_mpy.c', source=source_mpy, qstr_header=qstr_preprocessed) + + env.Depends(source_mpyc, qstr_generated) + # # static secp256-zkp ecmult context # @@ -399,10 +422,12 @@ secp256k1_zkp_ecmult_static_context = host_env.Command( # obj_program = [] -obj_program += env.Object(source=SOURCE_MOD) -obj_program += env.Object(source=SOURCE_MOD_SECP256K1_ZKP, CCFLAGS='$CCFLAGS -Wno-unused-function') -obj_program += env.Object(source=SOURCE_MICROPYTHON) -obj_program += env.Object(source=SOURCE_UNIX) +obj_program.extend(env.Object(source=SOURCE_MOD)) +obj_program.extend(env.Object(source=SOURCE_MOD_SECP256K1_ZKP, CCFLAGS='$CCFLAGS -Wno-unused-function')) +obj_program.extend(env.Object(source=SOURCE_MICROPYTHON)) +obj_program.extend(env.Object(source=SOURCE_UNIX)) +if ARGUMENTS.get('TREZOR_FROZEN', 0): + obj_program.extend(env.Object(source=source_mpyc)) env.Depends(obj_program, qstr_generated) env.Depends(obj_program, secp256k1_zkp_ecmult_static_context) diff --git a/core/embed/unix/mpconfigport.h b/core/embed/unix/mpconfigport.h index 6f618d2b7..3ea011c1d 100644 --- a/core/embed/unix/mpconfigport.h +++ b/core/embed/unix/mpconfigport.h @@ -70,7 +70,7 @@ #define MICROPY_STREAMS_POSIX_API (1) #define MICROPY_OPT_COMPUTED_GOTO (1) #ifndef MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE -#define MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE (1) +#define MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE (0) #endif #define MICROPY_CAN_OVERRIDE_BUILTINS (0) #define MICROPY_PY_FUNCTION_ATTRS (1) diff --git a/tools/help.awk b/tools/help.awk index fbdd4f7b3..7233cf935 100644 --- a/tools/help.awk +++ b/tools/help.awk @@ -7,7 +7,7 @@ BEGIN { COLOR_RESET = "\033[0m" } /^[a-zA-Z0-9_-]+:.*?## / { printf COLOR_DARKGREEN - printf " make %-20s", $1 + printf " make %-22s", $1 printf COLOR_RESET printf " %s\n", $2 } /^##(.*)/ {