Auto-generate a list of kernel-side built-in modules(drivers)

Signed-off-by: Jukka Laitinen <jukkax@ssrc.tii.ae>
This commit is contained in:
Jukka Laitinen
2021-01-20 10:53:18 +02:00
parent 07ea1e3e8b
commit 5a3ecb0094
+66
View File
@@ -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