Skip to content

Commit bdf33bc

Browse files
committed
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.
1 parent 5630778 commit bdf33bc

6 files changed

Lines changed: 25 additions & 50 deletions

File tree

esp8266/Makefile

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,6 @@ FROZEN_MPY_DIR = modules
1414
# include py core make definitions
1515
include ../py/py.mk
1616

17-
MPY_CROSS = ../mpy-cross/mpy-cross
18-
MPY_TOOL = ../tools/mpy-tool.py
19-
2017
PORT ?= /dev/ttyACM0
2118
BAUD ?= 115200
2219
FLASH_MODE ?= qio
@@ -148,9 +145,6 @@ DRIVERS_SRC_C = $(addprefix drivers/,\
148145
SRC_S = \
149146
gchelper.s \
150147

151-
FROZEN_MPY_PY_FILES := $(shell find -L $(FROZEN_MPY_DIR) -type f -name '*.py')
152-
FROZEN_MPY_MPY_FILES := $(addprefix $(BUILD)/,$(FROZEN_MPY_PY_FILES:.py=.mpy))
153-
154148
OBJ =
155149
OBJ += $(PY_O)
156150
OBJ += $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
@@ -159,9 +153,6 @@ OBJ += $(addprefix $(BUILD)/, $(STM_SRC_C:.c=.o))
159153
OBJ += $(addprefix $(BUILD)/, $(EXTMOD_SRC_C:.c=.o))
160154
OBJ += $(addprefix $(BUILD)/, $(LIB_SRC_C:.c=.o))
161155
OBJ += $(addprefix $(BUILD)/, $(DRIVERS_SRC_C:.c=.o))
162-
ifneq ($(FROZEN_MPY_DIR),)
163-
OBJ += $(BUILD)/$(BUILD)/frozen_mpy.o
164-
endif
165156
#OBJ += $(BUILD)/pins_$(BOARD).o
166157

167158
# List of sources for qstr extraction
@@ -184,17 +175,6 @@ $(BUILD)/uart.o: $(CONFVARS_FILE)
184175

185176
FROZEN_EXTRA_DEPS = $(CONFVARS_FILE)
186177

187-
# to build .mpy files from .py files
188-
$(BUILD)/$(FROZEN_MPY_DIR)/%.mpy: $(FROZEN_MPY_DIR)/%.py
189-
@$(ECHO) "MPY $<"
190-
$(Q)$(MKDIR) -p $(dir $@)
191-
$(Q)$(MPY_CROSS) -o $@ -s $(^:$(FROZEN_MPY_DIR)/%=%) $^
192-
193-
# to build frozen_mpy.c from all .mpy files
194-
$(BUILD)/frozen_mpy.c: $(FROZEN_MPY_MPY_FILES) $(BUILD)/genhdr/qstrdefs.generated.h
195-
@$(ECHO) "Creating $@"
196-
$(Q)$(PYTHON) $(MPY_TOOL) -f -q $(BUILD)/genhdr/qstrdefs.preprocessed.h $(FROZEN_MPY_MPY_FILES) > $@
197-
198178
.PHONY: deploy
199179

200180
deploy: $(BUILD)/firmware-combined.bin

py/mkenv.mk

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ LD += -m32
5959
endif
6060

6161
MAKE_FROZEN = ../tools/make-frozen.py
62+
MPY_CROSS = ../mpy-cross/mpy-cross
63+
MPY_TOOL = ../tools/mpy-tool.py
6264

6365
all:
6466
.PHONY: all

py/mkrules.mk

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,23 @@ $(BUILD)/frozen.c: $(wildcard $(FROZEN_DIR)/*) $(HEADER_BUILD) $(FROZEN_EXTRA_DE
106106
$(Q)$(MAKE_FROZEN) $(FROZEN_DIR) > $@
107107
endif
108108

109+
ifneq ($(FROZEN_MPY_DIR),)
110+
# make a list of all the .py files that need compiling and freezing
111+
FROZEN_MPY_PY_FILES := $(shell find -L $(FROZEN_MPY_DIR) -type f -name '*.py')
112+
FROZEN_MPY_MPY_FILES := $(addprefix $(BUILD)/,$(FROZEN_MPY_PY_FILES:.py=.mpy))
113+
114+
# to build .mpy files from .py files
115+
$(BUILD)/$(FROZEN_MPY_DIR)/%.mpy: $(FROZEN_MPY_DIR)/%.py
116+
@$(ECHO) "MPY $<"
117+
$(Q)$(MKDIR) -p $(dir $@)
118+
$(Q)$(MPY_CROSS) -o $@ -s $(^:$(FROZEN_MPY_DIR)/%=%) $^
119+
120+
# to build frozen_mpy.c from all .mpy files
121+
$(BUILD)/frozen_mpy.c: $(FROZEN_MPY_MPY_FILES) $(BUILD)/genhdr/qstrdefs.generated.h
122+
@$(ECHO) "Creating $@"
123+
$(Q)$(PYTHON) $(MPY_TOOL) -f -q $(BUILD)/genhdr/qstrdefs.preprocessed.h $(FROZEN_MPY_MPY_FILES) > $@
124+
endif
125+
109126
ifneq ($(PROG),)
110127
# Build a standalone executable (unix does this)
111128

py/py.mk

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,10 +237,16 @@ PY_O_BASENAME = \
237237
# prepend the build destination prefix to the py object files
238238
PY_O = $(addprefix $(PY_BUILD)/, $(PY_O_BASENAME))
239239

240+
# object file for frozen files
240241
ifneq ($(FROZEN_DIR),)
241242
PY_O += $(BUILD)/$(BUILD)/frozen.o
242243
endif
243244

245+
# object file for frozen bytecode (frozen .mpy files)
246+
ifneq ($(FROZEN_MPY_DIR),)
247+
PY_O += $(BUILD)/$(BUILD)/frozen_mpy.o
248+
endif
249+
244250
# Sources that may contain qstrings
245251
SRC_QSTR_IGNORE = nlr% emitnx% emitnthumb% emitnarm%
246252
SRC_QSTR = $(SRC_MOD) $(addprefix py/,$(filter-out $(SRC_QSTR_IGNORE),$(PY_O_BASENAME:.o=.c)) emitnative.c)

stmhal/Makefile

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -283,22 +283,8 @@ endif
283283
ifneq ($(FROZEN_MPY_DIR),)
284284
# To use frozen bytecode, put your .py files in a subdirectory (eg frozen/) and
285285
# then invoke make with FROZEN_MPY_DIR=frozen (be sure to build from scratch).
286-
FROZEN_MPY_PY_FILES := $(shell find -L $(FROZEN_MPY_DIR) -type f -name '*.py')
287-
FROZEN_MPY_MPY_FILES := $(addprefix $(BUILD)/,$(FROZEN_MPY_PY_FILES:.py=.mpy))
288286
CFLAGS += -DMICROPY_QSTR_EXTRA_POOL=mp_qstr_frozen_const_pool
289287
CFLAGS += -DMICROPY_MODULE_FROZEN_MPY
290-
OBJ += $(BUILD)/$(BUILD)/frozen_mpy.o
291-
MPY_CROSS = ../mpy-cross/mpy-cross
292-
MPY_TOOL = ../tools/mpy-tool.py
293-
294-
$(BUILD)/$(FROZEN_MPY_DIR)/%.mpy: $(FROZEN_MPY_DIR)/%.py
295-
@$(ECHO) "MPY $<"
296-
$(Q)$(MKDIR) -p $(dir $@)
297-
$(Q)$(MPY_CROSS) -o $@ -s $(^:$(FROZEN_MPY_DIR)/%=%) $^
298-
299-
$(BUILD)/frozen_mpy.c: $(FROZEN_MPY_MPY_FILES) $(BUILD)/genhdr/qstrdefs.generated.h
300-
@$(ECHO) "Creating $@"
301-
$(Q)$(PYTHON) $(MPY_TOOL) -f -q $(BUILD)/genhdr/qstrdefs.preprocessed.h $(FROZEN_MPY_MPY_FILES) > $@
302288
endif
303289

304290
.PHONY: deploy

unix/Makefile

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -175,26 +175,10 @@ SRC_QSTR_AUTO_DEPS +=
175175
ifneq ($(FROZEN_MPY_DIR),)
176176
# To use frozen bytecode, put your .py files in a subdirectory (eg frozen/) and
177177
# then invoke make with FROZEN_MPY_DIR=frozen (be sure to build from scratch).
178-
MPY_CROSS = ../mpy-cross/mpy-cross
179-
MPY_TOOL = ../tools/mpy-tool.py
180-
FROZEN_MPY_PY_FILES := $(shell find -L $(FROZEN_MPY_DIR) -type f -name '*.py')
181-
FROZEN_MPY_MPY_FILES := $(addprefix $(BUILD)/,$(FROZEN_MPY_PY_FILES:.py=.mpy))
182178
CFLAGS += -DMICROPY_QSTR_EXTRA_POOL=mp_qstr_frozen_const_pool
183179
CFLAGS += -DMICROPY_MODULE_FROZEN_MPY
184180
CFLAGS += -DMICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE=0 # not supported
185181
CFLAGS += -DMPZ_DIG_SIZE=16 # force 16 bits to work on both 32 and 64 bit archs
186-
OBJ += $(BUILD)/$(BUILD)/frozen_mpy.o
187-
188-
# to build .mpy files from .py files
189-
$(BUILD)/$(FROZEN_MPY_DIR)/%.mpy: $(FROZEN_MPY_DIR)/%.py
190-
@$(ECHO) "MPY $<"
191-
$(Q)$(MKDIR) -p $(dir $@)
192-
$(Q)$(MPY_CROSS) -o $@ -s $(^:$(FROZEN_MPY_DIR)/%=%) $^
193-
194-
# to build frozen_mpy.c from all .mpy files
195-
$(BUILD)/frozen_mpy.c: $(FROZEN_MPY_MPY_FILES) $(BUILD)/genhdr/qstrdefs.generated.h
196-
@$(ECHO) "Creating $@"
197-
$(Q)$(PYTHON) $(MPY_TOOL) -f -q $(BUILD)/genhdr/qstrdefs.preprocessed.h $(FROZEN_MPY_MPY_FILES) > $@
198182
endif
199183

200184

0 commit comments

Comments
 (0)