mirror of
https://github.com/licsber/micropython.git
synced 2024-09-20 09:00:23 +08:00
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.
This commit is contained in:
parent
5630778f0f
commit
bdf33bc136
@ -14,9 +14,6 @@ FROZEN_MPY_DIR = modules
|
|||||||
# include py core make definitions
|
# include py core make definitions
|
||||||
include ../py/py.mk
|
include ../py/py.mk
|
||||||
|
|
||||||
MPY_CROSS = ../mpy-cross/mpy-cross
|
|
||||||
MPY_TOOL = ../tools/mpy-tool.py
|
|
||||||
|
|
||||||
PORT ?= /dev/ttyACM0
|
PORT ?= /dev/ttyACM0
|
||||||
BAUD ?= 115200
|
BAUD ?= 115200
|
||||||
FLASH_MODE ?= qio
|
FLASH_MODE ?= qio
|
||||||
@ -148,9 +145,6 @@ DRIVERS_SRC_C = $(addprefix drivers/,\
|
|||||||
SRC_S = \
|
SRC_S = \
|
||||||
gchelper.s \
|
gchelper.s \
|
||||||
|
|
||||||
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))
|
|
||||||
|
|
||||||
OBJ =
|
OBJ =
|
||||||
OBJ += $(PY_O)
|
OBJ += $(PY_O)
|
||||||
OBJ += $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
|
OBJ += $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
|
||||||
@ -159,9 +153,6 @@ OBJ += $(addprefix $(BUILD)/, $(STM_SRC_C:.c=.o))
|
|||||||
OBJ += $(addprefix $(BUILD)/, $(EXTMOD_SRC_C:.c=.o))
|
OBJ += $(addprefix $(BUILD)/, $(EXTMOD_SRC_C:.c=.o))
|
||||||
OBJ += $(addprefix $(BUILD)/, $(LIB_SRC_C:.c=.o))
|
OBJ += $(addprefix $(BUILD)/, $(LIB_SRC_C:.c=.o))
|
||||||
OBJ += $(addprefix $(BUILD)/, $(DRIVERS_SRC_C:.c=.o))
|
OBJ += $(addprefix $(BUILD)/, $(DRIVERS_SRC_C:.c=.o))
|
||||||
ifneq ($(FROZEN_MPY_DIR),)
|
|
||||||
OBJ += $(BUILD)/$(BUILD)/frozen_mpy.o
|
|
||||||
endif
|
|
||||||
#OBJ += $(BUILD)/pins_$(BOARD).o
|
#OBJ += $(BUILD)/pins_$(BOARD).o
|
||||||
|
|
||||||
# List of sources for qstr extraction
|
# List of sources for qstr extraction
|
||||||
@ -184,17 +175,6 @@ $(BUILD)/uart.o: $(CONFVARS_FILE)
|
|||||||
|
|
||||||
FROZEN_EXTRA_DEPS = $(CONFVARS_FILE)
|
FROZEN_EXTRA_DEPS = $(CONFVARS_FILE)
|
||||||
|
|
||||||
# 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) > $@
|
|
||||||
|
|
||||||
.PHONY: deploy
|
.PHONY: deploy
|
||||||
|
|
||||||
deploy: $(BUILD)/firmware-combined.bin
|
deploy: $(BUILD)/firmware-combined.bin
|
||||||
|
@ -59,6 +59,8 @@ LD += -m32
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
MAKE_FROZEN = ../tools/make-frozen.py
|
MAKE_FROZEN = ../tools/make-frozen.py
|
||||||
|
MPY_CROSS = ../mpy-cross/mpy-cross
|
||||||
|
MPY_TOOL = ../tools/mpy-tool.py
|
||||||
|
|
||||||
all:
|
all:
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
|
@ -106,6 +106,23 @@ $(BUILD)/frozen.c: $(wildcard $(FROZEN_DIR)/*) $(HEADER_BUILD) $(FROZEN_EXTRA_DE
|
|||||||
$(Q)$(MAKE_FROZEN) $(FROZEN_DIR) > $@
|
$(Q)$(MAKE_FROZEN) $(FROZEN_DIR) > $@
|
||||||
endif
|
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),)
|
ifneq ($(PROG),)
|
||||||
# Build a standalone executable (unix does this)
|
# Build a standalone executable (unix does this)
|
||||||
|
|
||||||
|
6
py/py.mk
6
py/py.mk
@ -237,10 +237,16 @@ PY_O_BASENAME = \
|
|||||||
# prepend the build destination prefix to the py object files
|
# prepend the build destination prefix to the py object files
|
||||||
PY_O = $(addprefix $(PY_BUILD)/, $(PY_O_BASENAME))
|
PY_O = $(addprefix $(PY_BUILD)/, $(PY_O_BASENAME))
|
||||||
|
|
||||||
|
# object file for frozen files
|
||||||
ifneq ($(FROZEN_DIR),)
|
ifneq ($(FROZEN_DIR),)
|
||||||
PY_O += $(BUILD)/$(BUILD)/frozen.o
|
PY_O += $(BUILD)/$(BUILD)/frozen.o
|
||||||
endif
|
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
|
# Sources that may contain qstrings
|
||||||
SRC_QSTR_IGNORE = nlr% emitnx% emitnthumb% emitnarm%
|
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)
|
SRC_QSTR = $(SRC_MOD) $(addprefix py/,$(filter-out $(SRC_QSTR_IGNORE),$(PY_O_BASENAME:.o=.c)) emitnative.c)
|
||||||
|
@ -283,22 +283,8 @@ endif
|
|||||||
ifneq ($(FROZEN_MPY_DIR),)
|
ifneq ($(FROZEN_MPY_DIR),)
|
||||||
# To use frozen bytecode, put your .py files in a subdirectory (eg frozen/) and
|
# To use frozen bytecode, put your .py files in a subdirectory (eg frozen/) and
|
||||||
# then invoke make with FROZEN_MPY_DIR=frozen (be sure to build from scratch).
|
# then invoke make with FROZEN_MPY_DIR=frozen (be sure to build from scratch).
|
||||||
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))
|
|
||||||
CFLAGS += -DMICROPY_QSTR_EXTRA_POOL=mp_qstr_frozen_const_pool
|
CFLAGS += -DMICROPY_QSTR_EXTRA_POOL=mp_qstr_frozen_const_pool
|
||||||
CFLAGS += -DMICROPY_MODULE_FROZEN_MPY
|
CFLAGS += -DMICROPY_MODULE_FROZEN_MPY
|
||||||
OBJ += $(BUILD)/$(BUILD)/frozen_mpy.o
|
|
||||||
MPY_CROSS = ../mpy-cross/mpy-cross
|
|
||||||
MPY_TOOL = ../tools/mpy-tool.py
|
|
||||||
|
|
||||||
$(BUILD)/$(FROZEN_MPY_DIR)/%.mpy: $(FROZEN_MPY_DIR)/%.py
|
|
||||||
@$(ECHO) "MPY $<"
|
|
||||||
$(Q)$(MKDIR) -p $(dir $@)
|
|
||||||
$(Q)$(MPY_CROSS) -o $@ -s $(^:$(FROZEN_MPY_DIR)/%=%) $^
|
|
||||||
|
|
||||||
$(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
|
endif
|
||||||
|
|
||||||
.PHONY: deploy
|
.PHONY: deploy
|
||||||
|
@ -175,26 +175,10 @@ SRC_QSTR_AUTO_DEPS +=
|
|||||||
ifneq ($(FROZEN_MPY_DIR),)
|
ifneq ($(FROZEN_MPY_DIR),)
|
||||||
# To use frozen bytecode, put your .py files in a subdirectory (eg frozen/) and
|
# To use frozen bytecode, put your .py files in a subdirectory (eg frozen/) and
|
||||||
# then invoke make with FROZEN_MPY_DIR=frozen (be sure to build from scratch).
|
# then invoke make with FROZEN_MPY_DIR=frozen (be sure to build from scratch).
|
||||||
MPY_CROSS = ../mpy-cross/mpy-cross
|
|
||||||
MPY_TOOL = ../tools/mpy-tool.py
|
|
||||||
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))
|
|
||||||
CFLAGS += -DMICROPY_QSTR_EXTRA_POOL=mp_qstr_frozen_const_pool
|
CFLAGS += -DMICROPY_QSTR_EXTRA_POOL=mp_qstr_frozen_const_pool
|
||||||
CFLAGS += -DMICROPY_MODULE_FROZEN_MPY
|
CFLAGS += -DMICROPY_MODULE_FROZEN_MPY
|
||||||
CFLAGS += -DMICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE=0 # not supported
|
CFLAGS += -DMICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE=0 # not supported
|
||||||
CFLAGS += -DMPZ_DIG_SIZE=16 # force 16 bits to work on both 32 and 64 bit archs
|
CFLAGS += -DMPZ_DIG_SIZE=16 # force 16 bits to work on both 32 and 64 bit archs
|
||||||
OBJ += $(BUILD)/$(BUILD)/frozen_mpy.o
|
|
||||||
|
|
||||||
# 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
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user