The open source OpenXR runtime
at main 134 lines 4.4 kB view raw
1# Copyright 2019-2021 Collabora, Ltd. 2# 3# SPDX-License-Identifier: BSL-1.0 4# 5# Distributed under the Boost Software License, Version 1.0. 6# (See accompanying file LICENSE_1_0.txt or copy at 7# http://www.boost.org/LICENSE_1_0.txt) 8# 9# Original Author: 10# 2019-2021 Rylie Pavlik <rylie.pavlik@collabora.com> <rylie@ryliepavlik.com> 11 12#.rst: 13# FindOpenHMD 14# --------------- 15# 16# Find the OpenHMD immersive computing interface library. 17# 18# See http://www.openhmd.net/ 19# 20# Targets 21# ^^^^^^^ 22# 23# If successful, the following import target is created. 24# 25# ``openhmd::openhmd`` 26# 27# Cache variables 28# ^^^^^^^^^^^^^^^ 29# 30# The following cache variable may also be set to assist/control the operation of this module: 31# 32# ``OPENHMD_ROOT_DIR`` 33# The root to search for OpenHMD. 34 35set(OPENHMD_ROOT_DIR 36 "${OPENHMD_ROOT_DIR}" 37 CACHE PATH "Root to search for OpenHMD") 38 39if(NOT ANDROID) 40 find_package(PkgConfig QUIET) 41 if(PKG_CONFIG_FOUND) 42 set(_old_prefix_path "${CMAKE_PREFIX_PATH}") 43 # So pkg-config uses OPENHMD_ROOT_DIR too. 44 if(OPENHMD_ROOT_DIR) 45 list(APPEND CMAKE_PREFIX_PATH ${OPENHMD_ROOT_DIR}) 46 endif() 47 pkg_check_modules(PC_OPENHMD QUIET openhmd) 48 # Restore 49 set(CMAKE_PREFIX_PATH "${_old_prefix_path}") 50 endif() 51endif() 52 53find_path( 54 OPENHMD_INCLUDE_DIR 55 NAMES openhmd.h 56 PATHS ${OPENHMD_ROOT_DIR} 57 HINTS ${PC_OPENHMD_INCLUDE_DIRS} 58 PATH_SUFFIXES include openhmd include/openhmd) 59find_library( 60 OPENHMD_LIBRARY 61 NAMES openhmd 62 PATHS ${OPENHMD_ROOT_DIR} ${OPENHMD_ROOT_DIR}/build 63 HINTS ${PC_OPENHMD_LIBRARY_DIRS} 64 PATH_SUFFIXES lib) 65find_library(OPENHMD_LIBRT rt) 66find_library(OPENHMD_LIBM m) 67 68find_package(Threads QUIET) 69 70set(_ohmd_extra_deps) 71 72set(OPENHMD_HIDAPI_TYPE) 73if(OPENHMD_LIBRARY AND "${OPENHMD_LIBRARY}" MATCHES 74 "${CMAKE_STATIC_LIBRARY_SUFFIX}") 75 # Looks like a static library 76 if(PC_OPENHMD_FOUND) 77 # See if we need a particular hidapi. 78 list(REMOVE_ITEM PC_OPENHMD_LIBRARIES openhmd) 79 if("${PC_OPENHMD_LIBRARIES}" MATCHES hidapi-libusb) 80 set(OPENHMD_HIDAPI_TYPE libusb) 81 find_package(HIDAPI QUIET COMPONENTS libusb) 82 list(APPEND _ohmd_extra_deps HIDAPI_libusb_FOUND) 83 elseif("${PC_OPENHMD_LIBRARIES}" MATCHES hidapi-hidraw) 84 set(OPENHMD_HIDAPI_TYPE hidraw) 85 find_package(HIDAPI QUIET COMPONENTS hidraw) 86 list(APPEND _ohmd_extra_deps HIDAPI_hidraw_FOUND) 87 endif() 88 endif() 89 if(NOT PC_OPENHMD_FOUND OR NOT OPENHMD_HIDAPI_TYPE) 90 # Undifferentiated 91 set(OPENHMD_HIDAPI_TYPE undifferentiated) 92 find_package(HIDAPI QUIET) 93 list(APPEND _ohmd_extra_deps HIDAPI_FOUND) 94 endif() 95endif() 96 97include(FindPackageHandleStandardArgs) 98find_package_handle_standard_args( 99 OpenHMD REQUIRED_VARS OPENHMD_INCLUDE_DIR OPENHMD_LIBRARY THREADS_FOUND) 100if(OPENHMD_FOUND) 101 set(OPENHMD_INCLUDE_DIRS "${OPENHMD_INCLUDE_DIR}") 102 set(OPENHMD_LIBRARIES "${OPENHMD_LIBRARY}") 103 if(NOT TARGET OpenHMD::OpenHMD) 104 add_library(OpenHMD::OpenHMD UNKNOWN IMPORTED) 105 endif() 106 set_target_properties( 107 OpenHMD::OpenHMD 108 PROPERTIES IMPORTED_LOCATION "${OPENHMD_LIBRARY}" 109 INTERFACE_INCLUDE_DIRECTORIES "${OPENHMD_INCLUDE_DIR}" 110 IMPORTED_LINK_INTERFACE_LANGUAGES "C" 111 IMPORTED_LINK_INTERFACE_LIBRARIES Threads::Threads) 112 113 if("${OPENHMD_HIDAPI_TYPE}" STREQUAL libusb) 114 set_property( 115 TARGET OpenHMD::OpenHMD 116 APPEND 117 PROPERTY IMPORTED_LINK_INTERFACE_LIBRARIES HIDAPI::hidapi-libusb) 118 list(APPEND OPENHMD_LIBRARIES HIDAPI::hidapi-libusb) 119 elseif("${OPENHMD_HIDAPI_TYPE}" STREQUAL hidraw) 120 set_property( 121 TARGET OpenHMD::OpenHMD 122 APPEND 123 PROPERTY IMPORTED_LINK_INTERFACE_LIBRARIES HIDAPI::hidapi-hidraw) 124 list(APPEND OPENHMD_LIBRARIES HIDAPI::hidapi-hidraw) 125 elseif("${OPENHMD_HIDAPI_TYPE}" STREQUAL undifferentiated) 126 set_property( 127 TARGET OpenHMD::OpenHMD 128 APPEND 129 PROPERTY IMPORTED_LINK_INTERFACE_LIBRARIES HIDAPI::hidapi) 130 list(APPEND OPENHMD_LIBRARIES HIDAPI::hidapi) 131 endif() 132 mark_as_advanced(OPENHMD_INCLUDE_DIR OPENHMD_LIBRARY) 133endif() 134mark_as_advanced(OPENHMD_ROOT_DIR OPENHMD_LIBRT OPENHMD_LIBM)