Initial commit
This commit is contained in:
125
ipc/CeresWrapper/CMakeLists.txt
Normal file
125
ipc/CeresWrapper/CMakeLists.txt
Normal file
@@ -0,0 +1,125 @@
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
project(CeresWrapper VERSION 1.0.0 LANGUAGES CXX)
|
||||
|
||||
# Set C++ standard
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
|
||||
# Build shared library
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
# Find required packages
|
||||
find_package(Ceres REQUIRED)
|
||||
find_package(Eigen3 REQUIRED)
|
||||
|
||||
# Include directories
|
||||
include_directories(
|
||||
${CERES_INCLUDE_DIRS}
|
||||
${EIGEN3_INCLUDE_DIR}
|
||||
)
|
||||
|
||||
# Source files
|
||||
set(SOURCES
|
||||
ceres_wrapper.cc
|
||||
)
|
||||
|
||||
# Header files
|
||||
set(HEADERS
|
||||
ceres_wrapper.h
|
||||
)
|
||||
|
||||
# Create shared library
|
||||
add_library(ceres_wrapper SHARED ${SOURCES} ${HEADERS})
|
||||
|
||||
# Set library properties
|
||||
set_target_properties(ceres_wrapper PROPERTIES
|
||||
VERSION ${PROJECT_VERSION}
|
||||
SOVERSION 1
|
||||
PUBLIC_HEADER "${HEADERS}"
|
||||
CXX_VISIBILITY_PRESET hidden
|
||||
VISIBILITY_INLINES_HIDDEN ON
|
||||
)
|
||||
|
||||
# Add compile definition for export macro
|
||||
target_compile_definitions(ceres_wrapper PRIVATE CERES_WRAPPER_BUILDING)
|
||||
|
||||
# Link libraries
|
||||
target_link_libraries(ceres_wrapper
|
||||
PUBLIC
|
||||
Ceres::ceres
|
||||
Eigen3::Eigen
|
||||
)
|
||||
|
||||
# Compiler-specific options
|
||||
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
||||
target_compile_options(ceres_wrapper PRIVATE
|
||||
-Wall
|
||||
-Wextra
|
||||
-Wpedantic
|
||||
-fvisibility=hidden
|
||||
)
|
||||
endif()
|
||||
|
||||
# Install rules
|
||||
install(TARGETS ceres_wrapper
|
||||
LIBRARY DESTINATION lib
|
||||
ARCHIVE DESTINATION lib
|
||||
PUBLIC_HEADER DESTINATION include/ceres_wrapper
|
||||
)
|
||||
|
||||
# Install header
|
||||
install(FILES ${HEADERS}
|
||||
DESTINATION include/ceres_wrapper
|
||||
)
|
||||
|
||||
# ============================================================================
|
||||
# Test executable
|
||||
# ============================================================================
|
||||
|
||||
option(BUILD_TESTS "Build test executable" ON)
|
||||
|
||||
if(BUILD_TESTS)
|
||||
enable_language(C)
|
||||
|
||||
# Test source
|
||||
add_executable(ceres_wrapper_test
|
||||
ceres_wrapper_test.c
|
||||
)
|
||||
|
||||
# Link test executable
|
||||
target_link_libraries(ceres_wrapper_test
|
||||
PRIVATE
|
||||
ceres_wrapper
|
||||
Ceres::ceres
|
||||
)
|
||||
|
||||
# Include directories for test
|
||||
target_include_directories(ceres_wrapper_test PRIVATE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CERES_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
# Add compile definition for Ceres include if needed
|
||||
if(CERES_INCLUDE_DIRS)
|
||||
target_compile_definitions(ceres_wrapper_test PRIVATE
|
||||
CERES_INCLUDE_DIR="${CERES_INCLUDE_DIRS}"
|
||||
)
|
||||
endif()
|
||||
|
||||
# Add test to CTest
|
||||
add_test(NAME CeresWrapperTest COMMAND ceres_wrapper_test)
|
||||
|
||||
message(STATUS " Tests: Enabled")
|
||||
else()
|
||||
message(STATUS " Tests: Disabled")
|
||||
endif()
|
||||
|
||||
# Build configuration summary
|
||||
message(STATUS "CeresWrapper Configuration:")
|
||||
message(STATUS " Version: ${PROJECT_VERSION}")
|
||||
message(STATUS " C++ Standard: ${CMAKE_CXX_STANDARD}")
|
||||
message(STATUS " Ceres Include: ${CERES_INCLUDE_DIRS}")
|
||||
message(STATUS " Eigen3 Include: ${EIGEN3_INCLUDE_DIR}")
|
||||
message(STATUS " Build Type: ${CMAKE_BUILD_TYPE}")
|
||||
message(STATUS " Install Prefix: ${CMAKE_INSTALL_PREFIX}")
|
||||
Reference in New Issue
Block a user