From bda7041294e0446c9909fe18c4826dd0bcfb9fc4 Mon Sep 17 00:00:00 2001
From: Josef Gajdusek <atx@atx.name>
Date: Wed, 6 May 2015 00:19:26 +0200
Subject: [PATCH] esp8266: Add support for frozen modules

---
 esp8266/Makefile        | 17 +++++++++++++++++
 esp8266/main.c          |  5 +++++
 esp8266/mpconfigport.h  |  1 +
 esp8266/scripts/main.py |  1 +
 4 files changed, 24 insertions(+)
 create mode 100644 esp8266/scripts/main.py

diff --git a/esp8266/Makefile b/esp8266/Makefile
index 389e86edf..c891c50dc 100644
--- a/esp8266/Makefile
+++ b/esp8266/Makefile
@@ -6,6 +6,9 @@ QSTR_DEFS = qstrdefsport.h #$(BUILD)/pins_qstr.h
 # include py core make definitions
 include ../py/py.mk
 
+MAKE_FROZEN = ../tools/make-frozen.py
+
+SCRIPTDIR = scripts
 PORT = /dev/ttyACM0
 CROSS_COMPILE = xtensa-lx106-elf-
 ESP_SDK = $(shell $(CC) -print-sysroot)/usr
@@ -51,6 +54,7 @@ SRC_C = \
 	modpybpin.c \
 	modesp.c \
 	utils.c \
+	$(BUILD)/frozen.c \
 
 STM_SRC_C = $(addprefix stmhal/,\
 	printf.c \
@@ -77,6 +81,19 @@ OBJ += $(addprefix $(BUILD)/, $(LIB_SRC_C:.c=.o))
 
 all: $(BUILD)/firmware-combined.bin
 
+SCRIPTDIR_FILE = $(BUILD)/scriptdir
+
+ifeq ($(wildcard $(SCRIPTDIR_FILE)),)
+$(shell $(MKDIR) -p $(BUILD))
+$(shell echo $(SCRIPTDIR) > $(SCRIPTDIR_FILE))
+else ifneq ($(shell cat $(SCRIPTDIR_FILE)), $(SCRIPTDIR))
+$(shell echo $(SCRIPTDIR) > $(SCRIPTDIR_FILE))
+endif
+
+$(BUILD)/frozen.c: $(wildcard $(SCRIPTDIR)/*) $(SCRIPTDIR_FILE)
+	$(ECHO) "Generating $@"
+	$(Q)$(MAKE_FROZEN) $(SCRIPTDIR) > $@
+
 .PHONY: deploy
 
 deploy: $(BUILD)/firmware-combined.bin
diff --git a/esp8266/main.c b/esp8266/main.c
index 81618cd63..59b415c1d 100644
--- a/esp8266/main.c
+++ b/esp8266/main.c
@@ -32,6 +32,7 @@
 #include "py/runtime0.h"
 #include "py/runtime.h"
 #include "py/stackctrl.h"
+#include "py/frozenmod.h"
 #include "py/gc.h"
 #include "pyexec.h"
 #include "gccollect.h"
@@ -46,6 +47,10 @@ STATIC void mp_reset(void) {
     mp_init();
     mp_obj_list_init(mp_sys_path, 0);
     mp_obj_list_init(mp_sys_argv, 0);
+#if MICROPY_MODULE_FROZEN
+    mp_lexer_t *lex = mp_find_frozen_module("main", 4);
+    mp_parse_compile_execute(lex, MP_PARSE_FILE_INPUT, mp_globals_get(), mp_locals_get());
+#endif
 }
 
 void soft_reset(void) {
diff --git a/esp8266/mpconfigport.h b/esp8266/mpconfigport.h
index cae5398f9..6d70c48e2 100644
--- a/esp8266/mpconfigport.h
+++ b/esp8266/mpconfigport.h
@@ -36,6 +36,7 @@
 #define MICROPY_LONGINT_IMPL        (MICROPY_LONGINT_IMPL_LONGLONG)
 #define MICROPY_FLOAT_IMPL          (MICROPY_FLOAT_IMPL_NONE)
 #define MICROPY_ERROR_REPORTING     (MICROPY_ERROR_REPORTING_TERSE)
+#define MICROPY_MODULE_FROZEN       (1)
 
 // type definitions for the specific machine
 
diff --git a/esp8266/scripts/main.py b/esp8266/scripts/main.py
new file mode 100644
index 000000000..83bc52a32
--- /dev/null
+++ b/esp8266/scripts/main.py
@@ -0,0 +1 @@
+# This script is run on boot
-- 
GitLab