teensy: Switch over to using frozen modules instead of memzip
I left memzip in for the time being, so you can choose in the Makefile whether to USE_FROZEN or USE_MEMZIP. It looks like using frozen saves about 2472 bytes (using my set of 15 python files), mostly due to overheads in the zip file format.
This commit is contained in:
parent
074d713bfb
commit
53ea2b5ce2
|
@ -74,6 +74,9 @@ endif
|
||||||
CFLAGS += -fdata-sections -ffunction-sections
|
CFLAGS += -fdata-sections -ffunction-sections
|
||||||
LDFLAGS += -Wl,--gc-sections
|
LDFLAGS += -Wl,--gc-sections
|
||||||
|
|
||||||
|
USE_FROZEN = 1
|
||||||
|
USE_MEMZIP = 0
|
||||||
|
|
||||||
SRC_C = \
|
SRC_C = \
|
||||||
hal_ftm.c \
|
hal_ftm.c \
|
||||||
hal_gpio.c \
|
hal_gpio.c \
|
||||||
|
@ -81,9 +84,6 @@ SRC_C = \
|
||||||
main.c \
|
main.c \
|
||||||
lcd.c \
|
lcd.c \
|
||||||
led.c \
|
led.c \
|
||||||
lib/memzip/import.c \
|
|
||||||
lib/memzip/lexermemzip.c \
|
|
||||||
lib/memzip/memzip.c \
|
|
||||||
modpyb.c \
|
modpyb.c \
|
||||||
pin_defs_teensy.c \
|
pin_defs_teensy.c \
|
||||||
reg.c \
|
reg.c \
|
||||||
|
@ -92,7 +92,6 @@ SRC_C = \
|
||||||
uart.c \
|
uart.c \
|
||||||
usb.c \
|
usb.c \
|
||||||
|
|
||||||
|
|
||||||
STM_SRC_C = $(addprefix stmhal/,\
|
STM_SRC_C = $(addprefix stmhal/,\
|
||||||
gccollect.c \
|
gccollect.c \
|
||||||
input.c \
|
input.c \
|
||||||
|
@ -127,11 +126,55 @@ SRC_TEENSY = $(addprefix core/,\
|
||||||
OBJ = $(PY_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o) $(STM_SRC_C:.c=.o) $(STM_SRC_S:.s=.o) $(SRC_TEENSY:.c=.o))
|
OBJ = $(PY_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o) $(STM_SRC_C:.c=.o) $(STM_SRC_S:.s=.o) $(SRC_TEENSY:.c=.o))
|
||||||
OBJ += $(addprefix $(BUILD)/, $(LIB_SRC_C:.c=.o))
|
OBJ += $(addprefix $(BUILD)/, $(LIB_SRC_C:.c=.o))
|
||||||
OBJ += $(BUILD)/pins_gen.o
|
OBJ += $(BUILD)/pins_gen.o
|
||||||
OBJ += $(BUILD)/memzip-files.o
|
|
||||||
|
|
||||||
all: hex
|
all: hex
|
||||||
hex: $(BUILD)/micropython.hex
|
hex: $(BUILD)/micropython.hex
|
||||||
|
|
||||||
|
ifeq ($(USE_MEMZIP),1)
|
||||||
|
SRC_C += \
|
||||||
|
lib/memzip/import.c \
|
||||||
|
lib/memzip/lexermemzip.c \
|
||||||
|
lib/memzip/memzip.c \
|
||||||
|
|
||||||
|
OBJ += $(BUILD)/memzip-files.o
|
||||||
|
|
||||||
|
MAKE_MEMZIP = ../lib/memzip/make-memzip.py
|
||||||
|
ifeq ($(MEMZIP_DIR),)
|
||||||
|
MEMZIP_DIR = memzip_files
|
||||||
|
endif
|
||||||
|
|
||||||
|
$(BUILD)/memzip-files.o: $(BUILD)/memzip-files.c
|
||||||
|
$(call compile_c)
|
||||||
|
|
||||||
|
$(BUILD)/memzip-files.c: $(shell find ${MEMZIP_DIR} -type f)
|
||||||
|
@$(ECHO) "Creating $@"
|
||||||
|
$(Q)$(PYTHON) $(MAKE_MEMZIP) --zip-file $(BUILD)/memzip-files.zip --c-file $@ $(MEMZIP_DIR)
|
||||||
|
|
||||||
|
endif # USE_MEMZIP
|
||||||
|
|
||||||
|
ifeq ($(USE_FROZEN),1)
|
||||||
|
|
||||||
|
CFLAGS += -DMICROPY_MODULE_FROZEN
|
||||||
|
|
||||||
|
SRC_C += \
|
||||||
|
lexerfrozen.c
|
||||||
|
|
||||||
|
OBJ += $(BUILD)/frozen-files.o
|
||||||
|
|
||||||
|
MAKE_FROZEN = ../tools/make-frozen.py
|
||||||
|
ifeq ($(FROZEN_DIR),)
|
||||||
|
FROZEN_DIR = memzip_files
|
||||||
|
endif
|
||||||
|
|
||||||
|
$(BUILD)/frozen-files.o: $(BUILD)/frozen-files.c
|
||||||
|
$(call compile_c)
|
||||||
|
|
||||||
|
$(BUILD)/frozen-files.c: $(shell find ${FROZEN_DIR} -type f)
|
||||||
|
@$(ECHO) "Creating $@"
|
||||||
|
$(Q)$(PYTHON) $(MAKE_FROZEN) $(FROZEN_DIR) > $@
|
||||||
|
|
||||||
|
endif # USE_FROZEN
|
||||||
|
|
||||||
ifeq ($(ARDUINO),)
|
ifeq ($(ARDUINO),)
|
||||||
post_compile: $(BUILD)/micropython.hex
|
post_compile: $(BUILD)/micropython.hex
|
||||||
$(ECHO) "Please define ARDUINO (where TeensyDuino is installed)"
|
$(ECHO) "Please define ARDUINO (where TeensyDuino is installed)"
|
||||||
|
@ -161,16 +204,11 @@ $(BUILD)/micropython.elf: $(OBJ)
|
||||||
$(Q)$(CC) $(LDFLAGS) -o "$@" -Wl,-Map,$(@:.elf=.map) $^ $(LIBS)
|
$(Q)$(CC) $(LDFLAGS) -o "$@" -Wl,-Map,$(@:.elf=.map) $^ $(LIBS)
|
||||||
$(Q)$(SIZE) $@
|
$(Q)$(SIZE) $@
|
||||||
|
|
||||||
ifeq ($(MEMZIP_DIR),)
|
|
||||||
MEMZIP_DIR = memzip_files
|
|
||||||
endif
|
|
||||||
|
|
||||||
$(BUILD)/%.hex: $(BUILD)/%.elf
|
$(BUILD)/%.hex: $(BUILD)/%.elf
|
||||||
$(ECHO) "HEX $<"
|
$(ECHO) "HEX $<"
|
||||||
$(Q)$(OBJCOPY) -O ihex -R .eeprom "$<" "$@"
|
$(Q)$(OBJCOPY) -O ihex -R .eeprom "$<" "$@"
|
||||||
|
|
||||||
MAKE_PINS = make-pins.py
|
MAKE_PINS = make-pins.py
|
||||||
MAKE_MEMZIP = ../lib/memzip/make-memzip.py
|
|
||||||
BOARD_PINS = teensy_pins.csv
|
BOARD_PINS = teensy_pins.csv
|
||||||
AF_FILE = mk20dx256_af.csv
|
AF_FILE = mk20dx256_af.csv
|
||||||
PREFIX_FILE = mk20dx256_prefix.c
|
PREFIX_FILE = mk20dx256_prefix.c
|
||||||
|
@ -196,13 +234,6 @@ $(BUILD)/%_gen.c $(HEADER_BUILD)/%.h $(HEADER_BUILD)/%_af_const.h $(BUILD)/%_qst
|
||||||
$(BUILD)/pins_gen.o: $(BUILD)/pins_gen.c
|
$(BUILD)/pins_gen.o: $(BUILD)/pins_gen.c
|
||||||
$(call compile_c)
|
$(call compile_c)
|
||||||
|
|
||||||
$(BUILD)/memzip-files.o: $(BUILD)/memzip-files.c
|
|
||||||
$(call compile_c)
|
|
||||||
|
|
||||||
$(BUILD)/memzip-files.c: $(shell find ${MEMZIP_DIR} -type f)
|
|
||||||
@$(ECHO) "Creating $@"
|
|
||||||
$(Q)$(PYTHON) $(MAKE_MEMZIP) --zip-file $(BUILD)/memzip-files.zip --c-file $@ $(MEMZIP_DIR)
|
|
||||||
|
|
||||||
$(BUILD)/%.pp: $(BUILD)/%.c
|
$(BUILD)/%.pp: $(BUILD)/%.c
|
||||||
$(ECHO) "PreProcess $<"
|
$(ECHO) "PreProcess $<"
|
||||||
$(Q)$(CC) $(CFLAGS) -E -Wp,-C,-dD,-dI -o $@ $<
|
$(Q)$(CC) $(CFLAGS) -E -Wp,-C,-dD,-dI -o $@ $<
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "py/lexer.h"
|
||||||
|
|
||||||
|
mp_import_stat_t mp_import_stat(const char *path) {
|
||||||
|
return MP_IMPORT_STAT_NO_EXIST;
|
||||||
|
}
|
||||||
|
|
||||||
|
mp_lexer_t *mp_lexer_new_from_file(const char *filename) {
|
||||||
|
return NULL;
|
||||||
|
}
|
|
@ -22,6 +22,10 @@
|
||||||
#include "uart.h"
|
#include "uart.h"
|
||||||
#include "pin.h"
|
#include "pin.h"
|
||||||
|
|
||||||
|
#if MICROPY_MODULE_FROZEN
|
||||||
|
#include "py/compile.h"
|
||||||
|
#include "py/frozenmod.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
extern uint32_t _heap_start;
|
extern uint32_t _heap_start;
|
||||||
|
|
||||||
|
@ -301,14 +305,27 @@ soft_reset:
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if MICROPY_MODULE_FROZEN
|
||||||
|
{
|
||||||
|
mp_lexer_t *lex = mp_find_frozen_module("boot", 4);
|
||||||
|
mp_parse_compile_execute(lex, MP_PARSE_FILE_INPUT, mp_globals_get(), mp_locals_get());
|
||||||
|
}
|
||||||
|
#else
|
||||||
if (!pyexec_file("/boot.py")) {
|
if (!pyexec_file("/boot.py")) {
|
||||||
flash_error(4);
|
flash_error(4);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Turn bootup LED off
|
// Turn bootup LED off
|
||||||
led_state(PYB_LED_BUILTIN, 0);
|
led_state(PYB_LED_BUILTIN, 0);
|
||||||
|
|
||||||
// run main script
|
// run main script
|
||||||
|
#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());
|
||||||
|
}
|
||||||
|
#else
|
||||||
{
|
{
|
||||||
vstr_t *vstr = vstr_new();
|
vstr_t *vstr = vstr_new();
|
||||||
vstr_add_str(vstr, "/");
|
vstr_add_str(vstr, "/");
|
||||||
|
@ -322,6 +339,7 @@ soft_reset:
|
||||||
}
|
}
|
||||||
vstr_free(vstr);
|
vstr_free(vstr);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// enter REPL
|
// enter REPL
|
||||||
// REPL mode can change, or it can request a soft reset
|
// REPL mode can change, or it can request a soft reset
|
||||||
|
|
Loading…
Reference in New Issue