aboutsummaryrefslogtreecommitdiff
path: root/circuitpython/py/usermod.cmake
diff options
context:
space:
mode:
authorRaghuram Subramani <raghus2247@gmail.com>2022-06-19 19:47:51 +0530
committerRaghuram Subramani <raghus2247@gmail.com>2022-06-19 19:47:51 +0530
commit4fd287655a72b9aea14cdac715ad5b90ed082ed2 (patch)
tree65d393bc0e699dd12d05b29ba568e04cea666207 /circuitpython/py/usermod.cmake
parent0150f70ce9c39e9e6dd878766c0620c85e47bed0 (diff)
add circuitpython code
Diffstat (limited to 'circuitpython/py/usermod.cmake')
-rw-r--r--circuitpython/py/usermod.cmake52
1 files changed, 52 insertions, 0 deletions
diff --git a/circuitpython/py/usermod.cmake b/circuitpython/py/usermod.cmake
new file mode 100644
index 0000000..8532762
--- /dev/null
+++ b/circuitpython/py/usermod.cmake
@@ -0,0 +1,52 @@
+# 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}")