Skip to content

Commit a1e3fd7

Browse files
committed
init
1 parent e9a1474 commit a1e3fd7

File tree

104 files changed

+38883
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

104 files changed

+38883
-0
lines changed

CMakeLists.txt

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
cmake_minimum_required(VERSION 3.5)
2+
project(SLIM LANGUAGES C CXX)
3+
4+
set(CMAKE_BUILD_TYPE "Release")
5+
set(CMAKE_CXX_FLAGS "-std=c++14 -O3 -fPIC")
6+
7+
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules)
8+
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
9+
10+
find_package(CUDAToolkit REQUIRED)
11+
12+
include(GNUInstallDirs)
13+
14+
# Global CXX flags/options
15+
set(CMAKE_CXX_STANDARD 14)
16+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
17+
set(CMAKE_CXX_EXTENSIONS OFF)
18+
19+
# Global CUDA CXX flags/options
20+
set(CUDA_HOST_COMPILER ${CMAKE_CXX_COMPILER})
21+
set(CMAKE_CUDA_STANDARD 14)
22+
set(CMAKE_CUDA_STANDARD_REQUIRED ON)
23+
set(CMAKE_CUDA_EXTENSIONS OFF)
24+
25+
# Debug options
26+
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} -O0 -g")
27+
set(CMAKE_CUDA_FLAGS_DEBUG "${CMAKE_CUDA_FLAGS} -O0 -g -lineinfo")
28+
29+
find_package(Eigen REQUIRED)
30+
find_package(Ceres REQUIRED)
31+
find_package(OpenCV REQUIRED)
32+
find_package(PCL REQUIRED)
33+
find_package(OpenMP REQUIRED)
34+
find_package(Pangolin REQUIRED)
35+
find_package(Boost REQUIRED COMPONENTS regex thread system filesystem)
36+
find_package(Boost REQUIRED COMPONENTS graph filesystem)
37+
38+
add_definitions(-DBOOST_NO_CXX11_SCOPED_ENUMS)
39+
40+
add_subdirectory(thirdparty/pmc)
41+
add_subdirectory(modules/spmm)
42+
add_subdirectory(backward-cpp)
43+
44+
include_directories(
45+
${EIGEN3_INCLUDE_DIR}
46+
${CERES_INCLUDE_DIRS}
47+
${PCL_INCLUDE_DIRS}
48+
${OpenCV_INCLUDE_DIRS}
49+
${Pangolin_INCLUDE_DIR}
50+
${Boost_INCLUDE_DIRS}
51+
${Boost_INCLUDE_DIRS}
52+
${CMAKE_CURRENT_LIST_DIR}/include
53+
modules
54+
modules/factor
55+
modules/dbscan
56+
thirdparty
57+
thirdparty/pmc
58+
)
59+
60+
add_library(SLIM
61+
modules/vector_map.cpp
62+
modules/viewer.cpp
63+
modules/frame.cpp
64+
modules/landmark.cpp
65+
modules/voxel.cpp
66+
modules/pcm_solver.cpp
67+
modules/extractor.cpp
68+
modules/scene_graph.cpp
69+
modules/multi_map_merger.cpp
70+
modules/clipper.cpp
71+
modules/locator.cpp
72+
modules/nfr_solver.cpp
73+
modules/json.cpp
74+
modules/observation.cpp
75+
modules/utility.cpp
76+
modules/factor/marginalization_factor.cpp
77+
modules/factor/laser_edge_factor.cpp
78+
modules/factor/laser_surf_factor.cpp
79+
modules/factor/relative_pose_factor.cpp
80+
modules/factor/prior_pose_factor.cpp
81+
modules/factor/local_param.cpp
82+
)
83+
84+
target_link_libraries(SLIM
85+
${CERES_LIBRARIES}
86+
${PCL_LIBRARIES}
87+
${OpenCV_LIBRARIES}
88+
${Pangolin_LIBRARY}
89+
${Boost_LIBRARIES}
90+
${Boost_LIBRARY_DIRS}
91+
spmm
92+
OpenMP::OpenMP_CXX
93+
pmc_slim
94+
)
95+
96+
add_executable(offline_mapping test/offline_mapping.cpp ${BACKWARD_ENABLE})
97+
target_link_libraries(offline_mapping SLIM )
98+
add_backward(offline_mapping)
99+
100+
add_executable(cloud_visualizer test/cloud_visualizer.cpp)
101+
target_link_libraries(cloud_visualizer SLIM )
102+
103+
add_executable(map_merge test/map_merge.cpp ${BACKWARD_ENABLE})
104+
target_link_libraries(map_merge SLIM )
105+
add_backward(map_merge)
106+
107+
add_executable(map_visualizer test/map_visualizer.cpp ${BACKWARD_ENABLE})
108+
target_link_libraries(map_visualizer SLIM )
109+
add_backward(map_visualizer)
110+
111+
add_executable(relocalization test/relocalization.cpp ${BACKWARD_ENABLE})
112+
target_link_libraries(relocalization SLIM )
113+
add_backward(relocalization)

backward-cpp/BackwardConfig.cmake

Lines changed: 239 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,239 @@
1+
#
2+
# BackwardMacros.cmake
3+
# Copyright 2013 Google Inc. All Rights Reserved.
4+
#
5+
# Permission is hereby granted, free of charge, to any person obtaining a copy
6+
# of this software and associated documentation files (the "Software"), to deal
7+
# in the Software without restriction, including without limitation the rights
8+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
# copies of the Software, and to permit persons to whom the Software is
10+
# furnished to do so, subject to the following conditions:
11+
#
12+
# The above copyright notice and this permission notice shall be included in
13+
# all copies or substantial portions of the Software.
14+
#
15+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
# SOFTWARE.
22+
23+
###############################################################################
24+
# OPTIONS
25+
###############################################################################
26+
27+
set(STACK_WALKING_UNWIND TRUE CACHE BOOL
28+
"Use compiler's unwind API")
29+
set(STACK_WALKING_BACKTRACE FALSE CACHE BOOL
30+
"Use backtrace from (e)glibc for stack walking")
31+
set(STACK_WALKING_LIBUNWIND FALSE CACHE BOOL
32+
"Use libunwind for stack walking")
33+
34+
set(STACK_DETAILS_AUTO_DETECT TRUE CACHE BOOL
35+
"Auto detect backward's stack details dependencies")
36+
37+
set(STACK_DETAILS_BACKTRACE_SYMBOL FALSE CACHE BOOL
38+
"Use backtrace from (e)glibc for symbols resolution")
39+
set(STACK_DETAILS_DW FALSE CACHE BOOL
40+
"Use libdw to read debug info")
41+
set(STACK_DETAILS_BFD FALSE CACHE BOOL
42+
"Use libbfd to read debug info")
43+
set(STACK_DETAILS_DWARF FALSE CACHE BOOL
44+
"Use libdwarf/libelf to read debug info")
45+
46+
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR AND NOT DEFINED BACKWARD_TESTS)
47+
# If this is a top level CMake project, we most lixely want the tests
48+
set(BACKWARD_TESTS ON CACHE BOOL "Enable tests")
49+
else()
50+
set(BACKWARD_TESTS OFF CACHE BOOL "Enable tests")
51+
endif()
52+
###############################################################################
53+
# CONFIGS
54+
###############################################################################
55+
include(FindPackageHandleStandardArgs)
56+
57+
if (STACK_WALKING_LIBUNWIND)
58+
# libunwind works on the macOS without having to add special include
59+
# paths or libraries
60+
if (NOT APPLE)
61+
find_path(LIBUNWIND_INCLUDE_DIR NAMES "libunwind.h")
62+
find_library(LIBUNWIND_LIBRARY unwind)
63+
64+
if (LIBUNWIND_LIBRARY)
65+
include(CheckSymbolExists)
66+
check_symbol_exists(UNW_INIT_SIGNAL_FRAME libunwind.h HAVE_UNW_INIT_SIGNAL_FRAME)
67+
if (NOT HAVE_UNW_INIT_SIGNAL_FRAME)
68+
message(STATUS "libunwind does not support unwinding from signal handler frames")
69+
endif()
70+
endif()
71+
72+
set(LIBUNWIND_INCLUDE_DIRS ${LIBUNWIND_INCLUDE_DIR})
73+
set(LIBDWARF_LIBRARIES ${LIBUNWIND_LIBRARY})
74+
find_package_handle_standard_args(libunwind DEFAULT_MSG
75+
LIBUNWIND_LIBRARY LIBUNWIND_INCLUDE_DIR)
76+
mark_as_advanced(LIBUNWIND_INCLUDE_DIR LIBUNWIND_LIBRARY)
77+
list(APPEND _BACKWARD_LIBRARIES ${LIBUNWIND_LIBRARY})
78+
endif()
79+
80+
# Disable other unwinders if libunwind is found
81+
set(STACK_WALKING_UNWIND FALSE)
82+
set(STACK_WALKING_BACKTRACE FALSE)
83+
endif()
84+
85+
if (${STACK_DETAILS_AUTO_DETECT})
86+
if(NOT CMAKE_VERSION VERSION_LESS 3.17)
87+
set(_name_mismatched_arg NAME_MISMATCHED)
88+
endif()
89+
# find libdw
90+
find_path(LIBDW_INCLUDE_DIR NAMES "elfutils/libdw.h" "elfutils/libdwfl.h")
91+
find_library(LIBDW_LIBRARY dw)
92+
set(LIBDW_INCLUDE_DIRS ${LIBDW_INCLUDE_DIR} )
93+
set(LIBDW_LIBRARIES ${LIBDW_LIBRARY} )
94+
find_package_handle_standard_args(libdw REQUIRED_VARS
95+
LIBDW_LIBRARY LIBDW_INCLUDE_DIR ${_name_mismatched_arg})
96+
mark_as_advanced(LIBDW_INCLUDE_DIR LIBDW_LIBRARY)
97+
98+
# find libbfd
99+
find_path(LIBBFD_INCLUDE_DIR NAMES "bfd.h")
100+
find_path(LIBDL_INCLUDE_DIR NAMES "dlfcn.h")
101+
find_library(LIBBFD_LIBRARY bfd)
102+
find_library(LIBDL_LIBRARY dl)
103+
set(LIBBFD_INCLUDE_DIRS ${LIBBFD_INCLUDE_DIR} ${LIBDL_INCLUDE_DIR})
104+
set(LIBBFD_LIBRARIES ${LIBBFD_LIBRARY} ${LIBDL_LIBRARY})
105+
find_package_handle_standard_args(libbfd REQUIRED_VARS
106+
LIBBFD_LIBRARY LIBBFD_INCLUDE_DIR
107+
LIBDL_LIBRARY LIBDL_INCLUDE_DIR ${_name_mismatched_arg})
108+
mark_as_advanced(LIBBFD_INCLUDE_DIR LIBBFD_LIBRARY
109+
LIBDL_INCLUDE_DIR LIBDL_LIBRARY)
110+
111+
# find libdwarf
112+
find_path(LIBDWARF_INCLUDE_DIR NAMES "libdwarf.h" PATH_SUFFIXES libdwarf)
113+
find_path(LIBELF_INCLUDE_DIR NAMES "libelf.h")
114+
find_path(LIBDL_INCLUDE_DIR NAMES "dlfcn.h")
115+
find_library(LIBDWARF_LIBRARY dwarf)
116+
find_library(LIBELF_LIBRARY elf)
117+
find_library(LIBDL_LIBRARY dl)
118+
set(LIBDWARF_INCLUDE_DIRS ${LIBDWARF_INCLUDE_DIR} ${LIBELF_INCLUDE_DIR} ${LIBDL_INCLUDE_DIR})
119+
set(LIBDWARF_LIBRARIES ${LIBDWARF_LIBRARY} ${LIBELF_LIBRARY} ${LIBDL_LIBRARY})
120+
find_package_handle_standard_args(libdwarf REQUIRED_VARS
121+
LIBDWARF_LIBRARY LIBDWARF_INCLUDE_DIR
122+
LIBELF_LIBRARY LIBELF_INCLUDE_DIR
123+
LIBDL_LIBRARY LIBDL_INCLUDE_DIR ${_name_mismatched_arg})
124+
mark_as_advanced(LIBDWARF_INCLUDE_DIR LIBDWARF_LIBRARY
125+
LIBELF_INCLUDE_DIR LIBELF_LIBRARY
126+
LIBDL_INCLUDE_DIR LIBDL_LIBRARY)
127+
128+
if (LIBDW_FOUND)
129+
LIST(APPEND _BACKWARD_INCLUDE_DIRS ${LIBDW_INCLUDE_DIRS})
130+
LIST(APPEND _BACKWARD_LIBRARIES ${LIBDW_LIBRARIES})
131+
set(STACK_DETAILS_DW TRUE)
132+
set(STACK_DETAILS_BFD FALSE)
133+
set(STACK_DETAILS_DWARF FALSE)
134+
set(STACK_DETAILS_BACKTRACE_SYMBOL FALSE)
135+
elseif(LIBBFD_FOUND)
136+
LIST(APPEND _BACKWARD_INCLUDE_DIRS ${LIBBFD_INCLUDE_DIRS})
137+
LIST(APPEND _BACKWARD_LIBRARIES ${LIBBFD_LIBRARIES})
138+
139+
# If we attempt to link against static bfd, make sure to link its dependencies, too
140+
get_filename_component(bfd_lib_ext "${LIBBFD_LIBRARY}" EXT)
141+
if (bfd_lib_ext STREQUAL "${CMAKE_STATIC_LIBRARY_SUFFIX}")
142+
list(APPEND _BACKWARD_LIBRARIES iberty z)
143+
endif()
144+
145+
set(STACK_DETAILS_DW FALSE)
146+
set(STACK_DETAILS_BFD TRUE)
147+
set(STACK_DETAILS_DWARF FALSE)
148+
set(STACK_DETAILS_BACKTRACE_SYMBOL FALSE)
149+
elseif(LIBDWARF_FOUND)
150+
LIST(APPEND _BACKWARD_INCLUDE_DIRS ${LIBDWARF_INCLUDE_DIRS})
151+
LIST(APPEND _BACKWARD_LIBRARIES ${LIBDWARF_LIBRARIES})
152+
153+
set(STACK_DETAILS_DW FALSE)
154+
set(STACK_DETAILS_BFD FALSE)
155+
set(STACK_DETAILS_DWARF TRUE)
156+
set(STACK_DETAILS_BACKTRACE_SYMBOL FALSE)
157+
else()
158+
set(STACK_DETAILS_DW FALSE)
159+
set(STACK_DETAILS_BFD FALSE)
160+
set(STACK_DETAILS_DWARF FALSE)
161+
set(STACK_DETAILS_BACKTRACE_SYMBOL TRUE)
162+
endif()
163+
else()
164+
if (STACK_DETAILS_DW)
165+
LIST(APPEND _BACKWARD_LIBRARIES dw)
166+
endif()
167+
168+
if (STACK_DETAILS_BFD)
169+
LIST(APPEND _BACKWARD_LIBRARIES bfd dl)
170+
endif()
171+
172+
if (STACK_DETAILS_DWARF)
173+
LIST(APPEND _BACKWARD_LIBRARIES dwarf elf)
174+
endif()
175+
endif()
176+
177+
macro(map_definitions var_prefix define_prefix)
178+
foreach(def ${ARGN})
179+
if (${${var_prefix}${def}})
180+
LIST(APPEND _BACKWARD_DEFINITIONS "${define_prefix}${def}=1")
181+
else()
182+
LIST(APPEND _BACKWARD_DEFINITIONS "${define_prefix}${def}=0")
183+
endif()
184+
endforeach()
185+
endmacro()
186+
187+
if (NOT _BACKWARD_DEFINITIONS)
188+
map_definitions("STACK_WALKING_" "BACKWARD_HAS_" UNWIND LIBUNWIND BACKTRACE)
189+
map_definitions("STACK_DETAILS_" "BACKWARD_HAS_" BACKTRACE_SYMBOL DW BFD DWARF)
190+
endif()
191+
192+
set(BACKWARD_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR}")
193+
194+
set(BACKWARD_HAS_EXTERNAL_LIBRARIES FALSE)
195+
set(FIND_PACKAGE_REQUIRED_VARS BACKWARD_INCLUDE_DIR)
196+
if(DEFINED _BACKWARD_LIBRARIES)
197+
set(BACKWARD_HAS_EXTERNAL_LIBRARIES TRUE)
198+
list(APPEND FIND_PACKAGE_REQUIRED_VARS _BACKWARD_LIBRARIES)
199+
endif()
200+
201+
include(FindPackageHandleStandardArgs)
202+
find_package_handle_standard_args(Backward
203+
REQUIRED_VARS ${FIND_PACKAGE_REQUIRED_VARS}
204+
)
205+
list(APPEND _BACKWARD_INCLUDE_DIRS ${BACKWARD_INCLUDE_DIR})
206+
207+
macro(add_backward target)
208+
target_include_directories(${target} PRIVATE ${BACKWARD_INCLUDE_DIRS})
209+
set_property(TARGET ${target} APPEND PROPERTY COMPILE_DEFINITIONS ${BACKWARD_DEFINITIONS})
210+
set_property(TARGET ${target} APPEND PROPERTY LINK_LIBRARIES ${BACKWARD_LIBRARIES})
211+
endmacro()
212+
213+
set(BACKWARD_INCLUDE_DIRS ${_BACKWARD_INCLUDE_DIRS} CACHE INTERNAL "_BACKWARD_INCLUDE_DIRS")
214+
set(BACKWARD_DEFINITIONS ${_BACKWARD_DEFINITIONS} CACHE INTERNAL "BACKWARD_DEFINITIONS")
215+
set(BACKWARD_LIBRARIES ${_BACKWARD_LIBRARIES} CACHE INTERNAL "BACKWARD_LIBRARIES")
216+
mark_as_advanced(BACKWARD_INCLUDE_DIRS BACKWARD_DEFINITIONS BACKWARD_LIBRARIES)
217+
218+
# Expand each definition in BACKWARD_DEFINITIONS to its own cmake var and export
219+
# to outer scope
220+
foreach(var ${BACKWARD_DEFINITIONS})
221+
string(REPLACE "=" ";" var_as_list ${var})
222+
list(GET var_as_list 0 var_name)
223+
list(GET var_as_list 1 var_value)
224+
set(${var_name} ${var_value})
225+
mark_as_advanced(${var_name})
226+
endforeach()
227+
228+
if (NOT TARGET Backward::Backward)
229+
add_library(Backward::Backward INTERFACE IMPORTED)
230+
set_target_properties(Backward::Backward PROPERTIES
231+
INTERFACE_INCLUDE_DIRECTORIES "${BACKWARD_INCLUDE_DIRS}"
232+
INTERFACE_COMPILE_DEFINITIONS "${BACKWARD_DEFINITIONS}"
233+
)
234+
if(BACKWARD_HAS_EXTERNAL_LIBRARIES)
235+
set_target_properties(Backward::Backward PROPERTIES
236+
INTERFACE_LINK_LIBRARIES "${BACKWARD_LIBRARIES}"
237+
)
238+
endif()
239+
endif()

0 commit comments

Comments
 (0)