blob: 8f01ec5c96294053193435e08e847352c7da2e42 [file] [log] [blame]
# Copyright 2019 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
if (is_android) {
import("//build/config/android/rules.gni")
}
import("//device/vr/buildflags/buildflags.gni")
declare_args() {
# Used to determine whether or not the OpenXR loader is allowed to consider
# paths specified by a ContentProvider on Android as valid paths to load an
# OpenXR runtime from. It is more secure, albeit potentially not spec
# compliant, to set this to false, but more spec compliant to set it to true.
# When set to true, ContentProvider paths will be considered as valid paths to
# load an OpenXR runtime from.
# When set to false, ContentProvider paths will be ignored.
# For more details see the "Android Active Runtime Location" section from:
# https://registry.khronos.org/OpenXR/specs/1.0/loader.html#active-runtime-information
allow_openxr_content_providers = false
}
if (enable_openxr) {
source_set("openxr_headers") {
# This visibility is done to help enforce the dependency that
# openxr_platform.h requires platform headers to be included before it.
# If you'd like to expand this visibility, you will need to make similar
# DEPS rules for it as are present in the below locations.
visibility = [
"//chrome/browser/vr/*",
"//chrome/test/*",
"//components/webxr/*",
"//device/vr/*",
]
sources = [
"dev/xr_android.h",
"src/include/openxr/openxr.h",
"src/include/openxr/openxr_platform.h",
"src/include/openxr/openxr_platform_defines.h",
"src/src/common/hex_and_handles.h",
]
public_configs = [ ":config" ]
}
if (is_android) {
# On Android, the loader comes with a couple more external dependencies.
source_set("jnipp") {
sources = [
"src/src/external/jnipp/jnipp.cpp",
"src/src/external/jnipp/jnipp.h",
]
cflags_cc = [ "-Wno-shadow" ]
configs += [
# JNIPP uses exceptions to communicate failures:
"//build/config/compiler:exceptions",
]
}
config("android-jni-wrappers-config") {
include_dirs = [ "src/src/external/jnipp" ]
}
source_set("android-jni-wrappers") {
sources = [
"src/src/external/android-jni-wrappers/wrap/ObjectWrapperBase.h",
"src/src/external/android-jni-wrappers/wrap/android.content.cpp",
"src/src/external/android-jni-wrappers/wrap/android.content.h",
"src/src/external/android-jni-wrappers/wrap/android.content.impl.h",
"src/src/external/android-jni-wrappers/wrap/android.database.cpp",
"src/src/external/android-jni-wrappers/wrap/android.database.h",
"src/src/external/android-jni-wrappers/wrap/android.database.impl.h",
"src/src/external/android-jni-wrappers/wrap/android.net.cpp",
"src/src/external/android-jni-wrappers/wrap/android.net.h",
"src/src/external/android-jni-wrappers/wrap/android.net.impl.h",
]
# android-jni-wrappers assume jnipp headers are in the include path and
# they also do so in the headers that are intended to be included by the
# consumer of this target, so let's add them to public_configs to
# propagate the include dirs to our consumers:
public_configs = [ ":android-jni-wrappers-config" ]
public_deps = [ ":jnipp" ]
}
}
component("openxr") {
# This visibility is done to help enforce the dependency that
# openxr_platform.h requires platform headers to be included before it.
# If you'd like to expand this visibility, you will need to make similar
# DEPS rules for it as are present in the below locations.
visibility = [
"//chrome/browser/vr/*",
"//chrome/test/*",
"//components/webxr/*",
"//device/vr/*",
]
sources = [
"dev/xr_android.h",
"src/include/openxr/openxr.h",
"src/include/openxr/openxr_platform.h",
"src/include/openxr/openxr_platform_defines.h",
"src/src/common/extra_algorithms.h",
"src/src/common/filesystem_utils.cpp",
"src/src/common/filesystem_utils.hpp",
"src/src/common/hex_and_handles.h",
"src/src/common/object_info.cpp",
"src/src/common/object_info.h",
"src/src/common/platform_utils.hpp",
"src/src/common/xr_dependencies.h",
"src/src/common/xr_linear.h",
"src/src/loader/api_layer_interface.cpp",
"src/src/loader/api_layer_interface.hpp",
"src/src/loader/exception_handling.hpp",
"src/src/loader/loader_core.cpp",
"src/src/loader/loader_init_data.cpp",
"src/src/loader/loader_init_data.hpp",
"src/src/loader/loader_instance.cpp",
"src/src/loader/loader_instance.hpp",
"src/src/loader/loader_logger.cpp",
"src/src/loader/loader_logger.hpp",
"src/src/loader/loader_logger_recorders.cpp",
"src/src/loader/loader_logger_recorders.hpp",
"src/src/loader/loader_platform.hpp",
"src/src/loader/loader_properties.cpp",
"src/src/loader/loader_properties.hpp",
"src/src/loader/manifest_file.hpp",
"src/src/loader/runtime_interface.cpp",
"src/src/loader/runtime_interface.hpp",
"src/src/loader/xr_generated_loader.cpp",
"src/src/loader/xr_generated_loader.hpp",
"src/src/xr_generated_dispatch_table_core.c",
"src/src/xr_generated_dispatch_table_core.h",
"src_overrides/src/loader/manifest_file.cpp",
]
if (is_component_build && is_win) {
sources += [ "openxr.def" ]
}
include_dirs = [
"src/include",
"src/src/common",
"src/src",
"src/src/loader",
]
deps = [ "//third_party/jsoncpp" ]
public_configs = [ ":config" ]
defines = [
"OPENXR_NON_CMAKE_BUILD",
"DISABLE_STD_FILESYSTEM",
]
if (!allow_openxr_content_providers) {
defines += [ "XRLOADER_DISABLE_CONTENT_PROVIDERS" ]
}
cflags_cc = [
"-Wno-format",
"-Wno-microsoft-cast",
"-Wno-microsoft-include",
"-Wno-unused-function",
"-Wno-extra-semi",
]
if (is_android) {
sources += [
"dev/xr_android.h",
"src/src/loader/android_utilities.h",
"src_overrides/src/loader/android_utilities.cpp",
]
deps += [ ":android-jni-wrappers" ]
# OpenXR loader on Android assumes that android-jni-wrappers are in the
# include path:
include_dirs += [ "src/src/external/android-jni-wrappers" ]
libs = [
"android",
"log",
]
}
# Missing includes are fixed upstream
# TODO(crbug.com/440183782): Remove this once a release contains the fix
use_libcxx_modules = false
}
if (is_android) {
java_group("openxr_manifest_java") {
if (allow_openxr_content_providers) {
mergeable_android_manifests =
[ "src_overrides/src/loader/AndroidManifest.xml.in" ]
}
}
}
config("config") {
# These build define flags need to be set for openxr.h to define
# constants related to Windows and D3D.
if (is_win) {
defines = [
"XRLOADER_DISABLE_EXCEPTION_HANDLING",
"XR_OS_WINDOWS",
"XR_USE_PLATFORM_WIN32",
"XR_USE_GRAPHICS_API_D3D11",
]
} else {
defines = [
"XRLOADER_DISABLE_EXCEPTION_HANDLING",
"XR_KHR_LOADER_INIT_SUPPORT",
"XR_OS_ANDROID",
"XR_USE_PLATFORM_ANDROID",
"XR_USE_GRAPHICS_API_OPENGL_ES",
]
}
}
}