The open source OpenXR runtime
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)