CMakeLists.txt 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. cmake_minimum_required(VERSION 3.10.0)
  2. project(fast_gicp)
  3. option(BUILD_VGICP_CUDA "Build GPU-powered VGICP" OFF)
  4. option(BUILD_apps "Build application programs" ON)
  5. option(BUILD_test "Build test programs" OFF)
  6. option(BUILD_PYTHON_BINDINGS "Build python bindings" OFF)
  7. set(CMAKE_BUILD_TYPE "Release")
  8. find_package(PCL REQUIRED)
  9. find_package(Eigen3 REQUIRED)
  10. add_definitions(${PCL_DEFINITIONS})
  11. if(DEFINED ENV{ROS_VERSION})
  12. set(ROS_VERSION $ENV{ROS_VERSION})
  13. endif()
  14. if(NOT BUILD_PYTHON_BINDINGS)
  15. if(${ROS_VERSION})
  16. if(${ROS_VERSION} EQUAL 1)
  17. find_package(catkin)
  18. elseif (${ROS_VERSION} EQUAL 2)
  19. find_package(ament_cmake)
  20. endif()
  21. endif()
  22. endif()
  23. find_package(OpenMP)
  24. if (OPENMP_FOUND)
  25. set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
  26. set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
  27. endif()
  28. if(BUILD_VGICP_CUDA)
  29. find_package(CUDA REQUIRED)
  30. include_directories(${CUDA_INCLUDE_DIRS})
  31. link_directories(${CUDA_LIBRARY_DIRS})
  32. endif()
  33. ###################################
  34. ## catkin specific configuration ##
  35. ###################################
  36. if(catkin_FOUND)
  37. catkin_package(
  38. INCLUDE_DIRS include
  39. LIBRARIES fast_gicp
  40. )
  41. endif()
  42. ###########
  43. ## Build ##
  44. ###########
  45. add_library(fast_gicp SHARED
  46. src/fast_gicp/gicp/lsq_registration.cpp
  47. src/fast_gicp/gicp/fast_gicp.cpp
  48. src/fast_gicp/gicp/fast_gicp_st.cpp
  49. src/fast_gicp/gicp/fast_vgicp.cpp
  50. )
  51. target_link_libraries(fast_gicp
  52. ${PCL_LIBRARIES}
  53. )
  54. if (OPENMP_FOUND)
  55. if (TARGET OpenMP::OpenMP_CXX)
  56. target_link_libraries(fast_gicp OpenMP::OpenMP_CXX)
  57. endif ()
  58. endif ()
  59. target_include_directories(fast_gicp PUBLIC
  60. include
  61. ${PCL_INCLUDE_DIRS}
  62. ${EIGEN3_INCLUDE_DIR}
  63. )
  64. ### APPS ###
  65. if(BUILD_apps)
  66. add_executable(gicp_align src/align.cpp)
  67. add_dependencies(gicp_align fast_gicp)
  68. target_link_libraries(gicp_align
  69. ${PCL_LIBRARIES}
  70. fast_gicp
  71. )
  72. add_executable(gicp_kitti src/kitti.cpp)
  73. add_dependencies(gicp_kitti fast_gicp)
  74. target_link_libraries(gicp_kitti
  75. ${PCL_LIBRARIES}
  76. fast_gicp
  77. )
  78. endif()
  79. ### Python bindings ###
  80. if(BUILD_PYTHON_BINDINGS)
  81. add_subdirectory(thirdparty/pybind11)
  82. pybind11_add_module(pygicp
  83. src/python/main.cpp
  84. )
  85. target_include_directories(pygicp PUBLIC
  86. include
  87. ${PCL_INCLUDE_DIRS}
  88. ${EIGEN3_INCLUDE_DIR}
  89. )
  90. target_link_libraries(pygicp PRIVATE
  91. fast_gicp
  92. )
  93. endif()
  94. ### CUDA ###
  95. if(BUILD_VGICP_CUDA)
  96. set(CUDA_NVCC_FLAGS "--expt-relaxed-constexpr")
  97. add_definitions(-DUSE_VGICP_CUDA)
  98. cuda_add_library(fast_vgicp_cuda SHARED
  99. src/fast_gicp/cuda/fast_vgicp_cuda.cu
  100. src/fast_gicp/cuda/brute_force_knn.cu
  101. src/fast_gicp/cuda/covariance_estimation.cu
  102. src/fast_gicp/cuda/covariance_estimation_rbf.cu
  103. src/fast_gicp/cuda/covariance_regularization.cu
  104. src/fast_gicp/cuda/gaussian_voxelmap.cu
  105. src/fast_gicp/cuda/find_voxel_correspondences.cu
  106. src/fast_gicp/cuda/compute_derivatives.cu
  107. src/fast_gicp/cuda/compute_mahalanobis.cu
  108. src/fast_gicp/cuda/ndt_cuda.cu
  109. src/fast_gicp/cuda/ndt_compute_derivatives.cu
  110. )
  111. target_include_directories(fast_vgicp_cuda PRIVATE
  112. include
  113. thirdparty/Eigen
  114. thirdparty/nvbio
  115. ${catkin_INCLUDE_DIRS}
  116. )
  117. target_link_libraries(fast_vgicp_cuda
  118. ${catkin_LIBRARIES}
  119. )
  120. cuda_add_cublas_to_target(fast_vgicp_cuda)
  121. # add vgicp_cuda to libfast_gicp
  122. target_sources(fast_gicp PRIVATE
  123. src/fast_gicp/gicp/fast_vgicp_cuda.cpp
  124. src/fast_gicp/ndt/ndt_cuda.cpp
  125. )
  126. target_link_libraries(fast_gicp
  127. fast_vgicp_cuda
  128. )
  129. add_dependencies(fast_gicp fast_vgicp_cuda)
  130. if(catkin_FOUND)
  131. install(TARGETS fast_vgicp_cuda
  132. LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION})
  133. elseif (ament_cmake_FOUND)
  134. install(TARGETS fast_vgicp_cuda
  135. LIBRARY DESTINATION lib)
  136. endif()
  137. endif()
  138. ### TEST ###
  139. if(BUILD_test)
  140. find_package(GTest REQUIRED)
  141. add_executable(gicp_test src/test/gicp_test.cpp)
  142. add_dependencies(gicp_test fast_gicp)
  143. target_link_libraries(gicp_test ${GTEST_LIBRARIES} ${PCL_LIBRARIES} fast_gicp)
  144. gtest_add_tests(TARGET gicp_test WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} EXTRA_ARGS "${CMAKE_SOURCE_DIR}/data")
  145. endif()
  146. if(catkin_FOUND)
  147. ###################################
  148. ## catkin specific configuration ##
  149. ###################################
  150. install(TARGETS ${PROJECT_NAME}
  151. LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION})
  152. install(DIRECTORY include/
  153. DESTINATION ${CATKIN_GLOBAL_INCLUDE_DESTINATION}
  154. FILES_MATCHING PATTERN "*.hpp")
  155. elseif (ament_cmake_FOUND)
  156. ##################################
  157. ## ament specific configuration ##
  158. ##################################
  159. ament_export_include_directories(include)
  160. ament_export_libraries(fast_gicp)
  161. ament_package()
  162. install(TARGETS ${PROJECT_NAME}
  163. LIBRARY DESTINATION lib)
  164. install(
  165. DIRECTORY "include/"
  166. DESTINATION include
  167. )
  168. endif()