From 5a3ecb009473eb9a1b4aadc06ee10c71071e8a99 Mon Sep 17 00:00:00 2001 From: Jukka Laitinen Date: Wed, 20 Jan 2021 10:53:18 +0200 Subject: [PATCH] Auto-generate a list of kernel-side built-in modules(drivers) Signed-off-by: Jukka Laitinen --- platforms/nuttx/NuttX/CMakeLists.txt | 66 ++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/platforms/nuttx/NuttX/CMakeLists.txt b/platforms/nuttx/NuttX/CMakeLists.txt index 06c30a8cd6..0a02ccebc2 100644 --- a/platforms/nuttx/NuttX/CMakeLists.txt +++ b/platforms/nuttx/NuttX/CMakeLists.txt @@ -269,6 +269,72 @@ endif() add_custom_target(nuttx_builtin_list_target DEPENDS ${nuttx_builtin_list}) +if (NOT CONFIG_BUILD_FLAT) + +set(nuttx_kernel_builtin_list) + +set(KERNEL_BUILTIN_DIR ${PX4_BINARY_DIR}/NuttX/kernel_builtin) + +# force builtins regeneration and apps rebuild if nuttx or px4 configuration have changed +add_custom_command(OUTPUT ${KERNEL_BUILTIN_DIR}/kernel_builtins_clean.stamp + WORKING_DIRECTORY ${KERNEL_BUILTIN_DIR} + COMMAND find . -name px4_\*.bdat -delete + COMMAND find . -name px4_\*.pdat -delete + COMMAND rm -f kernel_builtin_list.h + COMMAND ${CMAKE_COMMAND} -E touch kernel_builtins_clean.stamp + DEPENDS + nuttx_context ${NUTTX_DIR}/include/nuttx/config.h ${NUTTX_DIR}/include/nuttx/version.h + px4_config_file_target ${PX4_CONFIG_FILE} + ) + +add_custom_target(kernel_builtins_clean_target DEPENDS ${KERNEL_BUILTIN_DIR}/kernel_builtins_clean.stamp) + +foreach(module ${kernel_module_libraries}) + get_target_property(MAIN ${module} MAIN) + get_target_property(STACK_MAIN ${module} STACK_MAIN) + get_target_property(PRIORITY ${module} PRIORITY) + + if(MAIN) + add_custom_command(OUTPUT ${KERNEL_BUILTIN_DIR}/registry/px4_${MAIN}_kernel_main.bdat + WORKING_DIRECTORY ${KERNEL_BUILTIN_DIR} + COMMAND echo "{ \"${MAIN}\", ${PRIORITY}, ${STACK_MAIN}, ${MAIN}_main }," > registry/px4_${MAIN}_kernel_main.bdat + COMMAND echo "{ \"${MAIN}\", ${PRIORITY}, ${STACK_MAIN}, launch_kmod_main }," > ${APPS_DIR}/builtin/registry/px4_${MAIN}_main.bdat + COMMAND ${CMAKE_COMMAND} -E touch registry/.kernel_updated + COMMAND ${CMAKE_COMMAND} -E touch ${APPS_DIR}/builtin/registry/.updated + DEPENDS + kernel_builtins_clean_target ${KERNEL_BUILTIN_DIR}/kernel_builtins_clean.stamp + builtins_clean_target ${PX4_BINARY_DIR}/NuttX/builtins_clean.stamp + nuttx_context ${NUTTX_DIR}/include/nuttx/config.h ${NUTTX_DIR}/include/nuttx/version.h + VERBATIM + ) + list(APPEND nuttx_kernel_builtin_list ${KERNEL_BUILTIN_DIR}/registry/px4_${MAIN}_kernel_main.bdat) + + add_custom_command(OUTPUT ${KERNEL_BUILTIN_DIR}/registry/px4_${MAIN}_kernel_main.pdat + WORKING_DIRECTORY ${KERNEL_BUILTIN_DIR} + COMMAND echo "int ${MAIN}_main(int argc, char *argv[]);" > registry/px4_${MAIN}_kernel_main.pdat + COMMAND ${CMAKE_COMMAND} -E touch registry/.kernel_updated + DEPENDS + kernel_builtins_clean_target + nuttx_context ${NUTTX_DIR}/include/nuttx/config.h ${NUTTX_DIR}/include/nuttx/version.h + VERBATIM + ) + list(APPEND nuttx_kernel_builtin_list ${KERNEL_BUILTIN_DIR}/registry/px4_${MAIN}_kernel_main.pdat) + + endif() +endforeach() + +add_custom_command(OUTPUT ${KERNEL_BUILTIN_DIR}/kernel_builtins.h ${KERNEL_BUILTIN_DIR}/kernel_builtin_prototypes.h + WORKING_DIRECTORY ${KERNEL_BUILTIN_DIR} + COMMAND cat registry/*.bdat > kernel_builtins.h + COMMAND cat registry/*.pdat > kernel_builtin_prototypes.h + DEPENDS ${nuttx_kernel_builtin_list} +) + +add_custom_target(nuttx_kernel_builtin_list_target DEPENDS ${KERNEL_BUILTIN_DIR}/kernel_builtins.h) + +add_dependencies(nuttx_builtin_list_target kernel_builtins_clean_target) +endif() # NOT CONFIG_BUILD_FLAT + # APPS # libapps.a