-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathCMakeLists.txt
173 lines (146 loc) · 6.35 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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
cmake_minimum_required(VERSION 3.10.2)
project(xmotion VERSION 0.1.0)
message(STATUS "------------------------------------------------")
if (PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME)
set(BUILD_AS_MODULE OFF)
message(STATUS "Build libxmotion as a standalone project")
else ()
set(BUILD_AS_MODULE ON)
message(STATUS "Build libxmotion as a module")
endif ()
message(STATUS "------------------------------------------------")
find_program(CCACHE_PROGRAM ccache)
if (CCACHE_PROGRAM)
message(STATUS "Found ccache")
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
endif ()
## Project Options
option(BUILD_TESTING "Build tests" ON)
option(STATIC_CHECK "Enable static check" OFF)
option(ENABLE_LOGGING "Enable logging" ON)
option(ENABLE_VISUALIZATION "Enable visualization targets" ON)
option(USE_SYS_SPDLOG "Use system spdlog" OFF)
option(XMOTION_DEV_MODE "Development mode forces building tests" OFF)
if (DEFINED ENV{ROS_DISTRO} AND "$ENV{ROS_DISTRO}" STREQUAL "humble")
message(STATUS "ROS_DISTRO is $ENV{ROS_DISTRO}, use system spdlog")
set(USE_SYS_SPDLOG ON)
endif ()
if (BUILD_AS_MODULE OR (NOT (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")))
message(STATUS "Visualization targets are not build on non-x86_64 or when built as module")
set(ENABLE_VISUALIZATION OFF)
else ()
message(STATUS "Visualization targets enabled")
endif ()
## Generate symbols for IDE indexer
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
if (STATIC_CHECK)
find_program(CPPCHECK cppcheck)
if (CPPCHECK)
message(STATUS "Found cppcheck")
set(CMAKE_CXX_CPPCHECK cppcheck;--std=c++11;--enable=all)
endif ()
endif ()
## Additional cmake module path
set(USER_CMAKE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
list(APPEND CMAKE_MODULE_PATH "${USER_CMAKE_PATH}/modules")
list(APPEND CMAKE_PREFIX_PATH "/usr/lib/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/cmake")
## Set compiler to use c++ 17 features
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
## Use GNUInstallDirs to install libraries into correct locations on all platforms.
include(GNUInstallDirs)
## Put all binary files into /bin and libraries into /lib
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
if (XMOTION_DEV_MODE)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})
else ()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})
endif ()
if (XMOTION_DEV_MODE)
message(STATUS "xmotion development mode enabled")
endif ()
## Chosse build type
set(default_build_type "Release")
if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE
STRING "Choose the type of build." FORCE)
# Set the possible values of build type for cmake-gui
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
"Debug" "Release" "MinSizeRel" "RelWithDebInfo")
endif ()
if (ENABLE_LOGGING)
message("-- Enable logging with spdlog -- Yes")
message("-- Default log file storage location: ~/.xmotion/log")
else (ENABLE_LOGGING)
message("-- Disable logging with spdlog")
endif (ENABLE_LOGGING)
## Enable test if requested
if (((NOT BUILD_AS_MODULE) AND BUILD_TESTING) OR XMOTION_DEV_MODE)
enable_testing()
include(GoogleTest)
set(BUILD_TESTS ON)
message(STATUS "xmotion tests will be built")
else ()
set(BUILD_TESTS OFF)
message(STATUS "xmotion tests will not be built")
endif ()
## Enable -fPIC for all targets
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
## Dependent libraries
add_subdirectory(third_party)
## Add source directories
add_subdirectory(src)
## Installation setup
# Offer the user the choice of overriding the installation directories
set(INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH "Installation directory for libraries")
set(INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR} CACHE PATH "Installation directory for executables")
set(INSTALL_INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH "Installation directory for header files")
if (WIN32 AND NOT CYGWIN)
set(DEF_INSTALL_CMAKEDIR CMake)
else ()
set(DEF_INSTALL_CMAKEDIR share/cmake/${PROJECT_NAME})
endif ()
set(INSTALL_CMAKEDIR ${DEF_INSTALL_CMAKEDIR} CACHE PATH "Installation directory for CMake files")
# print installation paths
message(STATUS "Project will be installed to ${CMAKE_INSTALL_PREFIX} with 'make install'")
foreach (p LIB BIN INCLUDE CMAKE)
file(TO_NATIVE_PATH ${CMAKE_INSTALL_PREFIX}/${INSTALL_${p}DIR} _path)
message(STATUS " - To install ${p} components to ${_path}")
unset(_path)
endforeach ()
# export target configuration
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
xmotionConfigVersion.cmake
VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}.${${PROJECT_NAME}_VERSION_PATCH}"
COMPATIBILITY SameMajorVersion)
install(EXPORT xmotionTargets
FILE xmotionTargets.cmake
NAMESPACE xmotion::
DESTINATION lib/cmake/xmotion)
configure_file(cmake/xmotionConfig.cmake.in xmotionConfig.cmake @ONLY)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/xmotionConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/xmotionConfigVersion.cmake"
DESTINATION lib/cmake/xmotion)
# Packaging support
set(CPACK_DEBIAN_PACKAGE_NAME "libxmotion")
set(CPACK_PACKAGE_VENDOR "Ruixiang Du")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "xMotion Library - a library for robot motion planning and control")
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/xmotion")
set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
# set(CPACK_DEBIAN_PACKAGE_DEPENDS "abc (>= 0.1.2), xyz (<< 0.3.4)")
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libgl1-mesa-dev, libglfw3-dev, libcairo2-dev,
libtbb-dev, libasio-dev, libboost-all-dev, libgsl-dev, libeigen3-dev, libtbb-dev,
libopencv-dev, libyaml-cpp-dev, libncurses-dev, libevdev-dev, libmodbus-dev, libpcl-dev")
set(CPACK_GENERATOR "DEB")
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Ruixiang Du (ruixiang.du@gmail.com)")
set(CPACK_SOURCE_IGNORE_FILES .git dist .*build.* /\\\\.DS_Store)
include(CPack)