92 lines
2.9 KiB
CMake
92 lines
2.9 KiB
CMake
|
# CMake fragment for MicroPython rules
|
||
|
|
||
|
target_sources(${MICROPYTHON_TARGET} PRIVATE
|
||
|
${MPY_MPVERSION}
|
||
|
${MPY_QSTR_DEFS_GENERATED}
|
||
|
${MPY_FROZEN_CONTENT}
|
||
|
)
|
||
|
|
||
|
# Command to force the build of another command
|
||
|
|
||
|
add_custom_command(
|
||
|
OUTPUT FORCE_BUILD
|
||
|
COMMENT ""
|
||
|
COMMAND echo -n
|
||
|
)
|
||
|
|
||
|
# Generate mpversion.h
|
||
|
|
||
|
add_custom_command(
|
||
|
OUTPUT ${MPY_MPVERSION}
|
||
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${MPY_GENHDR_DIR}
|
||
|
COMMAND python3 ${MPY_DIR}/py/makeversionhdr.py ${MPY_MPVERSION}
|
||
|
DEPENDS FORCE_BUILD
|
||
|
)
|
||
|
|
||
|
# Generate moduledefs.h
|
||
|
# This is currently hard-coded to support modarray.c only, because makemoduledefs.py doesn't support absolute paths
|
||
|
|
||
|
add_custom_command(
|
||
|
OUTPUT ${MPY_MODULEDEFS}
|
||
|
COMMAND python3 ${MPY_PY_DIR}/makemoduledefs.py --vpath="." ../../../py/modarray.c > ${MPY_MODULEDEFS}
|
||
|
DEPENDS ${MPY_MPVERSION}
|
||
|
${SOURCE_QSTR}
|
||
|
)
|
||
|
|
||
|
# Generate qstrs
|
||
|
|
||
|
# If any of the dependencies in this rule change then the C-preprocessor step must be run.
|
||
|
# It only needs to be passed the list of SOURCE_QSTR files that have changed since it was
|
||
|
# last run, but it looks like it's not possible to specify that with cmake.
|
||
|
add_custom_command(
|
||
|
OUTPUT ${MPY_QSTR_DEFS_LAST}
|
||
|
COMMAND ${CMAKE_C_COMPILER} -E \$\(C_INCLUDES\) \$\(C_FLAGS\) -DNO_QSTR ${SOURCE_QSTR} > ${MPY_GENHDR_DIR}/qstr.i.last
|
||
|
DEPENDS ${MPY_MODULEDEFS}
|
||
|
${SOURCE_QSTR}
|
||
|
VERBATIM
|
||
|
)
|
||
|
|
||
|
add_custom_command(
|
||
|
OUTPUT ${MPY_QSTR_DEFS_SPLIT}
|
||
|
COMMAND python3 ${MPY_DIR}/py/makeqstrdefs.py split qstr ${MPY_GENHDR_DIR}/qstr.i.last ${MPY_GENHDR_DIR}/qstr _
|
||
|
COMMAND touch ${MPY_QSTR_DEFS_SPLIT}
|
||
|
DEPENDS ${MPY_QSTR_DEFS_LAST}
|
||
|
VERBATIM
|
||
|
)
|
||
|
|
||
|
add_custom_command(
|
||
|
OUTPUT ${MPY_QSTR_DEFS_COLLECTED}
|
||
|
COMMAND python3 ${MPY_DIR}/py/makeqstrdefs.py cat qstr _ ${MPY_GENHDR_DIR}/qstr ${MPY_QSTR_DEFS_COLLECTED}
|
||
|
DEPENDS ${MPY_QSTR_DEFS_SPLIT}
|
||
|
VERBATIM
|
||
|
)
|
||
|
|
||
|
add_custom_command(
|
||
|
OUTPUT ${MPY_QSTR_DEFS_PREPROCESSED}
|
||
|
COMMAND cat ${MPY_PY_QSTRDEFS} ${MPY_QSTR_DEFS} ${MPY_QSTR_DEFS_COLLECTED} | sed "s/^Q(.*)/\"&\"/" | ${CMAKE_C_COMPILER} -E \$\(C_INCLUDES\) \$\(C_FLAGS\) - | sed "s/^\\\"\\(Q(.*)\\)\\\"/\\1/" > ${MPY_QSTR_DEFS_PREPROCESSED}
|
||
|
DEPENDS ${MPY_PY_QSTRDEFS} ${MPY_QSTR_DEFS} ${MPY_QSTR_DEFS_COLLECTED}
|
||
|
VERBATIM
|
||
|
)
|
||
|
|
||
|
add_custom_command(
|
||
|
OUTPUT ${MPY_QSTR_DEFS_GENERATED}
|
||
|
COMMAND python3 ${MPY_PY_DIR}/makeqstrdata.py ${MPY_QSTR_DEFS_PREPROCESSED} > ${MPY_QSTR_DEFS_GENERATED}
|
||
|
DEPENDS ${MPY_QSTR_DEFS_PREPROCESSED}
|
||
|
VERBATIM
|
||
|
)
|
||
|
|
||
|
# Build frozen code
|
||
|
|
||
|
target_compile_options(${MICROPYTHON_TARGET} PUBLIC
|
||
|
-DMICROPY_QSTR_EXTRA_POOL=mp_qstr_frozen_const_pool
|
||
|
-DMICROPY_MODULE_FROZEN_MPY=\(1\)
|
||
|
)
|
||
|
|
||
|
add_custom_command(
|
||
|
OUTPUT ${MPY_FROZEN_CONTENT}
|
||
|
COMMAND python3 ${MPY_DIR}/tools/makemanifest.py -o ${MPY_FROZEN_CONTENT} -v "MPY_DIR=${MPY_DIR}" -v "PORT_DIR=${PROJECT_SOURCE_DIR}" -b "${CMAKE_BINARY_DIR}" -f${MPY_CROSS_FLAGS} ${FROZEN_MANIFEST}
|
||
|
DEPENDS FORCE_BUILD
|
||
|
${MPY_QSTR_DEFS_GENERATED}
|
||
|
VERBATIM
|
||
|
)
|