From 8cf03d2d009141916a7b32b30ec74f8289734f4b Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Wed, 1 Aug 2018 11:44:18 -0700 Subject: [PATCH 1/3] Speed up QSTR creation by pre-filtering files before pre-processing. --- ports/atmel-samd/Makefile | 1 + py/mkrules.mk | 5 ++--- py/py.mk | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ports/atmel-samd/Makefile b/ports/atmel-samd/Makefile index 249f003f9b..d550aa7c4b 100755 --- a/ports/atmel-samd/Makefile +++ b/ports/atmel-samd/Makefile @@ -427,6 +427,7 @@ endif OBJ += $(addprefix $(BUILD)/, $(SRC_S:.s=.o)) SRC_QSTR += $(SRC_C) $(SRC_SUPERVISOR) $(SRC_COMMON_HAL_EXPANDED) $(SRC_SHARED_MODULE_EXPANDED) $(STM_SRC_C) +SRC_QSTR_PP += peripherals/samd/$(CHIP_FAMILY)/clocks.c all: $(BUILD)/firmware.bin $(BUILD)/firmware.uf2 diff --git a/py/mkrules.mk b/py/mkrules.mk index 57a51194a8..c3cb01f214 100644 --- a/py/mkrules.mk +++ b/py/mkrules.mk @@ -77,9 +77,9 @@ $(OBJ): | $(HEADER_BUILD)/qstrdefs.generated.h $(HEADER_BUILD)/mpversion.h # - if anything in QSTR_GLOBAL_DEPENDENCIES is newer, then process all source files ($^) # - else, if list of newer prerequisites ($?) is not empty, then process just these ($?) # - else, process all source files ($^) [this covers "make -B" which can set $? to empty] -$(HEADER_BUILD)/qstr.i.last: $(SRC_QSTR) $(QSTR_GLOBAL_DEPENDENCIES) | $(HEADER_BUILD)/mpversion.h +$(HEADER_BUILD)/qstr.i.last: $(SRC_QSTR) $(SRC_QSTR_PP) $(QSTR_GLOBAL_DEPENDENCIES) | $(HEADER_BUILD)/mpversion.h $(ECHO) "GEN $@" - $(Q)$(CPP) $(QSTR_GEN_EXTRA_CFLAGS) $(CFLAGS) $(if $(filter $?,$(QSTR_GLOBAL_DEPENDENCIES)),$^,$(if $?,$?,$^)) >$(HEADER_BUILD)/qstr.i.last; + $(Q)grep -lE "(MP_QSTR|i18n)" $(if $(filter $?,$(QSTR_GLOBAL_DEPENDENCIES)),$^,$(if $?,$?,$^)) | xargs $(CPP) $(QSTR_GEN_EXTRA_CFLAGS) $(CFLAGS) $(SRC_QSTR_PP) >$(HEADER_BUILD)/qstr.i.last; $(HEADER_BUILD)/qstr.split: $(HEADER_BUILD)/qstr.i.last $(STEPECHO) "GEN $@" @@ -210,4 +210,3 @@ tags: ctags -e -R $(TOP) -include $(OBJ:.o=.P) - diff --git a/py/py.mk b/py/py.mk index cad8b53ec1..76f259b065 100644 --- a/py/py.mk +++ b/py/py.mk @@ -279,6 +279,8 @@ endif # Sources that may contain qstrings SRC_QSTR_IGNORE = py/nlr% SRC_QSTR = $(SRC_MOD) $(filter-out $(SRC_QSTR_IGNORE),$(PY_CORE_O_BASENAME:.o=.c)) $(PY_EXTMOD_O_BASENAME:.o=.c) +# Sources that only hold QSTRs after pre-processing. +SRC_QSTR_PP = # Anything that depends on FORCE will be considered out-of-date FORCE: From f6d1b63ecde084dbe44d354ae9a69b1f915a40dc Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Wed, 1 Aug 2018 12:16:36 -0700 Subject: [PATCH 2/3] Handle emitnative.c which is #included into other .c files. --- py/py.mk | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/py/py.mk b/py/py.mk index 76f259b065..12bc571f35 100644 --- a/py/py.mk +++ b/py/py.mk @@ -278,9 +278,10 @@ endif # Sources that may contain qstrings SRC_QSTR_IGNORE = py/nlr% +SRC_QSTR_EMITNATIVE = py/emitn% SRC_QSTR = $(SRC_MOD) $(filter-out $(SRC_QSTR_IGNORE),$(PY_CORE_O_BASENAME:.o=.c)) $(PY_EXTMOD_O_BASENAME:.o=.c) # Sources that only hold QSTRs after pre-processing. -SRC_QSTR_PP = +SRC_QSTR_PP = $(addprefix $(TOP)/, $(filter $(SRC_QSTR_EMITNATIVE),$(PY_CORE_O_BASENAME:.o=.c))) # Anything that depends on FORCE will be considered out-of-date FORCE: From b50f46d4bef851efe055d02cac14345360654ed2 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Thu, 2 Aug 2018 11:07:22 -0700 Subject: [PATCH 3/3] Rename to SRC_QSTR_PREPROCESSOR for clarity. --- ports/atmel-samd/Makefile | 3 ++- py/mkrules.mk | 4 ++-- py/py.mk | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/ports/atmel-samd/Makefile b/ports/atmel-samd/Makefile index d550aa7c4b..62b8065768 100755 --- a/ports/atmel-samd/Makefile +++ b/ports/atmel-samd/Makefile @@ -427,7 +427,8 @@ endif OBJ += $(addprefix $(BUILD)/, $(SRC_S:.s=.o)) SRC_QSTR += $(SRC_C) $(SRC_SUPERVISOR) $(SRC_COMMON_HAL_EXPANDED) $(SRC_SHARED_MODULE_EXPANDED) $(STM_SRC_C) -SRC_QSTR_PP += peripherals/samd/$(CHIP_FAMILY)/clocks.c +# Sources that only hold QSTRs after pre-processing. +SRC_QSTR_PREPROCESSOR += peripherals/samd/$(CHIP_FAMILY)/clocks.c all: $(BUILD)/firmware.bin $(BUILD)/firmware.uf2 diff --git a/py/mkrules.mk b/py/mkrules.mk index c3cb01f214..621d024a96 100644 --- a/py/mkrules.mk +++ b/py/mkrules.mk @@ -77,9 +77,9 @@ $(OBJ): | $(HEADER_BUILD)/qstrdefs.generated.h $(HEADER_BUILD)/mpversion.h # - if anything in QSTR_GLOBAL_DEPENDENCIES is newer, then process all source files ($^) # - else, if list of newer prerequisites ($?) is not empty, then process just these ($?) # - else, process all source files ($^) [this covers "make -B" which can set $? to empty] -$(HEADER_BUILD)/qstr.i.last: $(SRC_QSTR) $(SRC_QSTR_PP) $(QSTR_GLOBAL_DEPENDENCIES) | $(HEADER_BUILD)/mpversion.h +$(HEADER_BUILD)/qstr.i.last: $(SRC_QSTR) $(SRC_QSTR_PREPROCESSOR) $(QSTR_GLOBAL_DEPENDENCIES) | $(HEADER_BUILD)/mpversion.h $(ECHO) "GEN $@" - $(Q)grep -lE "(MP_QSTR|i18n)" $(if $(filter $?,$(QSTR_GLOBAL_DEPENDENCIES)),$^,$(if $?,$?,$^)) | xargs $(CPP) $(QSTR_GEN_EXTRA_CFLAGS) $(CFLAGS) $(SRC_QSTR_PP) >$(HEADER_BUILD)/qstr.i.last; + $(Q)grep -lE "(MP_QSTR|i18n)" $(if $(filter $?,$(QSTR_GLOBAL_DEPENDENCIES)),$^,$(if $?,$?,$^)) | xargs $(CPP) $(QSTR_GEN_EXTRA_CFLAGS) $(CFLAGS) $(SRC_QSTR_PREPROCESSOR) >$(HEADER_BUILD)/qstr.i.last; $(HEADER_BUILD)/qstr.split: $(HEADER_BUILD)/qstr.i.last $(STEPECHO) "GEN $@" diff --git a/py/py.mk b/py/py.mk index 12bc571f35..8e1b86a13e 100644 --- a/py/py.mk +++ b/py/py.mk @@ -281,7 +281,7 @@ SRC_QSTR_IGNORE = py/nlr% SRC_QSTR_EMITNATIVE = py/emitn% SRC_QSTR = $(SRC_MOD) $(filter-out $(SRC_QSTR_IGNORE),$(PY_CORE_O_BASENAME:.o=.c)) $(PY_EXTMOD_O_BASENAME:.o=.c) # Sources that only hold QSTRs after pre-processing. -SRC_QSTR_PP = $(addprefix $(TOP)/, $(filter $(SRC_QSTR_EMITNATIVE),$(PY_CORE_O_BASENAME:.o=.c))) +SRC_QSTR_PREPROCESSOR = $(addprefix $(TOP)/, $(filter $(SRC_QSTR_EMITNATIVE),$(PY_CORE_O_BASENAME:.o=.c))) # Anything that depends on FORCE will be considered out-of-date FORCE: