forked from norlab-ulaval/libnabo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
135 lines (116 loc) · 4.23 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
cmake_minimum_required(VERSION 2.6)
set(LIB_NAME nabo)
project("lib${LIB_NAME}")
# Extract version from header
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
execute_process(
COMMAND grep "NABO_VERSION " nabo/nabo.h
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
RESULT_VARIABLE GREP_VERSION_RESULT
OUTPUT_VARIABLE PROJECT_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if (NOT GREP_VERSION_RESULT EQUAL 0)
message(SEND_ERROR "Cannot grep version number: ${GREP_VERSION_RESULT}")
endif (NOT GREP_VERSION_RESULT EQUAL 0)
string(REGEX REPLACE ".*\"(.*)\".*" "\\1" PROJECT_VERSION "${PROJECT_VERSION}" )
# Documentation
set(DOXYFILE_LATEX false)
include(UseDoxygen)
# Compilation
add_definitions(-Wall)
# Boost required for any and cstdint on MSVC < 2010
find_package(Boost COMPONENTS REQUIRED)
if(MSVC AND (MSVC_VERSION LESS 1600))
add_definitions(-DBOOST_STDINT)
endif(MSVC AND (MSVC_VERSION LESS 1600))
# openmp
# find_package(OpenMP)
# if (OPENMP_FOUND)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS})
# endif(OPENMP_FOUND)
# eigen 2 or 3
find_path(EIGEN_INCLUDE_DIR Eigen/Core
/usr/local/include/eigen3
/usr/local/include/eigen2
/usr/local/include/eigen
/usr/include/eigen3
/usr/include/eigen2
/usr/include/eigen
/opt/ros/diamondback/stacks/geometry/eigen/include
)
# optionally, opencl
# OpenCL disabled as its code is not up-to-date with API
# set(USE_OPEN_CL "false" CACHE BOOL "Set to ON to look for OpenCL")
# if (USE_OPEN_CL)
# find_path(OPENCL_INCLUDE_DIR CL/cl.h
# /usr/local/include
# /usr/include
# )
# if (WIN32)
# find_library(OPENCL_LIBRARIES opencl64)
# if (!OPENCL_LIBRARIES)
# find_library(OPENCL_LIBRARIES opencl32)
# endif (!OPENCL_LIBRARIES)
# else (WIN32)
# find_library(OPENCL_LIBRARIES OpenCL ENV LD_LIBRARY_PATH)
# endif (WIN32)
# if (OPENCL_INCLUDE_DIR AND OPENCL_LIBRARIES)
# add_definitions(-DHAVE_OPENCL)
# set(EXTRA_LIBS ${OPENCL_LIBRARIES} ${EXTRA_LIBS})
# include_directories(${OPENCL_INCLUDE_DIR})
# add_definitions(-DOPENCL_SOURCE_DIR=\"${CMAKE_SOURCE_DIR}/nabo/opencl/\")
# message("OpenCL enabled and found, enabling CL support")
# else (OPENCL_INCLUDE_DIR AND OPENCL_LIBRARIES)
# message("OpenCL enabled but not found, disabling CL support")
# endif (OPENCL_INCLUDE_DIR AND OPENCL_LIBRARIES)
# else(USE_OPEN_CL)
# message("OpenCL disabled, not looking for it")
# endif(USE_OPEN_CL)
# include all libs so far
include_directories(${EIGEN_INCLUDE_DIR} ${Boost_INCLUDE_DIRS})
# main nabo lib
set(NABO_SRC
nabo/nabo.cpp
nabo/brute_force_cpu.cpp
nabo/kdtree_cpu.cpp
nabo/kdtree_opencl.cpp
)
set(SHARED_LIBS "false" CACHE BOOL "To build shared (true) or static (false) library")
if (SHARED_LIBS)
add_library(${LIB_NAME} SHARED ${NABO_SRC})
install(TARGETS ${LIB_NAME} LIBRARY DESTINATION lib)
else(SHARED_LIBS)
add_library(${LIB_NAME} ${NABO_SRC})
add_definitions(-fPIC)
install(TARGETS ${LIB_NAME} ARCHIVE DESTINATION lib)
endif(SHARED_LIBS)
set_target_properties(${LIB_NAME} PROPERTIES VERSION "${PROJECT_VERSION}" SOVERSION 1)
export(TARGETS ${LIB_NAME}
FILE "${PROJECT_BINARY_DIR}/libnaboTargets.cmake")
# create doc before installing
set(DOC_INSTALL_TARGET "share/doc/${PROJECT_NAME}/api" CACHE STRING "Target where to install doxygen documentation")
add_dependencies(${LIB_NAME} doc)
install(FILES nabo/nabo.h DESTINATION include/nabo)
install(FILES README.md DESTINATION share/doc/${PROJECT_NAME})
if (DOXYGEN_FOUND)
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc/html DESTINATION ${DOC_INSTALL_TARGET})
endif(DOXYGEN_FOUND)
enable_testing()
add_subdirectory(examples)
add_subdirectory(tests)
add_subdirectory(python)
# Install catkin package.xml
install(FILES package.xml DESTINATION share/libnabo)
# Create cmake configure scripts so other packages can find libnabo
get_property(libnabo_library TARGET ${LIB_NAME} PROPERTY LOCATION)
set(libnabo_include_dirs ${CMAKE_INSTALL_PREFIX}/include)
configure_file(libnaboConfig.cmake.in
"${PROJECT_BINARY_DIR}/libnaboConfig.cmake" @ONLY)
configure_file(libnaboConfigVersion.cmake.in
"${PROJECT_BINARY_DIR}/libnaboConfigVersion.cmake" @ONLY)
install(FILES
"${PROJECT_BINARY_DIR}/libnaboConfig.cmake"
"${PROJECT_BINARY_DIR}/libnaboConfigVersion.cmake"
"${PROJECT_BINARY_DIR}/libnaboTargets.cmake"
DESTINATION share/libnabo/cmake COMPONENT dev)