123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- cmake_minimum_required(VERSION 3.10.0)
- project(fast_gicp)
- option(BUILD_VGICP_CUDA "Build GPU-powered VGICP" OFF)
- option(BUILD_apps "Build application programs" ON)
- option(BUILD_test "Build test programs" OFF)
- option(BUILD_PYTHON_BINDINGS "Build python bindings" OFF)
- set(CMAKE_BUILD_TYPE "Release")
- find_package(PCL REQUIRED)
- find_package(Eigen3 REQUIRED)
- add_definitions(${PCL_DEFINITIONS})
- if(DEFINED ENV{ROS_VERSION})
- set(ROS_VERSION $ENV{ROS_VERSION})
- endif()
- if(NOT BUILD_PYTHON_BINDINGS)
- if(${ROS_VERSION})
- if(${ROS_VERSION} EQUAL 1)
- find_package(catkin)
- elseif (${ROS_VERSION} EQUAL 2)
- find_package(ament_cmake)
- endif()
- endif()
- endif()
- find_package(OpenMP)
- if (OPENMP_FOUND)
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
- endif()
- if(BUILD_VGICP_CUDA)
- find_package(CUDA REQUIRED)
- include_directories(${CUDA_INCLUDE_DIRS})
- link_directories(${CUDA_LIBRARY_DIRS})
- endif()
- ###################################
- ## catkin specific configuration ##
- ###################################
- if(catkin_FOUND)
- catkin_package(
- INCLUDE_DIRS include
- LIBRARIES fast_gicp
- )
- endif()
- ###########
- ## Build ##
- ###########
- add_library(fast_gicp SHARED
- src/fast_gicp/gicp/lsq_registration.cpp
- src/fast_gicp/gicp/fast_gicp.cpp
- src/fast_gicp/gicp/fast_gicp_st.cpp
- src/fast_gicp/gicp/fast_vgicp.cpp
- )
- target_link_libraries(fast_gicp
- ${PCL_LIBRARIES}
- )
- if (OPENMP_FOUND)
- if (TARGET OpenMP::OpenMP_CXX)
- target_link_libraries(fast_gicp OpenMP::OpenMP_CXX)
- endif ()
- endif ()
- target_include_directories(fast_gicp PUBLIC
- include
- ${PCL_INCLUDE_DIRS}
- ${EIGEN3_INCLUDE_DIR}
- )
- ### APPS ###
- if(BUILD_apps)
- add_executable(gicp_align src/align.cpp)
- add_dependencies(gicp_align fast_gicp)
- target_link_libraries(gicp_align
- ${PCL_LIBRARIES}
- fast_gicp
- )
- add_executable(gicp_kitti src/kitti.cpp)
- add_dependencies(gicp_kitti fast_gicp)
- target_link_libraries(gicp_kitti
- ${PCL_LIBRARIES}
- fast_gicp
- )
- endif()
- ### Python bindings ###
- if(BUILD_PYTHON_BINDINGS)
- add_subdirectory(thirdparty/pybind11)
- pybind11_add_module(pygicp
- src/python/main.cpp
- )
- target_include_directories(pygicp PUBLIC
- include
- ${PCL_INCLUDE_DIRS}
- ${EIGEN3_INCLUDE_DIR}
- )
- target_link_libraries(pygicp PRIVATE
- fast_gicp
- )
- endif()
- ### CUDA ###
- if(BUILD_VGICP_CUDA)
- set(CUDA_NVCC_FLAGS "--expt-relaxed-constexpr")
- add_definitions(-DUSE_VGICP_CUDA)
- cuda_add_library(fast_vgicp_cuda SHARED
- src/fast_gicp/cuda/fast_vgicp_cuda.cu
- src/fast_gicp/cuda/brute_force_knn.cu
- src/fast_gicp/cuda/covariance_estimation.cu
- src/fast_gicp/cuda/covariance_estimation_rbf.cu
- src/fast_gicp/cuda/covariance_regularization.cu
- src/fast_gicp/cuda/gaussian_voxelmap.cu
- src/fast_gicp/cuda/find_voxel_correspondences.cu
- src/fast_gicp/cuda/compute_derivatives.cu
- src/fast_gicp/cuda/compute_mahalanobis.cu
- src/fast_gicp/cuda/ndt_cuda.cu
- src/fast_gicp/cuda/ndt_compute_derivatives.cu
- )
- target_include_directories(fast_vgicp_cuda PRIVATE
- include
- thirdparty/Eigen
- thirdparty/nvbio
- ${catkin_INCLUDE_DIRS}
- )
- target_link_libraries(fast_vgicp_cuda
- ${catkin_LIBRARIES}
- )
- cuda_add_cublas_to_target(fast_vgicp_cuda)
- # add vgicp_cuda to libfast_gicp
- target_sources(fast_gicp PRIVATE
- src/fast_gicp/gicp/fast_vgicp_cuda.cpp
- src/fast_gicp/ndt/ndt_cuda.cpp
- )
- target_link_libraries(fast_gicp
- fast_vgicp_cuda
- )
- add_dependencies(fast_gicp fast_vgicp_cuda)
- if(catkin_FOUND)
- install(TARGETS fast_vgicp_cuda
- LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION})
- elseif (ament_cmake_FOUND)
- install(TARGETS fast_vgicp_cuda
- LIBRARY DESTINATION lib)
- endif()
- endif()
- ### TEST ###
- if(BUILD_test)
- find_package(GTest REQUIRED)
- add_executable(gicp_test src/test/gicp_test.cpp)
- add_dependencies(gicp_test fast_gicp)
- target_link_libraries(gicp_test ${GTEST_LIBRARIES} ${PCL_LIBRARIES} fast_gicp)
- gtest_add_tests(TARGET gicp_test WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} EXTRA_ARGS "${CMAKE_SOURCE_DIR}/data")
- endif()
- if(catkin_FOUND)
- ###################################
- ## catkin specific configuration ##
- ###################################
- install(TARGETS ${PROJECT_NAME}
- LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION})
- install(DIRECTORY include/
- DESTINATION ${CATKIN_GLOBAL_INCLUDE_DESTINATION}
- FILES_MATCHING PATTERN "*.hpp")
- elseif (ament_cmake_FOUND)
- ##################################
- ## ament specific configuration ##
- ##################################
- ament_export_include_directories(include)
- ament_export_libraries(fast_gicp)
- ament_package()
- install(TARGETS ${PROJECT_NAME}
- LIBRARY DESTINATION lib)
- install(
- DIRECTORY "include/"
- DESTINATION include
- )
- endif()
|