a8e7c03171
Currently, frozen packages are not supported, but eventually they should be, so make sure to store complete directory hierarchy.
57 lines
1.1 KiB
Python
Executable File
57 lines
1.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
#
|
|
# Create frozen modules structure for MicroPython.
|
|
#
|
|
# Usage:
|
|
#
|
|
# Have a directory with modules to be frozen (only modules, not packages
|
|
# supported so far):
|
|
#
|
|
# frozen/foo.py
|
|
# frozen/bar.py
|
|
#
|
|
# Run script, passing path to the directory above:
|
|
#
|
|
# ./make-frozen.py frozen > frozen.c
|
|
#
|
|
# Include frozen.c in your build, having defined MICROPY_MODULE_FROZEN in
|
|
# config.
|
|
#
|
|
import sys
|
|
import os
|
|
|
|
|
|
def module_name(f):
|
|
return f[:-len(".py")]
|
|
|
|
modules = []
|
|
|
|
root = sys.argv[1]
|
|
root_len = len(root)
|
|
if root[-1] != "/":
|
|
root_len += 1
|
|
|
|
for dirpath, dirnames, filenames in os.walk(root):
|
|
for f in filenames:
|
|
fullpath = dirpath + "/" + f
|
|
st = os.stat(fullpath)
|
|
modules.append((fullpath[root_len:], st))
|
|
|
|
print("#include <stdint.h>")
|
|
print("const uint16_t mp_frozen_sizes[] = {")
|
|
|
|
for f, st in modules:
|
|
print("%d," % st.st_size)
|
|
|
|
print("0};")
|
|
|
|
print("const char mp_frozen_content[] = {")
|
|
for f, st in modules:
|
|
m = module_name(f)
|
|
print('"%s\\0"' % m)
|
|
data = open(sys.argv[1] + "/" + f).read()
|
|
data = repr(data)[1:-1]
|
|
data = data.replace('"', '\\"')
|
|
print('"%s"' % data)
|
|
print("};")
|