Skip to content

#

# cmake版本限制
cmake_minimum_required(VERSION 3.15.0)

# 项目名称,cmake要求
project(test VERSION 1.0.0)


# toolchain , build
include(ExternalProject)

set(PX4_BUILD_OPTIONS
    -DBOARD=px4_t113_default
    -DCONFIG=px4_t113_default
    -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/px4_install
    # 添加其他需要的PX4配置选项
)

ExternalProject_Add(px4_external
    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rd/px4
    BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/px4_build
    # INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/px4_install

    # 配置命令
    CMAKE_ARGS
    ${PX4_BUILD_OPTIONS}
    -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
    # -DCMAKE_PREFIX_PATH=<INSTALL_DIR>
    "$<$<BOOL:${CMAKE_TOOLCHAIN_FILE}>:-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}>"

    # 构建选项
    BUILD_ALWAYS ON
    BUILD_IN_SOURCE FALSE

    # 安装步骤(可选)
    INSTALL_COMMAND ""

    # 日志输出
    LOG_CONFIGURE TRUE
    LOG_BUILD TRUE
    LOG_INSTALL TRUE
)

set(3rdpartylib ${CMAKE_CURRENT_BINARY_DIR}/px4_build/platforms/posix/libpx4_main.so)
message("3rdpartylib: ${3rdpartylib}")

# 查找项目本身的源码
file(GLOB_RECURSE SRC_FILES "impl/*.c" "impl/*.cc" "impl/*.cpp")


add_custom_target(CopyExternalFiles
    COMMAND ${CMAKE_COMMAND} -E echo "Starting file copy..."
    COMMAND ${CMAKE_COMMAND} -E copy_directory
    ${CMAKE_CURRENT_BINARY_DIR}/px4_build/bin
    ${GOMROS_COMPLNENT_RUN}/bin
    COMMAND ${CMAKE_COMMAND} -E copy_directory
    ${CMAKE_CURRENT_BINARY_DIR}/px4_build/etc
    ${GOMROS_COMPLNENT_RUN}/etc
    DEPENDS px4_external
    COMMENT "Copying files px4_external"
)

# 生成动态库
add_library(${PROJECT_NAME} SHARED ${SRC_FILES})
add_dependencies(${PROJECT_NAME} px4_external CopyExternalFiles)



# 指明依赖的库
target_link_libraries(${PROJECT_NAME}  ${3rdpartylib}
    -pthread)

# 将include复制到run目录中,便于编译调试
file(COPY include DESTINATION ${GOMROS_COMPLNENT_RUN})

# 打包include
install(DIRECTORY include DESTINATION .)

# 打包编译出结果
install(TARGETS ${PROJECT_NAME} DESTINATION lib)
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/px4_build/bin DESTINATION .
    FILE_PERMISSIONS
    OWNER_READ OWNER_WRITE OWNER_EXECUTE
    GROUP_READ GROUP_WRITE GROUP_EXECUTE
    WORLD_READ WORLD_WRITE WORLD_EXECUTE
)
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/px4_build/etc DESTINATION .)
install(FILES ${3rdpartylib} DESTINATION lib)
# endif()