py/py.mk: Make user-C-module handling self-contained in py.mk.
Removes the need for the port to add anything to OBJS or SRC_QSTR. Also makes it possible for user-C-modules to differentiate between code that should be processed for QSTR vs other files (e.g. helpers and libraries). Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
This commit is contained in:
parent
67d05ed02b
commit
3cc6decfc4
|
@ -49,9 +49,17 @@ A MicroPython user C module is a directory with the following files:
|
||||||
in your ``micropython.mk`` to a local make variable,
|
in your ``micropython.mk`` to a local make variable,
|
||||||
eg ``EXAMPLE_MOD_DIR := $(USERMOD_DIR)``
|
eg ``EXAMPLE_MOD_DIR := $(USERMOD_DIR)``
|
||||||
|
|
||||||
Your ``micropython.mk`` must add your modules source files relative to your
|
Your ``micropython.mk`` must add your modules source files to the
|
||||||
expanded copy of ``$(USERMOD_DIR)`` to ``SRC_USERMOD``, eg
|
``SRC_USERMOD_C`` or ``SRC_USERMOD_LIB_C`` variables. The former will be
|
||||||
``SRC_USERMOD += $(EXAMPLE_MOD_DIR)/example.c``
|
processed for ``MP_QSTR_`` and ``MP_REGISTER_MODULE`` definitions, the latter
|
||||||
|
will not (e.g. helpers and library code that isn't MicroPython-specific).
|
||||||
|
These paths should include your expaned copy of ``$(USERMOD_DIR)``, e.g.::
|
||||||
|
|
||||||
|
SRC_USERMOD_C += $(EXAMPLE_MOD_DIR)/modexample.c
|
||||||
|
SRC_USERMOD_LIB_C += $(EXAMPLE_MOD_DIR)/utils/algorithm.c
|
||||||
|
|
||||||
|
Similarly, use ``SRC_USERMOD_CXX`` and ``SRC_USERMOD_LIB_CXX`` for C++
|
||||||
|
source files.
|
||||||
|
|
||||||
If you have custom compiler options (like ``-I`` to add directories to search
|
If you have custom compiler options (like ``-I`` to add directories to search
|
||||||
for header files), these should be added to ``CFLAGS_USERMOD`` for C code
|
for header files), these should be added to ``CFLAGS_USERMOD`` for C code
|
||||||
|
|
|
@ -81,7 +81,8 @@ endif
|
||||||
# Flags for optional C++ source code
|
# Flags for optional C++ source code
|
||||||
CXXFLAGS += $(filter-out -std=c99,$(CFLAGS))
|
CXXFLAGS += $(filter-out -std=c99,$(CFLAGS))
|
||||||
CXXFLAGS += $(CXXFLAGS_MOD)
|
CXXFLAGS += $(CXXFLAGS_MOD)
|
||||||
ifneq ($(SRC_CXX)$(SRC_MOD_CXX),)
|
# TODO make this common -- shouldn't be using these "private" vars from py.mk
|
||||||
|
ifneq ($(SRC_CXX)$(SRC_USERMOD_CXX)$(SRC_USERMOD_LIB_CXX),)
|
||||||
LIBSTDCPP_FILE_NAME = "$(shell $(CXX) $(CXXFLAGS) -print-file-name=libstdc++.a)"
|
LIBSTDCPP_FILE_NAME = "$(shell $(CXX) $(CXXFLAGS) -print-file-name=libstdc++.a)"
|
||||||
LDFLAGS += -L"$(shell dirname $(LIBSTDCPP_FILE_NAME))"
|
LDFLAGS += -L"$(shell dirname $(LIBSTDCPP_FILE_NAME))"
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -157,7 +157,8 @@ endif
|
||||||
# Flags for optional C++ source code
|
# Flags for optional C++ source code
|
||||||
CXXFLAGS += $(filter-out -Wmissing-prototypes -Wold-style-definition -std=gnu99,$(CFLAGS))
|
CXXFLAGS += $(filter-out -Wmissing-prototypes -Wold-style-definition -std=gnu99,$(CFLAGS))
|
||||||
CXXFLAGS += $(CXXFLAGS_MOD)
|
CXXFLAGS += $(CXXFLAGS_MOD)
|
||||||
ifneq ($(SRC_CXX)$(SRC_MOD_CXX),)
|
# TODO make this common -- shouldn't be using these "private" vars from py.mk
|
||||||
|
ifneq ($(SRC_CXX)$(SRC_USERMOD_CXX)$(SRC_USERMOD_LIB_CXX),)
|
||||||
LIBSTDCPP_FILE_NAME = "$(shell $(CXX) $(CXXFLAGS) -print-file-name=libstdc++.a)"
|
LIBSTDCPP_FILE_NAME = "$(shell $(CXX) $(CXXFLAGS) -print-file-name=libstdc++.a)"
|
||||||
LDFLAGS += -L"$(shell dirname $(LIBSTDCPP_FILE_NAME))"
|
LDFLAGS += -L"$(shell dirname $(LIBSTDCPP_FILE_NAME))"
|
||||||
endif
|
endif
|
||||||
|
|
34
py/py.mk
34
py/py.mk
|
@ -32,22 +32,44 @@ endif
|
||||||
ifneq ($(USER_C_MODULES),)
|
ifneq ($(USER_C_MODULES),)
|
||||||
# pre-define USERMOD variables as expanded so that variables are immediate
|
# pre-define USERMOD variables as expanded so that variables are immediate
|
||||||
# expanded as they're added to them
|
# expanded as they're added to them
|
||||||
SRC_USERMOD :=
|
|
||||||
|
# C/C++ files that are included in the QSTR/module build
|
||||||
|
SRC_USERMOD_C :=
|
||||||
SRC_USERMOD_CXX :=
|
SRC_USERMOD_CXX :=
|
||||||
|
# Other C/C++ files (e.g. libraries or helpers)
|
||||||
|
SRC_USERMOD_LIB_C :=
|
||||||
|
SRC_USERMOD_LIB_CXX :=
|
||||||
|
# Optionally set flags
|
||||||
CFLAGS_USERMOD :=
|
CFLAGS_USERMOD :=
|
||||||
CXXFLAGS_USERMOD :=
|
CXXFLAGS_USERMOD :=
|
||||||
LDFLAGS_USERMOD :=
|
LDFLAGS_USERMOD :=
|
||||||
|
|
||||||
|
# Backwards compatibility with older user c modules that set SRC_USERMOD
|
||||||
|
# added to SRC_USERMOD_C below
|
||||||
|
SRC_USERMOD :=
|
||||||
|
|
||||||
$(foreach module, $(wildcard $(USER_C_MODULES)/*/micropython.mk), \
|
$(foreach module, $(wildcard $(USER_C_MODULES)/*/micropython.mk), \
|
||||||
$(eval USERMOD_DIR = $(patsubst %/,%,$(dir $(module))))\
|
$(eval USERMOD_DIR = $(patsubst %/,%,$(dir $(module))))\
|
||||||
$(info Including User C Module from $(USERMOD_DIR))\
|
$(info Including User C Module from $(USERMOD_DIR))\
|
||||||
$(eval include $(module))\
|
$(eval include $(module))\
|
||||||
)
|
)
|
||||||
|
|
||||||
SRC_MOD += $(patsubst $(USER_C_MODULES)/%.c,%.c,$(SRC_USERMOD))
|
SRC_USERMOD_C += $(SRC_USERMOD)
|
||||||
SRC_MOD_CXX += $(patsubst $(USER_C_MODULES)/%.cpp,%.cpp,$(SRC_USERMOD_CXX))
|
|
||||||
CFLAGS_MOD += $(CFLAGS_USERMOD)
|
SRC_USERMOD_PATHFIX_C += $(patsubst $(USER_C_MODULES)/%.c,%.c,$(SRC_USERMOD_C))
|
||||||
CXXFLAGS_MOD += $(CXXFLAGS_USERMOD)
|
SRC_USERMOD_PATHFIX_CXX += $(patsubst $(USER_C_MODULES)/%.cpp,%.cpp,$(SRC_USERMOD_CXX))
|
||||||
LDFLAGS_MOD += $(LDFLAGS_USERMOD)
|
SRC_USERMOD_PATHFIX_LIB_C += $(patsubst $(USER_C_MODULES)/%.c,%.c,$(SRC_USERMOD_LIB_C))
|
||||||
|
SRC_USERMOD_PATHFIX_LIB_CXX += $(patsubst $(USER_C_MODULES)/%.cpp,%.cpp,$(SRC_USERMOD_LIB_CXX))
|
||||||
|
|
||||||
|
CFLAGS += $(CFLAGS_USERMOD)
|
||||||
|
CXXFLAGS += $(CXXFLAGS_USERMOD)
|
||||||
|
LDFLAGS += $(LDFLAGS_USERMOD)
|
||||||
|
|
||||||
|
SRC_QSTR += $(SRC_USERMOD_PATHFIX_C) $(SRC_USERMOD_PATHFIX_CXX)
|
||||||
|
PY_O += $(addprefix $(BUILD)/, $(SRC_USERMOD_PATHFIX_C:.c=.o))
|
||||||
|
PY_O += $(addprefix $(BUILD)/, $(SRC_USERMOD_PATHFIX_CXX:.cpp=.o))
|
||||||
|
PY_O += $(addprefix $(BUILD)/, $(SRC_USERMOD_PATHFIX_LIB_C:.c=.o))
|
||||||
|
PY_O += $(addprefix $(BUILD)/, $(SRC_USERMOD_PATHFIX_LIB_CXX:.cpp=.o))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# py object files
|
# py object files
|
||||||
|
|
Loading…
Reference in New Issue