From 53e157d25ce78ba6cd8625b0b655b46f8e1b0a91 Mon Sep 17 00:00:00 2001 From: Mirko Bonadei Date: Fri, 15 Nov 2019 16:08:41 +0100 Subject: [PATCH] Force Chromium deps on the WebRTC component. This CL adds a visibility check to the rtc_* GN templates in order to force Chromium to depend only on publicly visible targets from //third_party/webrtc_overrides and not from //third_party/webrtc. This is required in order to ensure that the Chromium's component builds continues to work correctly without introducing direct dependency paths on WebRTC that would statically link it in multiple shared libraries. Bug: webrtc:9419 Change-Id: Ib89f4fc571512f99678ee4f61696b316374346d9 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/154344 Commit-Queue: Mirko Bonadei Reviewed-by: Dirk Pranke Reviewed-by: Karl Wiberg Cr-Commit-Position: refs/heads/master@{#29806} --- api/task_queue/BUILD.gn | 9 +++++++++ webrtc.gni | 30 ++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/api/task_queue/BUILD.gn b/api/task_queue/BUILD.gn index 7d449778bb..00be7842df 100644 --- a/api/task_queue/BUILD.gn +++ b/api/task_queue/BUILD.gn @@ -39,6 +39,15 @@ rtc_library("task_queue_test") { check_includes = false # no-presubmit-check TODO(bugs.webrtc.org/9419) if (build_with_chromium) { + visibility = [] + visibility = webrtc_default_visibility + visibility += [ + # This is the only Chromium target that can depend on this. The reason + # behind this is the fact that this is a 'testonly' target and as such + # it cannot be part of the WebRTC component. + "//third_party/blink/renderer/platform:blink_platform_unittests_sources", + ] + # Don't depend on WebRTC code outside of webrtc_overrides:webrtc_component # because this will break the WebRTC component build in Chromium. deps = [ diff --git a/webrtc.gni b/webrtc.gni index 4e0f3641f2..ec0ca54940 100644 --- a/webrtc.gni +++ b/webrtc.gni @@ -471,6 +471,21 @@ template("rtc_source_set") { } } + # Chromium should only depend on the WebRTC component in order to + # avoid to statically link WebRTC in a component build. + if (build_with_chromium) { + publicly_visible = false + foreach(v, visibility) { + if (v == "*") { + publicly_visible = true + } + } + if (publicly_visible) { + visibility = [] + visibility = webrtc_default_visibility + } + } + if (!defined(testonly) || !testonly) { configs += rtc_prod_configs } @@ -643,6 +658,21 @@ template("rtc_library") { } } + # Chromium should only depend on the WebRTC component in order to + # avoid to statically link WebRTC in a component build. + if (build_with_chromium) { + publicly_visible = false + foreach(v, visibility) { + if (v == "*") { + publicly_visible = true + } + } + if (publicly_visible) { + visibility = [] + visibility = webrtc_default_visibility + } + } + if (!defined(testonly) || !testonly) { configs += rtc_prod_configs }