Add support for compiling modules into kernel side

Define __KERNEL__ macro during compilation and place the module in separate library

Remove default library linking to m or libc on NuttX. Add these in platform layer instead, since
they are different on kernel and user side

Signed-off-by: Jukka Laitinen <jukkax@ssrc.tii.ae>
This commit is contained in:
Jukka Laitinen
2021-09-23 13:57:37 +03:00
parent 2a40fcc23c
commit dbf7d08c23
4 changed files with 58 additions and 9 deletions
+23 -2
View File
@@ -153,9 +153,26 @@ function(px4_add_module)
# all modules can potentially use parameters and uORB
add_dependencies(${MODULE} uorb_headers)
# Check if the modules source dir exists in config_kernel_list
# in this case, treat is as a kernel side component for
# protected build
get_target_property(MODULE_SOURCE_DIR ${MODULE} SOURCE_DIR)
file(RELATIVE_PATH module ${PROJECT_SOURCE_DIR}/src ${MODULE_SOURCE_DIR})
list (FIND config_kernel_list ${module} _index)
if (${_index} GREATER -1)
set (KERNEL TRUE)
endif()
if(NOT DYNAMIC)
target_link_libraries(${MODULE} PRIVATE prebuild_targets parameters_interface px4_layer px4_platform systemlib)
set_property(GLOBAL APPEND PROPERTY PX4_MODULE_LIBRARIES ${MODULE})
target_link_libraries(${MODULE} PRIVATE prebuild_targets parameters_interface px4_platform systemlib perf)
if (${PX4_PLATFORM} STREQUAL "nuttx" AND NOT CONFIG_BUILD_FLAT AND KERNEL)
target_link_libraries(${MODULE} PRIVATE px4_kernel_layer uORB_kernel)
set_property(GLOBAL APPEND PROPERTY PX4_KERNEL_MODULE_LIBRARIES ${MODULE})
else()
target_link_libraries(${MODULE} PRIVATE px4_layer uORB)
set_property(GLOBAL APPEND PROPERTY PX4_MODULE_LIBRARIES ${MODULE})
endif()
set_property(GLOBAL APPEND PROPERTY PX4_MODULE_PATHS ${CMAKE_CURRENT_SOURCE_DIR})
px4_list_make_absolute(ABS_SRCS ${CMAKE_CURRENT_SOURCE_DIR} ${SRCS})
set_property(GLOBAL APPEND PROPERTY PX4_SRC_FILES ${ABS_SRCS})
@@ -195,6 +212,10 @@ function(px4_add_module)
target_compile_options(${MODULE} PRIVATE ${COMPILE_FLAGS})
endif()
if (KERNEL)
target_compile_options(${MODULE} PRIVATE -D__KERNEL__)
endif()
if(INCLUDES)
target_include_directories(${MODULE} PRIVATE ${INCLUDES})
endif()