summaryrefslogtreecommitdiff
path: root/tools/mpy-tool.py
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2017-01-05 15:52:52 +1100
committerDamien George <damien.p.george@gmail.com>2017-01-05 15:52:52 +1100
commit98458a46ec9c34fa59dbfa7c9189b7e181e5e7a3 (patch)
treeed2a4b85cfae34b20d612e56d83be1b6e4131acb /tools/mpy-tool.py
parent343b4189b0b2a61d4db4e6ca2c6ddf82150d3b6d (diff)
tools/mpy-tool.py: Add support for OPT_CACHE_MAP_LOOKUP_IN_BYTECODE.
With caching of map lookups in the bytecode, frozen bytecode can still work but must be stored in RAM, not ROM. This patch allows mpy-tool.py to generate code that works with this optimisation, but it's not recommended to use it on embedded targets (because of lack of RAM).
Diffstat (limited to 'tools/mpy-tool.py')
-rwxr-xr-xtools/mpy-tool.py9
1 files changed, 6 insertions, 3 deletions
diff --git a/tools/mpy-tool.py b/tools/mpy-tool.py
index 2bb9fc367..ce373a4f5 100755
--- a/tools/mpy-tool.py
+++ b/tools/mpy-tool.py
@@ -258,7 +258,10 @@ class RawCode:
# generate bytecode data
print()
print('// frozen bytecode for file %s, scope %s%s' % (self.source_file.str, parent_name, self.simple_name.str))
- print('STATIC const byte bytecode_data_%s[%u] = {' % (self.escaped_name, len(self.bytecode)))
+ print('STATIC ', end='')
+ if not config.MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE:
+ print('const ', end='')
+ print('byte bytecode_data_%s[%u] = {' % (self.escaped_name, len(self.bytecode)))
print(' ', end='')
for i in range(self.ip2):
print(' 0x%02x,' % self.bytecode[i], end='')
@@ -463,8 +466,8 @@ def freeze_mpy(base_qstrs, raw_codes):
print('#include "py/emitglue.h"')
print()
- print('#if MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE')
- print('#error "MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE not supported with frozen mpy files"')
+ print('#if MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE != %u' % config.MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE)
+ print('#error "incompatible MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE"')
print('#endif')
print()