# Create a target for all user modules to link against. add_library(usermod INTERFACE) function(usermod_gather_sources SOURCES_VARNAME INCLUDE_DIRECTORIES_VARNAME INCLUDED_VARNAME LIB) if (NOT ${LIB} IN_LIST ${INCLUDED_VARNAME}) list(APPEND ${INCLUDED_VARNAME} ${LIB}) # Gather library sources get_target_property(lib_sources ${LIB} INTERFACE_SOURCES) if (lib_sources) list(APPEND ${SOURCES_VARNAME} ${lib_sources}) endif() # Gather library includes get_target_property(lib_include_directories ${LIB} INTERFACE_INCLUDE_DIRECTORIES) if (lib_include_directories) list(APPEND ${INCLUDE_DIRECTORIES_VARNAME} ${lib_include_directories}) endif() # Recurse linked libraries get_target_property(trans_depend ${LIB} INTERFACE_LINK_LIBRARIES) if (trans_depend) foreach(SUB_LIB ${trans_depend}) usermod_gather_sources( ${SOURCES_VARNAME} ${INCLUDE_DIRECTORIES_VARNAME} ${INCLUDED_VARNAME} ${SUB_LIB}) endforeach() endif() set(${SOURCES_VARNAME} ${${SOURCES_VARNAME}} PARENT_SCOPE) set(${INCLUDE_DIRECTORIES_VARNAME} ${${INCLUDE_DIRECTORIES_VARNAME}} PARENT_SCOPE) set(${INCLUDED_VARNAME} ${${INCLUDED_VARNAME}} PARENT_SCOPE) endif() endfunction() # Include CMake files for user modules. if (USER_C_MODULES) foreach(USER_C_MODULE_PATH ${USER_C_MODULES}) message("Including User C Module(s) from ${USER_C_MODULE_PATH}") include(${USER_C_MODULE_PATH}) endforeach() endif() # Recursively gather sources for QSTR scanning - doesn't support generator expressions. usermod_gather_sources(MICROPY_SOURCE_USERMOD MICROPY_INC_USERMOD found_modules usermod) # Report found modules. list(REMOVE_ITEM found_modules "usermod") list(JOIN found_modules ", " found_modules) message("Found User C Module(s): ${found_modules}")