File: BUILD.gn

package info (click to toggle)
chromium 138.0.7204.183-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 6,071,908 kB
  • sloc: cpp: 34,937,088; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,953; asm: 946,768; xml: 739,971; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,806; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (126 lines) | stat: -rw-r--r-- 3,076 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# 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("//build/config/linux/pkg_config.gni")
import("//tools/generate_stubs/rules.gni")
import("../../webrtc.gni")

if ((is_linux || is_chromeos) && rtc_use_pipewire) {
  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("gl") {
    packages = [ "gl" ]
    ignore_libs = true
  }
  pkg_config("egl") {
    packages = [ "egl" ]
    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",
      ":gl",
      ":egl",
      ":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" ]
    }
  }

  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:stringutils",
      "../../rtc_base/system:rtc_export",
      "//third_party/abseil-cpp/absl/strings",
    ]

    if (!rtc_link_pipewire) {
      defines = [ "WEBRTC_DLOPEN_PIPEWIRE" ]

      deps += [ ":pipewire_stubs" ]
    }
  }
}