# Copyright (c) Orbbec Inc. All Rights Reserved.
# Licensed under the MIT License.
cmake_minimum_required(VERSION 3.5)
set(OB_INTERFACE_DIR "${CMAKE_CURRENT_LIST_DIR}/interface")
if(OB_ENABLE_BOLT_OPENGL_COMPAT)
if(NOT ANDROID AND NOT APPLE)
find_package(OpenGL REQUIRED)
if(OPENGL_FOUND)
if(OPENGL_INCLUDE_DIR)
include_directories(${OPENGL_INCLUDE_DIR})
message(STATUS "OpenGL found: include directory: ${OPENGL_INCLUDE_DIR}")
endif()
message(STATUS "OpenGL found: libraries: ${OPENGL_gl_LIBRARY}")
add_definitions(-DOB_BOLT_OPENGL_COMPAT)
else()
message(WARNING "Femto Bolt OpenGL compatibility disabled: OpenGL not found")
endif()
else()
message(STATUS "Femto Bolt is not supported on Android/Apple platforms, skipping OpenGL check")
endif()
endif()
# modules
add_subdirectory(shared) # utils, logger, etc.
add_subdirectory(core) # core library
add_subdirectory(filter)
add_subdirectory(platform)
add_subdirectory(device)
add_subdirectory(pipeline)
add_subdirectory(media) # record playback, etc.
# config version info
if(MSVC)
set(ORBBEC_VERSIONINFO_RC "${CMAKE_BINARY_DIR}/VersionInfo.rc")
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/VersionInfo.rc.in "${ORBBEC_VERSIONINFO_RC}")
endif()
# only support shared library for now
add_library(OrbbecSDK SHARED "" ${ORBBEC_VERSIONINFO_RC})
include(GenerateExportHeader)
generate_export_header(OrbbecSDK BASE_NAME OB EXPORT_FILE_NAME ${OB_PUBLIC_HEADERS_DIR}/libobsensor/h/Export.h)
file(GLOB_RECURSE SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/impl/*.cpp ${CMAKE_CURRENT_LIST_DIR}/context/*.cpp)
file(GLOB_RECURSE HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/impl/*.hpp ${CMAKE_CURRENT_LIST_DIR}/context/*.hpp)
target_sources(OrbbecSDK PRIVATE ${SOURCE_FILES} ${HEADER_FILES})
target_link_libraries(OrbbecSDK PRIVATE ob::shared ob::core ob::filter ob::platform ob::device ob::pipeline ob::media)
target_include_directories(OrbbecSDK PRIVATE ${CMAKE_CURRENT_LIST_DIR})
target_include_directories(
OrbbecSDK PUBLIC "$<BUILD_INTERFACE:${OB_PUBLIC_HEADERS_DIR}>" "$<INSTALL_INTERFACE:include>"
)
if(UNIX)
find_package(Threads REQUIRED)
target_link_libraries(OrbbecSDK PRIVATE Threads::Threads)
endif()
# Link OpenGL libraries if found
if(OPENGL_gl_LIBRARY)
target_link_libraries(OrbbecSDK PRIVATE ${OPENGL_gl_LIBRARY})
endif()
add_library(ob::OrbbecSDK ALIAS OrbbecSDK)
ob_source_group(ob::OrbbecSDK)
if(OB_IS_MAIN_PROJECT)
install(
TARGETS OrbbecSDK
EXPORT OrbbecSDKConfig
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
install(
DIRECTORY ${OB_PUBLIC_HEADERS_DIR}
DESTINATION include
FILES_MATCHING
PATTERN "*.h"
PATTERN "*.hpp"
)
install(EXPORT OrbbecSDKConfig NAMESPACE ob:: DESTINATION lib)
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/OrbbecSDKConfigVersion.cmake"
VERSION "${PROJECT_VERSION}"
COMPATIBILITY SameMajorVersion
)
install(
FILES "${CMAKE_CURRENT_BINARY_DIR}/OrbbecSDKConfigVersion.cmake"
DESTINATION lib
)
endif()
if(OB_BUILD_SOVERSION)
set_target_properties(${PROJECT_NAME} PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION 2
)
endif()