From f9448ddc2c49d7cdaf7dee8ed5e88837e8964f05 Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
Date: Sun, 31 Jan 2016 22:16:41 +0000
Subject: [PATCH] minimal: Add example of frozen persistent bytecode (.mpy
 file).

frozentest.py is frozen into the binary as frozen bytecode.  The .mpy
file is included so that there is no dependency on the cross compiler.
---
 minimal/Makefile       |   5 +++++
 minimal/frozentest.mpy | Bin 0 -> 255 bytes
 minimal/frozentest.py  |   7 +++++++
 minimal/mpconfigport.h |   3 ++-
 4 files changed, 14 insertions(+), 1 deletion(-)
 create mode 100644 minimal/frozentest.mpy
 create mode 100644 minimal/frozentest.py

diff --git a/minimal/Makefile b/minimal/Makefile
index 3206a2121..457d63e31 100644
--- a/minimal/Makefile
+++ b/minimal/Makefile
@@ -50,6 +50,7 @@ SRC_C = \
 	lib/utils/pyexec.c \
 	lib/libc/string0.c \
 	lib/mp-readline/readline.c \
+	$(BUILD)/_frozen_mpy.c \
 
 OBJ = $(PY_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
 
@@ -59,6 +60,10 @@ else
 all: $(BUILD)/firmware.elf
 endif
 
+$(BUILD)/_frozen_mpy.c: frozentest.mpy
+	$(ECHO) "MISC freezing bytecode"
+	$(Q)../tools/mpy-tool.py -f -q $(BUILD)/genhdr/qstrdefs.preprocessed.h -mlongint-impl=none $^ > $@
+
 $(BUILD)/firmware.elf: $(OBJ)
 	$(ECHO) "LINK $@"
 	$(Q)$(LD) $(LDFLAGS) -o $@ $^ $(LIBS)
diff --git a/minimal/frozentest.mpy b/minimal/frozentest.mpy
new file mode 100644
index 0000000000000000000000000000000000000000..c8345b1910611e890fde2e3058f3c41cf2c19970
GIT binary patch
literal 255
zcmeZeV3LnvW&i=+Ck($Cv@|p{v^5wQ{>!v8i2Y$mVKkCyXAp<cj8HxkgcjNLewJto
zqfvt?e}jR_Uj~_W2ARJgwT&+gT0WS)t~U~l=CH}lPbtkwwc|}I%CAbzD@iRb(JQEA
zEhx&&D`74TfU+QbWRfux!eh*2W++xlRLIHCOIIi^Day=CS18FyEK$fTR>;dQQOL|I
zNiE7tO(|AOM3K%&ELJGZ%S_HsNmV$v@!Y0!n-!8X5{rtHxRWYNQi~M~jf_ng0l6qq
A_W%F@

literal 0
HcmV?d00001

diff --git a/minimal/frozentest.py b/minimal/frozentest.py
new file mode 100644
index 000000000..0f99b7429
--- /dev/null
+++ b/minimal/frozentest.py
@@ -0,0 +1,7 @@
+print('uPy')
+print('a long string that is not interned')
+print('a string that has unicode αβγ chars')
+print(b'bytes 1234\x01')
+print(123456789)
+for i in range(4):
+    print(i)
diff --git a/minimal/mpconfigport.h b/minimal/mpconfigport.h
index 95e216b12..c8f983865 100644
--- a/minimal/mpconfigport.h
+++ b/minimal/mpconfigport.h
@@ -3,6 +3,7 @@
 // options to control how Micro Python is built
 
 #define MICROPY_QSTR_BYTES_IN_HASH  (1)
+#define MICROPY_QSTR_EXTRA_POOL     mp_qstr_frozen_const_pool
 #define MICROPY_ALLOC_PATH_MAX      (256)
 #define MICROPY_ALLOC_PARSE_CHUNK_INIT (16)
 #define MICROPY_EMIT_X64            (0)
@@ -43,7 +44,7 @@
 #define MICROPY_PY_IO               (0)
 #define MICROPY_PY_STRUCT           (0)
 #define MICROPY_PY_SYS              (0)
-#define MICROPY_MODULE_FROZEN       (0)
+#define MICROPY_MODULE_FROZEN_MPY   (1)
 #define MICROPY_CPYTHON_COMPAT      (0)
 #define MICROPY_LONGINT_IMPL        (MICROPY_LONGINT_IMPL_NONE)
 #define MICROPY_FLOAT_IMPL          (MICROPY_FLOAT_IMPL_NONE)
-- 
GitLab