The open source OpenXR runtime
at main 262 lines 8.6 kB view raw
1# Copyright 2020-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# 2020-2021, Rylie Pavlik <rylie.pavlik@collabora.com> <rylie@ryliepavlik.com> 11 12#[[.rst: 13FindOpenGLES 14--------------- 15 16Find the OpenGL ES graphics API. 17 18Components 19^^^^^^^^^^ 20 21The following components are supported: 22 23* ``V1`` - OpenGL ES 1 (including emulation on OpenGL ES 2) 24* ``V2`` - OpenGL ES 2 25* ``V3`` - OpenGL ES 3 26* ``V31` - OpenGL ES 3.1 - same as 3 but checking also for gl31.h 27* ``V32` - OpenGL ES 3.2 - same as 3 but checking also for gl32.h 28 29If none are specified, the default is ``V2``. 30 31Targets 32^^^^^^^ 33 34If successful, some subset of the following imported targets are created. 35 36* ``OpenGLES::OpenGLESv1`` 37* ``OpenGLES::OpenGLESv2`` 38* ``OpenGLES::OpenGLESv3`` 39* ``OpenGLES::OpenGLESv31`` 40* ``OpenGLES::OpenGLESv32`` 41 42Cache variables 43^^^^^^^^^^^^^^^ 44 45The following cache variable may also be set to assist/control the operation of this module: 46 47``OpenGLES_ROOT_DIR`` 48 The root to search for OpenGLES. 49#]] 50 51set(OpenGLES_ROOT_DIR 52 "${OpenGLES_ROOT_DIR}" 53 CACHE PATH "Root to search for OpenGLES") 54 55if(NOT OpenGLES_FIND_COMPONENTS) 56 set(OpenGLES_FIND_COMPONENTS V2) 57endif() 58 59if(NOT ANDROID) 60 find_package(PkgConfig QUIET) 61 if(PKG_CONFIG_FOUND) 62 set(_old_prefix_path "${CMAKE_PREFIX_PATH}") 63 # So pkg-config uses OpenGLES_ROOT_DIR too. 64 if(OpenGLES_ROOT_DIR) 65 list(APPEND CMAKE_PREFIX_PATH ${OpenGLES_ROOT_DIR}) 66 endif() 67 pkg_check_modules(PC_glesv1_cm QUIET glesv1_cm) 68 pkg_check_modules(PC_glesv2 QUIET glesv2) 69 # Restore 70 set(CMAKE_PREFIX_PATH "${_old_prefix_path}") 71 endif() 72endif() 73 74find_path( 75 OpenGLES_V1_INCLUDE_DIR 76 NAMES GLES/gl.h 77 PATHS ${OpenGLES_ROOT_DIR} 78 HINTS ${PC_glesv2_INCLUDE_DIRS} ${PC_glesv1_cm_INCLUDE_DIRS} 79 PATH_SUFFIXES include) 80find_path( 81 OpenGLES_V2_INCLUDE_DIR 82 NAMES GLES2/gl2.h 83 PATHS ${OpenGLES_ROOT_DIR} 84 HINTS ${PC_glesv2_INCLUDE_DIRS} ${PC_glesv1_cm_INCLUDE_DIRS} 85 PATH_SUFFIXES include) 86find_path( 87 OpenGLES_V3_INCLUDE_DIR 88 NAMES GLES3/gl3.h 89 PATHS ${OpenGLES_ROOT_DIR} 90 HINTS ${OpenGLES_V1_INCLUDE_DIR} ${OpenGLES_V2_INCLUDE_DIR} 91 ${PC_glesv2_INCLUDE_DIRS} ${PC_glesv1_cm_INCLUDE_DIRS} 92 PATH_SUFFIXES include) 93find_path( 94 OpenGLES_V31_INCLUDE_DIR 95 NAMES GLES3/gl31.h 96 PATHS ${OpenGLES_ROOT_DIR} 97 HINTS ${OpenGLES_V1_INCLUDE_DIR} ${OpenGLES_V2_INCLUDE_DIR} 98 ${OpenGLES_V3_INCLUDE_DIR} ${PC_glesv2_INCLUDE_DIRS} 99 ${PC_glesv1_cm_INCLUDE_DIRS} 100 PATH_SUFFIXES include) 101find_path( 102 OpenGLES_V32_INCLUDE_DIR 103 NAMES GLES3/gl32.h 104 PATHS ${OpenGLES_ROOT_DIR} 105 HINTS ${OpenGLES_V1_INCLUDE_DIR} ${OpenGLES_V2_INCLUDE_DIR} 106 ${OpenGLES_V3_INCLUDE_DIR} ${OpenGLES_V31_INCLUDE_DIR} 107 ${PC_glesv2_INCLUDE_DIRS} ${PC_glesv1_cm_INCLUDE_DIRS} 108 PATH_SUFFIXES include) 109 110find_library( 111 OpenGLES_V1_LIBRARY 112 NAMES GLES GLESv1_CM 113 PATHS ${OpenGLES_ROOT_DIR} 114 HINTS ${PC_glesv1_cm_LIBRARY_DIRS} 115 PATH_SUFFIXES lib) 116find_library( 117 OpenGLES_V2_LIBRARY 118 NAMES GLESv2 OpenGLES # for Apple framework 119 PATHS ${OpenGLES_ROOT_DIR} 120 HINTS ${PC_glesv2_LIBRARY_DIRS} 121 PATH_SUFFIXES lib) 122find_library( 123 OpenGLES_V3_LIBRARY 124 NAMES GLESv3 125 PATHS ${OpenGLES_ROOT_DIR} 126 HINTS ${PC_glesv2_LIBRARY_DIRS} 127 PATH_SUFFIXES lib) 128 129if(OpenGLES_V2_LIBRARY AND NOT OpenGLES_V3_LIBRARY) 130 set(OpenGLES_V3_LIBRARY ${OpenGLES_V2_LIBRARY}) 131endif() 132 133set(_gles_required_vars) 134foreach(_comp IN LISTS OpenGLES_FIND_COMPONENTS) 135 if(_comp STREQUAL "V1") 136 list(APPEND _gles_required_vars OpenGLES_V1_LIBRARY 137 OpenGLES_V1_INCLUDE_DIR) 138 if(OpenGLES_V1_INCLUDE_DIR AND OpenGLES_V1_LIBRARY) 139 set(OpenGLES_${_comp}_FOUND TRUE) 140 else() 141 set(OpenGLES_${_comp}_FOUND FALSE) 142 endif() 143 elseif(_comp STREQUAL "V2") 144 list(APPEND _gles_required_vars OpenGLES_V2_LIBRARY 145 OpenGLES_V2_INCLUDE_DIR) 146 if(OpenGLES_V2_INCLUDE_DIR AND OpenGLES_V2_LIBRARY) 147 set(OpenGLES_${_comp}_FOUND TRUE) 148 else() 149 set(OpenGLES_${_comp}_FOUND FALSE) 150 endif() 151 elseif(_comp STREQUAL "V3") 152 list(APPEND _gles_required_vars OpenGLES_V3_LIBRARY 153 OpenGLES_V3_INCLUDE_DIR) 154 if(OpenGLES_V3_INCLUDE_DIR AND OpenGLES_V3_LIBRARY) 155 set(OpenGLES_${_comp}_FOUND TRUE) 156 else() 157 set(OpenGLES_${_comp}_FOUND FALSE) 158 endif() 159 elseif(_comp STREQUAL "V31") 160 list(APPEND _gles_required_vars OpenGLES_V3_LIBRARY 161 OpenGLES_V31_INCLUDE_DIR) 162 163 if(OpenGLES_V31_INCLUDE_DIR AND OpenGLES_V3_LIBRARY) 164 set(OpenGLES_${_comp}_FOUND TRUE) 165 else() 166 set(OpenGLES_${_comp}_FOUND FALSE) 167 endif() 168 elseif(_comp STREQUAL "V32") 169 list(APPEND _gles_required_vars OpenGLES_V3_LIBRARY 170 OpenGLES_V32_INCLUDE_DIR) 171 if(OpenGLES_V32_INCLUDE_DIR AND OpenGLES_V3_LIBRARY) 172 set(OpenGLES_${_comp}_FOUND TRUE) 173 else() 174 set(OpenGLES_${_comp}_FOUND FALSE) 175 endif() 176 else() 177 message( 178 WARNING "${_comp} is not a recognized OpenGL-ES component/version") 179 set(OpenGLES_${_comp}_FOUND FALSE) 180 endif() 181endforeach() 182if(_gles_required_vars) 183 list(REMOVE_DUPLICATES _gles_required_vars) 184endif() 185 186include(FindPackageHandleStandardArgs) 187find_package_handle_standard_args( 188 OpenGLES 189 REQUIRED_VARS ${_gles_required_vars} 190 HANDLE_COMPONENTS) 191if(OpenGLES_FOUND) 192 if(OpenGLES_V1_FOUND AND NOT TARGET OpenGLES::OpenGLESv1) 193 add_library(OpenGLES::OpenGLESv1 SHARED IMPORTED) 194 195 set_target_properties( 196 OpenGLES::OpenGLESv1 197 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES 198 "${OpenGLES_V1_INCLUDE_DIR}" 199 IMPORTED_LINK_INTERFACE_LANGUAGES "C" 200 IMPORTED_LOCATION ${OpenGLES_V1_LIBRARY}) 201 endif() 202 if(OpenGLES_V2_FOUND AND NOT TARGET OpenGLES::OpenGLESv2) 203 add_library(OpenGLES::OpenGLESv2 SHARED IMPORTED) 204 205 set_target_properties( 206 OpenGLES::OpenGLESv2 207 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES 208 "${OpenGLES_V2_INCLUDE_DIR}" 209 IMPORTED_LINK_INTERFACE_LANGUAGES "C" 210 IMPORTED_LOCATION ${OpenGLES_V2_LIBRARY}) 211 endif() 212 if(OpenGLES_V3_FOUND) 213 if(NOT TARGET OpenGLES::OpenGLESv3) 214 add_library(OpenGLES::OpenGLESv3 SHARED IMPORTED) 215 216 set_target_properties( 217 OpenGLES::OpenGLESv3 218 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES 219 "${OpenGLES_V3_INCLUDE_DIR}" 220 IMPORTED_LINK_INTERFACE_LANGUAGES "C" 221 IMPORTED_LOCATION ${OpenGLES_V3_LIBRARY}) 222 endif() 223 if(OpenGLES_V31_FOUND AND NOT TARGET OpenGLES::OpenGLESv31) 224 add_library(OpenGLES::OpenGLESv31 SHARED IMPORTED) 225 226 set_target_properties( 227 OpenGLES::OpenGLESv31 228 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES 229 "${OpenGLES_V31_INCLUDE_DIR}" 230 IMPORTED_LINK_INTERFACE_LANGUAGES "C" 231 IMPORTED_LOCATION ${OpenGLES_V3_LIBRARY}) 232 endif() 233 if(OpenGLES_V32_FOUND AND NOT TARGET OpenGLES::OpenGLESv32) 234 add_library(OpenGLES::OpenGLESv32 SHARED IMPORTED) 235 236 set_target_properties( 237 OpenGLES::OpenGLESv32 238 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES 239 "${OpenGLES_V32_INCLUDE_DIR}" 240 IMPORTED_LINK_INTERFACE_LANGUAGES "C" 241 IMPORTED_LOCATION ${OpenGLES_V3_LIBRARY}) 242 endif() 243 endif() 244 mark_as_advanced( 245 OpenGLES_V1_LIBRARY 246 OpenGLES_V1_INCLUDE_DIR 247 OpenGLES_V2_LIBRARY 248 OpenGLES_V2_INCLUDE_DIR 249 OpenGLES_V3_LIBRARY 250 OpenGLES_V3_INCLUDE_DIR 251 OpenGLES_V31_INCLUDE_DIR 252 OpenGLES_V32_INCLUDE_DIR) 253endif() 254mark_as_advanced(OpenGLES_ROOT_DIR) 255 256include(FeatureSummary) 257set_package_properties( 258 OpenGLES PROPERTIES 259 URL "https://www.khronos.org/opengles/" 260 DESCRIPTION 261 "A cross-platform graphics API, specialized for mobile and embedded, defined as a subset of desktop OpenGL." 262)