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/core/site_scons/site_tools/micropython/__init__.py

47 lines
1.6 KiB

import SCons.Builder
def generate(env):
env.SetDefault(
QSTRCOL='site_scons/site_tools/micropython/qstrdefs.py', )
env['BUILDERS']['CollectQstr'] = SCons.Builder.Builder(
action='$CC -E $CCFLAGS_QSTR $CFLAGS $CCFLAGS $_CCCOMCOM $SOURCES'
' | $PYTHON $QSTRCOL > $TARGET')
env['BUILDERS']['PreprocessQstr'] = SCons.Builder.Builder(
action="cat $SOURCES"
" | $SED 's/^Q(.*)/\"&\"/'"
" | $CC -E $CFLAGS $CCFLAGS $_CCCOMCOM -"
" | $SED 's/^\"\\(Q(.*)\\)\"/\\1/' > $TARGET", )
env['BUILDERS']['GenerateQstrDefs'] = SCons.Builder.Builder(
action='$MAKEQSTRDATA $SOURCE > $TARGET', )
def generate_frozen_module(source, target, env, for_signature):
target = str(target[0])
source = str(source[0])
source_name = source.replace(env['source_dir'], '')
# replace "utils.BITCOIN_ONLY" with literal constant (True/False)
# so the compiler can optimize out the things we don't want
btc_only = env['bitcoin_only'] == '1'
interim = "%s.i" % target[:-4] # replace .mpy with .i
sed_scripts = " ".join([
f"-e 's/utils\.BITCOIN_ONLY/{btc_only}/g'",
"-e 's/if TYPE_CHECKING/if False/'",
])
return f'$SED {sed_scripts} {source} > {interim} && $MPY_CROSS -o {target} -s {source_name} {interim}'
env['BUILDERS']['FrozenModule'] = SCons.Builder.Builder(
generator=generate_frozen_module,
suffix='.mpy',
single_source=True, )
env['BUILDERS']['FrozenCFile'] = SCons.Builder.Builder(
action='$MPY_TOOL -f -q $qstr_header $SOURCES > $TARGET', )
def exists(env):
return True