aboutsummaryrefslogtreecommitdiff
path: root/py/py.mk
diff options
context:
space:
mode:
authorAndrew Leech2018-12-12 16:50:55 +1100
committerDamien George2019-03-08 22:58:42 +1100
commit89ff506513d52c0c415b2cf45335d60cefac527d (patch)
tree6929b54bd0f73994ccfdb09523186b7e6b40cda6 /py/py.mk
parent2e516074daee76fb3e0710a893a0f40532bb3252 (diff)
py: Update and rework build system for including external C modules.
How to use this feature is documented in docs/develop/cmodules.rst.
Diffstat (limited to 'py/py.mk')
-rw-r--r--py/py.mk19
1 files changed, 16 insertions, 3 deletions
diff --git a/py/py.mk b/py/py.mk
index ad7d12204..0fbc9f14b 100644
--- a/py/py.mk
+++ b/py/py.mk
@@ -131,9 +131,20 @@ endif
# External modules written in C.
ifneq ($(USER_C_MODULES),)
-CFLAGS_MOD += -DMICROPY_CMODULES_INCLUDE_H='"genhdr/cmodules.h"'
-include $(USER_C_MODULES)/*/micropython.mk
-SRC_QSTR += $(BUILD)/genhdr/cmodules.h
+# pre-define USERMOD variables as expanded so that variables are immediate
+# expanded as they're added to them
+SRC_USERMOD :=
+CFLAGS_USERMOD :=
+LDFLAGS_USERMOD :=
+$(foreach module, $(wildcard $(USER_C_MODULES)/*/micropython.mk), \
+ $(eval USERMOD_DIR = $(patsubst %/,%,$(dir $(module))))\
+ $(info Including User C Module from $(USERMOD_DIR))\
+ $(eval include $(module))\
+)
+
+SRC_MOD += $(patsubst $(USER_C_MODULES)/%.c,%.c,$(SRC_USERMOD))
+CFLAGS_MOD += $(CFLAGS_USERMOD)
+LDFLAGS_MOD += $(LDFLAGS_USERMOD)
endif
# py object files
@@ -335,6 +346,8 @@ $(HEADER_BUILD)/moduledefs.h: $(SRC_QSTR) $(QSTR_GLOBAL_DEPENDENCIES) | $(HEADER
@$(ECHO) "GEN $@"
$(Q)$(PYTHON) $(PY_SRC)/makemoduledefs.py --vpath="., $(TOP), $(USER_C_MODULES)" $(SRC_QSTR) > $@
+SRC_QSTR += $(HEADER_BUILD)/moduledefs.h
+
# Force nlr code to always be compiled with space-saving optimisation so
# that the function preludes are of a minimal and predictable form.
$(PY_BUILD)/nlr%.o: CFLAGS += -Os