Initial commit

This commit is contained in:
2026-07-03 16:37:12 +07:00
commit 63b8c1ea8b
1931 changed files with 640587 additions and 0 deletions

View 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}")