basalt/thirdparty/CMakeLists.txt

145 lines
5.3 KiB
CMake

cmake_minimum_required(VERSION 3.10...3.18)
add_library(nlohmann::json INTERFACE IMPORTED GLOBAL)
set_property(TARGET nlohmann::json PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}/json/)
add_subdirectory(basalt-headers EXCLUDE_FROM_ALL)
add_subdirectory(ros EXCLUDE_FROM_ALL)
add_subdirectory(apriltag EXCLUDE_FROM_ALL)
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Enable BUILD_SHARED_LIBS")
set(BUILD_TESTS OFF CACHE BOOL "Enable BUILD_TESTS")
set(BUILD_TOOLS OFF CACHE BOOL "Enable BUILD_TOOLS")
set(CMAKE_EXPORT_NO_PACKAGE_REGISTRY ON)
set(BUILD_PANGOLIN_LIBOPENEXR OFF CACHE BOOL "Enable BUILD_PANGOLIN_LIBOPENEXR")
set(BUILD_PANGOLIN_PYTHON OFF CACHE BOOL "Enable BUILD_PANGOLIN_PYTHON")
set(BUILD_EXAMPLES OFF CACHE BOOL "Enable BUILD_EXAMPLES")
set(BUILD_PANGOLIN_LIBREALSENSE OFF CACHE BOOL "Enable librealsense")
set(BUILD_PANGOLIN_LIBREALSENSE2 OFF CACHE BOOL "Enable librealsense2")
# disable ffmpeg b/c build is broken on macOS since 2022-02
# see: https://github.com/stevenlovegrove/Pangolin/issues/737
set(BUILD_PANGOLIN_FFMPEG OFF CACHE BOOL "Build support for ffmpeg video input")
set(EIGEN_INCLUDE_DIR "${EIGEN3_INCLUDE_DIR}")
set(EIGEN_INCLUDE_DIRS "${EIGEN3_INCLUDE_DIR}")
# Hack to disable march=native in opengv
macro(add_definitions)
if(NOT ${ARGV0} STREQUAL "-march=native")
_add_definitions(${ARGN})
endif()
endmacro()
add_subdirectory(opengv EXCLUDE_FROM_ALL)
# Hack to disable CPack in Pangolin.
macro(include)
if(NOT ${ARGV0} STREQUAL "CPack")
_include(${ARGN})
endif()
endmacro()
add_subdirectory(Pangolin EXCLUDE_FROM_ALL)
# fix aprilgrid
target_compile_options(apriltag PRIVATE "-Wno-unused-private-field")
# fix opengv: c++17 and debug postfix
set_target_properties(opengv PROPERTIES
CXX_STANDARD 17
DEBUG_POSTFIX "")
# fix opengv: compile options (CMAKE_CXX_FLAGS is overwritten by Opengv)
target_compile_options(opengv PRIVATE
-Wno-unused-private-field
${BASALT_MARCH_FLAGS}
"SHELL:${BASALT_PASSED_CXX_FLAGS}")
# TODO: enable once mpark issue is fixed upstream pangolin
#set_target_properties(pangolin PROPERTIES
# CXX_STANDARD 17)
# fix pangolin: gcc
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
target_compile_options(pangolin PRIVATE "-Wno-implicit-fallthrough")
endif()
# fix pangolin: macOS
if(APPLE)
target_compile_options(pangolin PRIVATE "-Wno-objc-missing-super-calls")
endif()
# fix pangolin: macOS >= 10.14 Mojave
if(APPLE AND CMAKE_SYSTEM_VERSION VERSION_GREATER_EQUAL 18.0.0)
target_compile_options(pangolin PRIVATE "-Wno-deprecated-declarations")
if((CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0.0)
target_compile_options(pangolin PRIVATE "-Wno-deprecated-copy")
endif()
endif()
# fix pangolin: clang
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
target_compile_options(pangolin PRIVATE "-Wno-null-pointer-arithmetic")
endif()
# fix pangolin: clang >= 8.0
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0.0)
target_compile_options(pangolin PRIVATE "-Wno-defaulted-function-deleted")
endif()
# fix pangolin: clang >= 10.0
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0.0)
target_compile_options(pangolin PRIVATE "-Wno-deprecated-copy")
endif()
# fix pangolin: clang >= 13.0
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0.0)
target_compile_options(pangolin PRIVATE "-Wno-unused-but-set-variable;-Wno-null-pointer-subtraction")
endif()
# fix pangolin: GCC >= 9.0
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9.0)
target_compile_options(pangolin PRIVATE "-Wno-stringop-truncation;-Wno-deprecated-copy")
endif()
# fix pangolin: GCC >= 10.0
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0)
target_compile_options(pangolin PRIVATE "-Wno-parentheses")
endif()
# check here the directories for the pangolin and opengv targets, and
# confirm that the eigen-related include dirs match.
foreach(_target opengv pangolin)
get_target_property(_include_dirs ${_target} INTERFACE_INCLUDE_DIRECTORIES)
foreach(_dir IN LISTS _include_dirs)
if("${_dir}" MATCHES ".*/eigen3?(/unsupported)?$")
if(NOT _dir MATCHES "^${EIGEN3_INCLUDE_DIR}.*")
endif()
endif()
endforeach()
endforeach()
# opengv and pangolin assume that eigen is found outside the source
# directory and thus include it in INTERFACE_INCLUDE_DIRECTORIES,
# which makes cmake complain that that property contains paths in the
# source folder. Thus, we update the property to only include these
# eigen paths in the "BUILD_INTERFACE" (not "INSTALL").
if (EIGEN3_INCLUDE_DIR MATCHES "^${CMAKE_SOURCE_DIR}.*")
foreach(_target opengv pangolin)
get_target_property(_include_dirs ${_target} INTERFACE_INCLUDE_DIRECTORIES)
set(_include_dirs_new "")
foreach(_dir IN LISTS _include_dirs)
if(_dir MATCHES ".*/eigen(/unsupported)?$")
string(REGEX REPLACE "(^${CMAKE_SOURCE_DIR}.*$)" "$<BUILD_INTERFACE:\\1>" _dir "${_dir}")
endif()
list(APPEND _include_dirs_new "${_dir}")
endforeach()
set_target_properties(${_target} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${_include_dirs_new}")
endforeach()
endif()