include(../cmakemodules/AssureCMakeRootFile.cmake) # Avoid user mistake in CMake source directory # ---------------------------------- # wxThings # ---------------------------------- option(MRPT_BUILD_wxThings "Build wxThings" ON) mark_as_advanced(MRPT_BUILD_wxThings) if(CMAKE_MRPT_HAS_WXWIDGETS AND MRPT_BUILD_wxThings) add_subdirectory(wxThings) endif() # ---------------------------------- # libfreenect: Embedded version # ---------------------------------- if(CMAKE_MRPT_HAS_FREENECT AND NOT CMAKE_MRPT_HAS_FREENECT_SYSTEM) #find_package(libusb-1.0) PKG_CHECK_MODULES(PKG_LIBUSB10 QUIET libusb-1.0 IMPORTED_TARGET GLOBAL) # PkgConfig::PKG_LIBUSB10 if (NOT PKG_LIBUSB10_FOUND) # Error: message(SEND_ERROR "*** ERROR *** Please, set libusb-1 variables, disable CMAKE_MRPT_HAS_FREENECT, or provide a system library for libfreenect.") endif() # Special stuff for windows: set(SRCS libfreenect/src/cameras.c libfreenect/src/core.c libfreenect/src/flags.c libfreenect/src/loader.c libfreenect/src/registration.c libfreenect/src/audio.c libfreenect/src/tilt.c libfreenect/src/usb_libusb10.c ) if (WIN32) list(APPEND SRCS libfreenect/platform/windows/libusb10emu/libusb-1.0/libusbemu.cpp libfreenect/platform/windows/libusb10emu/libusb-1.0/failguard.cpp ) endif() add_library(mrpt_freenect STATIC ${SRCS}) if (WIN32) target_include_directories(mrpt_freenect SYSTEM PUBLIC ${MRPT_SOURCE_DIR}/3rdparty/libfreenect/platform/windows ${MRPT_SOURCE_DIR}/3rdparty/libfreenect/platform/windows/libusb10emu ) endif() if (MSVC) set_source_files_properties(${SRCS} PROPERTIES LANGUAGE CXX) # Build as C++ endif() if (MRPT_COMPILER_IS_GCC_OR_CLANG) target_compile_options(mrpt_freenect PRIVATE -fPIC -Wno-ignored-qualifiers -Wno-unused-function -Wno-unused-const-variable ) # Needed for usleep target_compile_definitions(mrpt_freenect PRIVATE _GNU_SOURCE _BSD_SOURCE _DEFAULT_SOURCE ) endif() # Embedded version: target_include_directories(mrpt_freenect SYSTEM PUBLIC ${MRPT_SOURCE_DIR}/3rdparty/libfreenect/include ) # libfreenect.h includes libusb.h: if (LIBUSB_1_INCLUDE_DIRS) target_include_directories(mrpt_freenect SYSTEM PUBLIC ${LIBUSB_1_INCLUDE_DIRS} ${LIBUSB_1_INCLUDE_DIRS}/libusb-1.0 ) endif() target_link_libraries(mrpt_freenect PUBLIC PkgConfig::PKG_LIBUSB10) set_target_properties(mrpt_freenect PROPERTIES FOLDER "3rd party") unset(SRCS) endif() # ---------------------------------- # Build RPLIDAR? # ---------------------------------- option(MRPT_BUILD_rplidar_sdk "Build rplidar_sdk" ON) mark_as_advanced(MRPT_BUILD_rplidar_sdk) if(CMAKE_MRPT_HAS_ROBOPEAK_LIDAR AND MRPT_BUILD_rplidar_sdk) set(RPLIDAR_ROOT ${MRPT_SOURCE_DIR}/3rdparty/rplidar_sdk/sdk/) set(SRCS_LIST ${RPLIDAR_ROOT}/src/*.cpp ${RPLIDAR_ROOT}/src/hal/*.cpp ${RPLIDAR_ROOT}/src/dataunpacker/*.cpp ${RPLIDAR_ROOT}/src/dataunpacker/unpacker/*.cpp ${RPLIDAR_ROOT}/include/*.h ) if (WIN32) list(APPEND SRCS_LIST ${RPLIDAR_ROOT}/src/arch/win32/*.cpp) else() list(APPEND SRCS_LIST ${RPLIDAR_ROOT}/src/arch/linux/*.cpp) endif() file(GLOB SRCS ${SRCS_LIST}) add_library(mrpt_rplidar STATIC ${SRCS}) if (MRPT_COMPILER_IS_GCC_OR_CLANG) target_compile_options(mrpt_rplidar PRIVATE -fPIC ) endif() if(MSVC) target_compile_options(mrpt_rplidar PRIVATE /DWIN64) endif() if (MRPT_COMPILER_IS_CLANG) target_compile_options(mrpt_rplidar PRIVATE -Wno-c++11-narrowing) endif() if (CMAKE_COMPILER_IS_GNUCXX) target_compile_options(mrpt_rplidar PRIVATE -Wno-narrowing) endif() # Embedded version: target_include_directories(mrpt_rplidar SYSTEM PUBLIC $ $ ) set_target_properties(mrpt_rplidar PROPERTIES FOLDER "3rd party") if((DEFINED BUILD_mrpt-core) AND (NOT BUILD_mrpt-core)) find_package(mrpt-core REQUIRED) endif() target_link_libraries(mrpt_rplidar PRIVATE mrpt::core) # To enforce c++17 # needs to be exported, even if private, to make cmake happy since it wants # libraries to be statically-linkable: export( TARGETS mrpt_rplidar FILE "${CMAKE_CURRENT_BINARY_DIR}/mrpt_rplidar-targets.cmake" ) install(TARGETS mrpt_rplidar EXPORT mrpt_rplidar-targets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ) install(EXPORT mrpt_rplidar-targets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/mrpt_rplidar ) unset(SRCS_LIST) unset(SRCS) unset(RPLIDAR_ROOT) endif() # ---------------------------------- # Build xSens IMU library # ---------------------------------- option(MRPT_BUILD_xsens "Build mrpt_xsens lib" ON) mark_as_advanced(MRPT_BUILD_xsens) if(CMAKE_MRPT_HAS_xSENS AND MRPT_BUILD_xsens) file(GLOB_RECURSE SRCS xspublic/*.cpp xspublic/*.c xspublic/*.h ) add_library(mrpt_xsens STATIC ${SRCS}) if (MRPT_COMPILER_IS_GCC_OR_CLANG) target_compile_options(mrpt_xsens PRIVATE -fPIC -fms-extensions # Unnamed structs in unions -Wno-variadic-macros -Wno-parentheses ) target_compile_definitions(mrpt_xsens PRIVATE _POSIX_C_SOURCE=200809L # Needed to have CLOCK_REALTIME,... in gcc _LOG_TO_STDOUT ) endif() # Embedded version: target_include_directories(mrpt_xsens SYSTEM PUBLIC $ $ $ $ ) # Couldn't make this to work with a regular target_compile_options() cmd: if (MSVC) set(xsens_flag "/FI ${MRPT_SOURCE_DIR}/3rdparty/xspublic/msvc_include.h ") else() set(xsens_flag "-include xscommon_config.h -include xsens_compat.h -include xscontrollerconfig.h ") endif() set_property(TARGET mrpt_xsens APPEND_STRING PROPERTY COMPILE_FLAGS ${xsens_flag} ) if (MSVC) target_compile_definitions(mrpt_xsens PRIVATE XDA_STATIC_LIB) else() # Needed for to define timegm() target_compile_definitions(mrpt_xsens PRIVATE _GNU_SOURCE _BSD_SOURCE _DEFAULT_SOURCE ) endif() # needs to be exported, even if private, to make cmake happy since it wants # libraries to be statically-linkable: export( TARGETS mrpt_xsens FILE "${CMAKE_CURRENT_BINARY_DIR}/mrpt_xsens-targets.cmake" ) install(TARGETS mrpt_xsens EXPORT mrpt_xsens-targets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ) install(EXPORT mrpt_xsens-targets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/mrpt_xsens ) # Feature should be "cxx_std_11", but it's unknown to cmake 3.5.1 in Xenial: target_compile_features(mrpt_xsens PRIVATE cxx_constexpr) set_target_properties(mrpt_xsens PROPERTIES FOLDER "3rd party") unset(SRCS) endif() # ---------------------------------- # Built-in version of freeglut? # ---------------------------------- if(CMAKE_MRPT_HAS_OPENGL_GLUT AND NOT CMAKE_MRPT_HAS_OPENGL_GLUT_SYSTEM) file(GLOB SRCS freeglut/*.c freeglut/GL/*.h ) add_library(mrpt_freeglut STATIC ${SRCS}) if (MRPT_COMPILER_IS_GCC_OR_CLANG) target_compile_options(mrpt_freeglut PRIVATE -fPIC ) endif() CHECK_INCLUDE_FILE("sys/time.h" HAVE_SYS_TIME_H) CHECK_INCLUDE_FILE("sys/ioctl.h" HAVE_SYS_IOCTL_H) CHECK_INCLUDE_FILE("fcntl.h" HAVE_FCNTL_H) CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H) target_compile_definitions(mrpt_freeglut PUBLIC FREEGLUT_STATIC # or /DFREEGLUT_EXPORTS HAVE_SYS_TIME_H=$ HAVE_SYS_IOCTL_H=$ HAVE_FCNTL_H=$ HAVE_UNISTD_H=$ ) # Embedded version: target_include_directories(mrpt_freeglut SYSTEM PUBLIC ${MRPT_SOURCE_DIR}/3rdparty/freeglut/ ) set_target_properties(mrpt_freeglut PROPERTIES FOLDER "3rd party") # Depend on X11 lib: if (UNIX) target_link_libraries(mrpt_freeglut PUBLIC X11 ${OPENGL_glu_LIBRARY} ) endif() if (MINGW) target_link_libraries(mrpt_freeglut PRIVATE winmm ) endif() unset(SRCS) endif() # ---------------------------------- # Built-in version of Glew? # ---------------------------------- if(WIN32) file(GLOB SRCS glew/src/glew.c glew/include/GL/*.h ) add_library(mrpt_glew STATIC ${SRCS}) if (MRPT_COMPILER_IS_GCC_OR_CLANG) target_compile_options(mrpt_glew PRIVATE -fPIC ) endif() if (MINGW) target_compile_options(mrpt_glew PRIVATE -Wno-cast-function-type ) endif() target_compile_definitions(mrpt_glew PUBLIC GLEW_STATIC ) # Embedded version: target_include_directories(mrpt_glew SYSTEM PUBLIC ${MRPT_SOURCE_DIR}/3rdparty/glew/include/ ${MRPT_SOURCE_DIR}/3rdparty/glext/include/ ) set_target_properties(mrpt_glew PROPERTIES FOLDER "3rd party") unset(SRCS) endif() # ---------------------------------- # nanogui: # ---------------------------------- # Already handled in cmakemodules/script_nanogui.cmake # ---------------------------------- # libfyaml # ---------------------------------- # already handled in cmakemodules/script_libfyaml.cmake # ---------------------------------- # simpleini # ---------------------------------- # already handled in cmakemodules/script_simpleini.cmake # ---------------------------------- # nanoflann: # ---------------------------------- # Already handled in cmakemodules/script_nanoflann.cmake # ---------------------------------- # googletest # ---------------------------------- if (NOT CMAKE_MRPT_HAS_GTEST_SYSTEM) add_library(mrptgtest STATIC ${MRPT_SOURCE_DIR}/3rdparty/googletest/googletest/src/gtest-all.cc ) target_include_directories(mrptgtest PRIVATE ${MRPT_SOURCE_DIR}/3rdparty/googletest/googletest/src/ ${MRPT_SOURCE_DIR}/3rdparty/googletest/googletest/ ) target_include_directories(mrptgtest PUBLIC ${MRPT_SOURCE_DIR}/3rdparty/googletest/googletest/include/ ) mrpt_lib_target_requires_cpp17(mrptgtest) if (UNIX AND MRPT_COMPILER_IS_GCC_OR_CLANG) target_compile_options(mrptgtest PRIVATE -fPIC) endif() # Fix a "bug" in VS11 (MSVC 2012): if(MSVC) target_compile_definitions(mrptgtest PUBLIC _VARIADIC_MAX=10) endif() if(MRPT_COMPILER_IS_CLANG AND APPLE) target_compile_definitions(mrptgtest PUBLIC GTEST_USE_OWN_TR1_TUPLE=1) endif() set_target_properties(mrptgtest PROPERTIES FOLDER "3rd party") endif()