Skip to content

Commit

Permalink
CMake refactor, drop catkin and add better organization.
Browse files Browse the repository at this point in the history
  • Loading branch information
eupedrosa committed Sep 1, 2022
1 parent a49177b commit c37402d
Show file tree
Hide file tree
Showing 132 changed files with 193 additions and 218 deletions.
109 changes: 54 additions & 55 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,61 +1,60 @@
cmake_minimum_required(VERSION 3.5)
project(iris_lama LANGUAGES CXX C)

set(IRIS_LAMA_VERSION "1.2.0")

# http://answers.ros.org/question/230877/optionally-build-a-package-with-catkin/
if( CATKIN_DEVEL_PREFIX OR catkin_FOUND OR CATKIN_BUILD_BINARY_PACKAGE)
set(COMPILING_WITH_CATKIN 1)
elseif( DEFINED ENV{AMENT_PREFIX_PATH})
set(COMPILING_WITH_AMENT 1)
endif()

set(CMAKE_CXX_STANDARD 14) # use c++14

option(COMPILE_WITH_SSE "Compile with sse4.1 for faster code" ON)
if (COMPILE_WITH_SSE)
add_compile_options(-msse4.1)
endif()


find_package(Eigen 3 QUIET)
if(NOT Eigen_FOUND)
include(${PROJECT_SOURCE_DIR}/cmake/FindEigen3.cmake)
set(Eigen_INCLUDE_DIR "${EIGEN3_INCLUDE_DIR}")
endif()

# Default to release mode.
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()

if(COMPILING_WITH_CATKIN)
message(STATUS "---------------")
message(STATUS "Catkin detected")
message(STATUS "---------------")

find_package(catkin REQUIRED)
catkin_package(
INCLUDE_DIRS include
LIBRARIES ${PROJECT_NAME}
)
elseif(COMPILING_WITH_AMENT)
message(STATUS "--------------")
message(STATUS "Ament detected")
message(STATUS "--------------")

find_package(ament_cmake REQUIRED)
ament_export_include_directories(include)
ament_export_libraries(${PROJECT_NAME})
endif()

INCLUDE_DIRECTORIES(include ${Eigen_INCLUDE_DIR})
add_subdirectory(src)
set(IRIS_LAMA_VERSION 1.2.0)

# provides default CMAKE_INSTALL_<dir> variables
include(GNUInstallDirs)
# helpers to generate <package>Config.cmake
include(CMakePackageConfigHelpers)

# install location of generated cmake config files
set(ConfigPackageLocation ${CMAKE_INSTALL_LIBDIR}/${CMAKE_PROJECT_NAME}/cmake)

if(COMPILING_WITH_AMENT)
ament_package()
# for some reason this variable is set and cmake complains it is not used.
unset( CATKIN_INSTALL_INTO_PREFIX_ROOT )
endif()
# dependencies
find_package(Eigen3 3.3 REQUIRED NO_MODULE)

# the code
add_subdirectory(src)

# libs and binaries, generate export targets
install(TARGETS iris_lama
EXPORT ${CMAKE_PROJECT_NAME}Targets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})

# header files, note the "/" after include
install(DIRECTORY include/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})

# for build tree / in workspace
export(EXPORT ${CMAKE_PROJECT_NAME}Targets
FILE ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}Targets.cmake
NAMESPACE ${CMAKE_PROJECT_NAME}::)
# exported targets
install(EXPORT ${CMAKE_PROJECT_NAME}Targets
FILE ${CMAKE_PROJECT_NAME}Targets.cmake
NAMESPACE ${CMAKE_PROJECT_NAME}::
DESTINATION ${ConfigPackageLocation})

# generate package version file
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}ConfigVersion.cmake
VERSION ${IRIS_LAMA_VERSION}
COMPATIBILITY SameMajorVersion)

# generate package configuration file
set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR})
configure_package_config_file(
${CMAKE_CURRENT_SOURCE_DIR}/cmake/${CMAKE_PROJECT_NAME}Config.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}Config.cmake
INSTALL_DESTINATION ${ConfigPackageLocation}
PATH_VARS INCLUDE_INSTALL_DIR)

# install the package configuration files
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}Config.cmake
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}ConfigVersion.cmake
DESTINATION ${ConfigPackageLocation})

89 changes: 0 additions & 89 deletions cmake/FindEigen3.cmake

This file was deleted.

18 changes: 18 additions & 0 deletions cmake/iris_lamaConfig.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# required by CMakePackageConfigHelpers
# https://cmake.org/cmake/help/latest/module/CMakePackageConfigHelpers.html
@PACKAGE_INIT@

# forward the targets
include(${CMAKE_CURRENT_LIST_DIR}/iris_lamaTargets.cmake)

# define INCLUDE_DIRS and LIBRARIES, required for catkin_package
set_and_check(iris_lama_INCLUDE_DIRS "@PACKAGE_INCLUDE_INSTALL_DIR@")
set(iris_flama_LIBRARIES iris_lama::iris_lama)

# forward dependencies AFTER expanding the @PACKAGE_<...>@ macros!!!
# otherwise the expanded paths might point to a found package
include(CMakeFindDependencyMacro)
find_dependency(Eigen3 3.3 REQUIRED NO_MODULE)

# labels the packages as found or not
check_required_components(iris_lama)
9 changes: 5 additions & 4 deletions package.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
<package>
<package format="2">

<name>iris_lama</name>
<version>1.2.0</version>
Expand All @@ -16,11 +16,12 @@

<license>BSD</license>

<buildtool_depend>catkin</buildtool_depend>
<buildtool_depend>cmake</buildtool_depend>

<build_depend>eigen</build_depend>
<run_depend>eigen</run_depend>

<export />
<export>
<build_type>cmake</build_type>
</export>

</package>
117 changes: 54 additions & 63 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,74 +1,65 @@

set(lama_SOURCES)
set(lama_SUBDIRS
# Current diretory
.
set(lama_SOURCES
# Base
buffer_compressor.cpp
graph_slam2d.cpp
image_io.cpp
loc2d.cpp
match_surface_2d.cpp
pf_slam2d.cpp
print.cpp
pose2d.cpp
pose3d.cpp
random.cpp
slam2d.cpp
thread_pool.cpp

# Non-Linear Least Squares Optimization
nlls
nlls/gauss_newton.cpp
nlls/levenberg_marquardt.cpp
nlls/robust_cost.cpp
nlls/solver.cpp

# Sparse-Dense Mapping
sdm
# Lossless data compression
extern/lz4
extern/zstd
# (mini) Smoothing and Mapping
extern/minisam/core
extern/minisam/utils
extern/minisam/linear
extern/minisam/nonlinear
sdm/container.cpp
sdm/dynamic_distance_map.cpp
sdm/export.cpp
sdm/frequency_occupancy_map.cpp
sdm/map.cpp
sdm/marching_cubes.cpp
sdm/probabilistic_occupancy_map.cpp
sdm/simple_occupancy_map.cpp
sdm/truncated_signed_distance_map.cpp
)

foreach(SUBDIR ${lama_SUBDIRS})
file(GLOB lama_SRC "${SUBDIR}/*.cpp" "${SUBDIR}/*.c")
list(APPEND lama_SOURCES ${lama_SRC})
endforeach()

add_library(${PROJECT_NAME} ${lama_SOURCES})
target_compile_options(${PROJECT_NAME} PRIVATE -Wall)
target_link_libraries(${PROJECT_NAME} pthread)

if(COMPILING_WITH_CATKIN)
install(TARGETS ${PROJECT_NAME}
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
)
install(DIRECTORY ../include/lama/
DESTINATION ${CATKIN_GLOBAL_INCLUDE_DESTINATION}/lama
PATTERN ".svn" EXCLUDE
)
elseif(COMPILING_WITH_AMENT)
install(TARGETS ${PROJECT_NAME}
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION lib
INCLUDES DESTINATION include)
install(DIRECTORY ../include/lama/
DESTINATION include/lama
PATTERN ".svn" EXCLUDE)
else()
# vendor (or third party) software
add_subdirectory(../vendor/lz4 vendor/lz4)
add_subdirectory(../vendor/minisam vendor/minisam)
add_subdirectory(../vendor/zstd vendor/zstd)

export(PACKAGE iris_lama)

install(EXPORT ${PROJECT_NAME}Targets
FILE ${PROJECT_NAME}-config.cmake
DESTINATION lib/cmake/iris_lama)

install(TARGETS ${PROJECT_NAME}
EXPORT ${PROJECT_NAME}Targets
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
INCLUDES DESTINATION include)
add_library(iris_lama ${lama_SOURCES}
$<TARGET_OBJECTS:lz4>
$<TARGET_OBJECTS:minisam>
$<TARGET_OBJECTS:zstd>
)

install(DIRECTORY ../include/lama/
DESTINATION include/lama
PATTERN ".svn" EXCLUDE)
target_include_directories(iris_lama
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
$<INSTALL_INTERFACE:include>

include(CMakePackageConfigHelpers)
write_basic_package_version_file(
iris_lama-config-version.cmake
VERSION ${IRIS_LAMA_VERSION}
COMPATIBILITY AnyNewerVersion)
PRIVATE
../vendor/lz4
../vendor/minisam
../vendor/moodycamel
../vendor/nanoflann
../vendor/stb
../vendor/zstd
)

endif()
target_compile_features(iris_lama PUBLIC cxx_std_14)
target_compile_options(iris_lama PRIVATE -Wall -Wextra)

target_link_libraries(iris_lama PUBLIC pthread Eigen3::Eigen)
target_include_directories(iris_lama PRIVATE extern/minisam)

4 changes: 2 additions & 2 deletions src/buffer_compressor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@

#include "lama/buffer_compressor.h"

#include "extern/lz4/lz4.h"
#include "extern/zstd/zstd.h"
#include "lz4/lz4.h"
#include "zstd/zstd.h"

size_t lama::LZ4BufferCompressor::compress(const char* src, size_t src_size, char** dst, char* buffer)
{
Expand Down
2 changes: 1 addition & 1 deletion src/graph_slam2d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@

#include "lama/graph_slam2d.h"

#include "extern/nanoflann/nanoflann.hpp"
#include "nanoflann/nanoflann.hpp"

template <typename Derived> struct KeyPosesNanoFlannAdaptor {

Expand Down
Loading

0 comments on commit c37402d

Please sign in to comment.