Spaces:
Runtime error
Runtime error
| cmake_minimum_required(VERSION 3.15) | |
| project(motion_correction) | |
| set(CMAKE_CXX_STANDARD 17) | |
| set(CMAKE_CXX_STANDARD_REQUIRED ON) | |
| # Find Python | |
| find_package(Python3 COMPONENTS Interpreter Development REQUIRED) | |
| # Find or fetch pybind11 | |
| find_package(pybind11 CONFIG QUIET) | |
| if(NOT pybind11_FOUND) | |
| message(STATUS "pybind11 not found, fetching from GitHub...") | |
| include(FetchContent) | |
| FetchContent_Declare( | |
| pybind11 | |
| GIT_REPOSITORY https://github.com/pybind/pybind11.git | |
| GIT_TAG v2.11.1 | |
| ) | |
| FetchContent_MakeAvailable(pybind11) | |
| endif() | |
| # Find or fetch Eigen | |
| find_package(Eigen3 3.3 CONFIG QUIET) | |
| if(NOT Eigen3_FOUND) | |
| message(STATUS "Eigen3 not found, fetching from GitLab...") | |
| include(FetchContent) | |
| FetchContent_Declare( | |
| Eigen | |
| GIT_REPOSITORY https://gitlab.com/libeigen/eigen.git | |
| GIT_TAG 3.4.0 | |
| ) | |
| set(EIGEN_BUILD_DOC OFF CACHE BOOL "" FORCE) | |
| set(BUILD_TESTING OFF CACHE BOOL "" FORCE) | |
| set(EIGEN_BUILD_PKGCONFIG OFF CACHE BOOL "" FORCE) | |
| FetchContent_MakeAvailable(Eigen) | |
| endif() | |
| # Source files | |
| set(MATH_SOURCES | |
| src/cpp/Math/Matrix.cpp | |
| src/cpp/Math/Quaternion.cpp | |
| src/cpp/Math/Transform.cpp | |
| src/cpp/Math/Types.cpp | |
| src/cpp/Math/Vector.cpp | |
| ) | |
| set(ANIM_SOURCES | |
| src/cpp/AnimProcessing/InverseKinematics.cpp | |
| src/cpp/AnimProcessing/TrajectoryCorrector.cpp | |
| src/cpp/AnimProcessing/Utility.cpp | |
| ) | |
| # Create static library for the core functionality | |
| add_library(motion_correction_cpp_base STATIC ${MATH_SOURCES} ${ANIM_SOURCES}) | |
| # Enable Position Independent Code (required for linking into shared library) | |
| set_target_properties(motion_correction_cpp_base PROPERTIES POSITION_INDEPENDENT_CODE ON) | |
| target_include_directories(motion_correction_cpp_base PUBLIC | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/cpp | |
| ) | |
| if(TARGET Eigen3::Eigen) | |
| target_link_libraries(motion_correction_cpp_base PUBLIC Eigen3::Eigen) | |
| else() | |
| target_link_libraries(motion_correction_cpp_base PUBLIC eigen) | |
| endif() | |
| target_compile_definitions(motion_correction_cpp_base PUBLIC EIGEN_MPL2_ONLY) | |
| # Compiler-specific settings | |
| if(MSVC) | |
| # MSVC-specific flags | |
| target_compile_options(motion_correction_cpp_base PRIVATE /W4 /arch:AVX) | |
| else() | |
| # GCC/Clang flags (also applies to MinGW on Windows) | |
| # Enable SSE4.1 and AVX instructions for SIMD operations | |
| target_compile_options(motion_correction_cpp_base PRIVATE -Wall -Wextra -msse4.1 -mavx) | |
| endif() | |
| # Python bindings | |
| pybind11_add_module(_motion_correction src/cpp/BindingsPython.cpp) | |
| target_link_libraries(_motion_correction PRIVATE motion_correction_cpp_base) | |
| target_include_directories(_motion_correction PRIVATE | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/cpp | |
| ) | |
| # Install the Python module | |
| install(TARGETS _motion_correction LIBRARY DESTINATION python/motion_correction) | |
| install(FILES python/motion_correction/__init__.py DESTINATION python/motion_correction) | |
| install(FILES python/motion_correction/motion_postprocess.py DESTINATION python/motion_correction) | |