diff options
author | Damien George <damien.p.george@gmail.com> | 2016-11-08 14:28:30 +1100 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2016-11-08 14:28:30 +1100 |
commit | bdf33bc1367fa6fc888c791ce00b326bbd279bdf (patch) | |
tree | bb3f5ab0c7912305fb8f61c03fa478ecc815880c /py | |
parent | 5630778f0f3a114f5b7d7f71f3df0bd1c3b378f6 (diff) | |
download | micropython-bdf33bc1367fa6fc888c791ce00b326bbd279bdf.tar.gz micropython-bdf33bc1367fa6fc888c791ce00b326bbd279bdf.zip |
py: Move frozen bytecode Makefile rules from ports to common mk files.
Now, to use frozen bytecode all a port needs to do is define
FROZEN_MPY_DIR to the directory containing the .py files to freeze, and
define MICROPY_MODULE_FROZEN_MPY and MICROPY_QSTR_EXTRA_POOL.
Diffstat (limited to 'py')
-rw-r--r-- | py/mkenv.mk | 2 | ||||
-rw-r--r-- | py/mkrules.mk | 17 | ||||
-rw-r--r-- | py/py.mk | 6 |
3 files changed, 25 insertions, 0 deletions
diff --git a/py/mkenv.mk b/py/mkenv.mk index e7262907c8..14e23e074c 100644 --- a/py/mkenv.mk +++ b/py/mkenv.mk @@ -59,6 +59,8 @@ LD += -m32 endif MAKE_FROZEN = ../tools/make-frozen.py +MPY_CROSS = ../mpy-cross/mpy-cross +MPY_TOOL = ../tools/mpy-tool.py all: .PHONY: all diff --git a/py/mkrules.mk b/py/mkrules.mk index 26e4aeab3f..9b6dc2470f 100644 --- a/py/mkrules.mk +++ b/py/mkrules.mk @@ -106,6 +106,23 @@ $(BUILD)/frozen.c: $(wildcard $(FROZEN_DIR)/*) $(HEADER_BUILD) $(FROZEN_EXTRA_DE $(Q)$(MAKE_FROZEN) $(FROZEN_DIR) > $@ endif +ifneq ($(FROZEN_MPY_DIR),) +# make a list of all the .py files that need compiling and freezing +FROZEN_MPY_PY_FILES := $(shell find -L $(FROZEN_MPY_DIR) -type f -name '*.py') +FROZEN_MPY_MPY_FILES := $(addprefix $(BUILD)/,$(FROZEN_MPY_PY_FILES:.py=.mpy)) + +# to build .mpy files from .py files +$(BUILD)/$(FROZEN_MPY_DIR)/%.mpy: $(FROZEN_MPY_DIR)/%.py + @$(ECHO) "MPY $<" + $(Q)$(MKDIR) -p $(dir $@) + $(Q)$(MPY_CROSS) -o $@ -s $(^:$(FROZEN_MPY_DIR)/%=%) $^ + +# to build frozen_mpy.c from all .mpy files +$(BUILD)/frozen_mpy.c: $(FROZEN_MPY_MPY_FILES) $(BUILD)/genhdr/qstrdefs.generated.h + @$(ECHO) "Creating $@" + $(Q)$(PYTHON) $(MPY_TOOL) -f -q $(BUILD)/genhdr/qstrdefs.preprocessed.h $(FROZEN_MPY_MPY_FILES) > $@ +endif + ifneq ($(PROG),) # Build a standalone executable (unix does this) @@ -237,10 +237,16 @@ PY_O_BASENAME = \ # prepend the build destination prefix to the py object files PY_O = $(addprefix $(PY_BUILD)/, $(PY_O_BASENAME)) +# object file for frozen files ifneq ($(FROZEN_DIR),) PY_O += $(BUILD)/$(BUILD)/frozen.o endif +# object file for frozen bytecode (frozen .mpy files) +ifneq ($(FROZEN_MPY_DIR),) +PY_O += $(BUILD)/$(BUILD)/frozen_mpy.o +endif + # Sources that may contain qstrings SRC_QSTR_IGNORE = nlr% emitnx% emitnthumb% emitnarm% SRC_QSTR = $(SRC_MOD) $(addprefix py/,$(filter-out $(SRC_QSTR_IGNORE),$(PY_O_BASENAME:.o=.c)) emitnative.c) |