Source code
Revision control
Copy as Markdown
Other Tools
# Copyright (c) 2022 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
import("//chromium/build/config/linux/pkg_config.gni")
import("//tools/generate_stubs/rules.gni")
import("../../webrtc.gni")
if ((is_linux || is_chromeos) && rtc_use_pipewire) {
if (!build_with_mozilla) {
pkg_config("gio") {
packages = [
"gio-2.0",
"gio-unix-2.0",
]
}
pkg_config("pipewire") {
packages = [ "libpipewire-0.3" ]
if (!rtc_link_pipewire) {
ignore_libs = true
}
}
pkg_config("gbm") {
packages = [ "gbm" ]
}
pkg_config("egl") {
packages = [ "egl" ]
}
pkg_config("epoxy") {
packages = [ "epoxy" ]
ignore_libs = true
}
pkg_config("libdrm") {
packages = [ "libdrm" ]
}
if (!rtc_link_pipewire) {
# When libpipewire is not directly linked, use stubs to allow for dlopening of
# the binary.
generate_stubs("pipewire_stubs") {
configs = [
"../../:common_config",
":pipewire",
]
deps = [ "../../rtc_base:logging" ]
extra_header = "pipewire_stub_header.fragment"
logging_function = "RTC_LOG(LS_VERBOSE)"
logging_include = "rtc_base/logging.h"
output_name = "pipewire_stubs"
path_from_source = "modules/portal"
sigs = [ "pipewire.sigs" ]
if (!build_with_chromium) {
macro_include = "rtc_base/system/no_cfi_icall.h"
macro_deps = [ "../../rtc_base/system:no_cfi_icall" ]
}
}
}
config("pipewire_base") {
configs = [
":gio",
":pipewire",
]
}
config("pipewire_all") {
configs = [
":pipewire_base",
":gbm",
":egl",
":epoxy",
":libdrm",
]
}
config("pipewire_config") {
defines = [ "WEBRTC_USE_PIPEWIRE" ]
# Chromecast build config overrides `WEBRTC_USE_PIPEWIRE` even when
# `rtc_use_pipewire` is not set, which causes pipewire_config to not be
# included in targets. More details in: webrtc:13898
if (is_linux && !is_castos) {
defines += [ "WEBRTC_USE_GIO" ]
}
}
} else {
config("pipewire_all") {
}
config("pipewire_config") {
}
}
rtc_library("portal") {
sources = [
"pipewire_utils.cc",
"pipewire_utils.h",
"portal_request_response.h",
"scoped_glib.cc",
"scoped_glib.h",
"xdg_desktop_portal_utils.cc",
"xdg_desktop_portal_utils.h",
"xdg_session_details.h",
]
configs += [
":gio",
":pipewire",
":pipewire_config",
]
deps = [
"../../rtc_base:checks",
"../../rtc_base:logging",
"../../rtc_base:sanitizer",
"../../rtc_base/system:rtc_export",
"//third_party/abseil-cpp/absl/strings:string_view",
]
if (!rtc_link_pipewire) {
defines = [ "WEBRTC_DLOPEN_PIPEWIRE" ]
deps += [ ":pipewire_stubs" ]
}
if (build_with_mozilla) {
configs -= [
":gio",
":pipewire",
":pipewire_config",
]
deps -= [ ":pipewire_stubs" ]
defines -= [ "WEBRTC_DLOPEN_PIPEWIRE" ]
public_deps = [
"../../third_party/pipewire",
"../../third_party/drm",
"../../third_party/gbm",
"../../third_party/libepoxy"
]
}
}
}