Skip to content

Commit

Permalink
py/mkrules: Add support for custom manifest variables.
Browse files Browse the repository at this point in the history
This allows e.g. a board (or make command line) to set

    MICROPY_MANIFEST_MY_VARIABLE = path/to/somewhere
    set(MICROPY_MANIFEST_MY_VARIABLE path/to/somewhere)

and then in the manifest.py they can query this, e.g. via

    include("$(MY_VARIABLE)/path/manifest.py")

Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
  • Loading branch information
jimmo authored and dpgeorge committed Nov 28, 2023
1 parent 094b52b commit 992cd64
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 2 deletions.
19 changes: 18 additions & 1 deletion py/mkrules.cmake
Expand Up @@ -218,10 +218,27 @@ if(MICROPY_FROZEN_MANIFEST)
set(MICROPY_CROSS_FLAGS "-f${MICROPY_CROSS_FLAGS}")
endif()

# Set default path variables to be passed to makemanifest.py. These will
# be available in path substitutions. Additional variables can be set
# per-board in mpconfigboard.cmake.
set(MICROPY_MANIFEST_PORT_DIR ${MICROPY_PORT_DIR})
set(MICROPY_MANIFEST_BOARD_DIR ${MICROPY_BOARD_DIR})
set(MICROPY_MANIFEST_MPY_DIR ${MICROPY_DIR})
set(MICROPY_MANIFEST_MPY_LIB_DIR ${MICROPY_LIB_DIR})

# Find all MICROPY_MANIFEST_* variables and turn them into command line arguments.
get_cmake_property(_manifest_vars VARIABLES)
list(FILTER _manifest_vars INCLUDE REGEX "MICROPY_MANIFEST_.*")
foreach(_manifest_var IN LISTS _manifest_vars)
list(APPEND _manifest_var_args "-v")
string(REGEX REPLACE "MICROPY_MANIFEST_(.*)" "\\1" _manifest_var_name ${_manifest_var})
list(APPEND _manifest_var_args "${_manifest_var_name}=${${_manifest_var}}")
endforeach()

add_custom_target(
BUILD_FROZEN_CONTENT ALL
BYPRODUCTS ${MICROPY_FROZEN_CONTENT}
COMMAND ${Python3_EXECUTABLE} ${MICROPY_DIR}/tools/makemanifest.py -o ${MICROPY_FROZEN_CONTENT} -v "MPY_DIR=${MICROPY_DIR}" -v "MPY_LIB_DIR=${MICROPY_LIB_DIR}" -v "PORT_DIR=${MICROPY_PORT_DIR}" -v "BOARD_DIR=${MICROPY_BOARD_DIR}" -b "${CMAKE_BINARY_DIR}" ${MICROPY_CROSS_FLAGS} --mpy-tool-flags=${MICROPY_MPY_TOOL_FLAGS} ${MICROPY_FROZEN_MANIFEST}
COMMAND ${Python3_EXECUTABLE} ${MICROPY_DIR}/tools/makemanifest.py -o ${MICROPY_FROZEN_CONTENT} ${_manifest_var_args} -b "${CMAKE_BINARY_DIR}" ${MICROPY_CROSS_FLAGS} --mpy-tool-flags=${MICROPY_MPY_TOOL_FLAGS} ${MICROPY_FROZEN_MANIFEST}
DEPENDS
${MICROPY_QSTRDEFS_GENERATED}
${MICROPY_ROOT_POINTERS}
Expand Down
13 changes: 12 additions & 1 deletion py/mkrules.mk
Expand Up @@ -199,10 +199,21 @@ CFLAGS += -DMICROPY_QSTR_EXTRA_POOL=mp_qstr_frozen_const_pool
CFLAGS += -DMICROPY_MODULE_FROZEN_MPY
CFLAGS += -DMICROPY_MODULE_FROZEN_STR

# Set default path variables to be passed to makemanifest.py. These will be
# available in path substitutions. Additional variables can be set per-board
# in mpconfigboard.mk or on the make command line.
MICROPY_MANIFEST_MPY_LIB_DIR = $(MPY_LIB_DIR)
MICROPY_MANIFEST_PORT_DIR = $(shell pwd)
MICROPY_MANIFEST_BOARD_DIR = $(BOARD_DIR)
MICROPY_MANIFEST_MPY_DIR = $(TOP)

# Find all MICROPY_MANIFEST_* variables and turn them into command line arguments.
MANIFEST_VARIABLES = $(foreach var,$(filter MICROPY_MANIFEST_%, $(.VARIABLES)),-v "$(subst MICROPY_MANIFEST_,,$(var))=$($(var))")

# to build frozen_content.c from a manifest
$(BUILD)/frozen_content.c: FORCE $(BUILD)/genhdr/qstrdefs.generated.h $(BUILD)/genhdr/root_pointers.h | $(MICROPY_MPYCROSS_DEPENDENCY)
$(Q)test -e "$(MPY_LIB_DIR)/README.md" || (echo -e $(HELP_MPY_LIB_SUBMODULE); false)
$(Q)$(MAKE_MANIFEST) -o $@ -v "MPY_DIR=$(TOP)" -v "MPY_LIB_DIR=$(MPY_LIB_DIR)" -v "PORT_DIR=$(shell pwd)" -v "BOARD_DIR=$(BOARD_DIR)" -b "$(BUILD)" $(if $(MPY_CROSS_FLAGS),-f"$(MPY_CROSS_FLAGS)",) --mpy-tool-flags="$(MPY_TOOL_FLAGS)" $(FROZEN_MANIFEST)
$(Q)$(MAKE_MANIFEST) -o $@ $(MANIFEST_VARIABLES) -b "$(BUILD)" $(if $(MPY_CROSS_FLAGS),-f"$(MPY_CROSS_FLAGS)",) --mpy-tool-flags="$(MPY_TOOL_FLAGS)" $(FROZEN_MANIFEST)
endif

ifneq ($(PROG),)
Expand Down

0 comments on commit 992cd64

Please sign in to comment.