From 3e4e05d28bdabeb3edaab219eb8a2d93a9614560 Mon Sep 17 00:00:00 2001 From: Byoungchan Lee Date: Fri, 1 Jul 2022 18:02:57 +0900 Subject: [PATCH] Use generate_stubs without //base dependency For this I added a header called no_cfi_icall.h and use it. Also, some files use the gio header, but if the //base dependency is not used, compilation errors occur. So I added an explicit dependency on gio. Bug: webrtc:13662 Change-Id: If732ede202dd413be6702bf06bf024cd203fdae2 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/267340 Commit-Queue: Daniel.L (Byoungchan) Lee Reviewed-by: Mirko Bonadei Cr-Commit-Position: refs/heads/main@{#37395} --- modules/desktop_capture/BUILD.gn | 18 +++++++++++++++++ rtc_base/system/BUILD.gn | 6 ++++++ rtc_base/system/no_cfi_icall.h | 33 ++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 rtc_base/system/no_cfi_icall.h diff --git a/modules/desktop_capture/BUILD.gn b/modules/desktop_capture/BUILD.gn index a3fb138e63..3cc5c07aec 100644 --- a/modules/desktop_capture/BUILD.gn +++ b/modules/desktop_capture/BUILD.gn @@ -82,6 +82,11 @@ if (rtc_include_tests) { "screen_drawer_unittest.cc", "window_finder_unittest.cc", ] + + if ((is_linux || is_chromeos) && rtc_use_pipewire) { + configs += [ ":gio" ] + } + public_configs = [ ":x11_config" ] if (is_win) { @@ -111,6 +116,11 @@ if (rtc_include_tests) { "test_utils.h", "test_utils_unittest.cc", ] + + if ((is_linux || is_chromeos) && rtc_use_pipewire) { + configs += [ ":gio" ] + } + deps = [ ":desktop_capture", ":desktop_capture_mock", @@ -215,6 +225,10 @@ if (rtc_include_tests) { "mock_desktop_capturer_callback.h", ] + if ((is_linux || is_chromeos) && rtc_use_pipewire) { + configs += [ ":gio" ] + } + deps = [ ":desktop_capture", ":primitives", @@ -275,6 +289,10 @@ if (is_linux || is_chromeos) { "linux/wayland/pipewire.sigs", "linux/wayland/drm.sigs", ] + if (!build_with_chromium) { + macro_include = "rtc_base/system/no_cfi_icall.h" + macro_deps = [ "../../rtc_base/system:no_cfi_icall" ] + } } } diff --git a/rtc_base/system/BUILD.gn b/rtc_base/system/BUILD.gn index a34a151856..77f5139a2f 100644 --- a/rtc_base/system/BUILD.gn +++ b/rtc_base/system/BUILD.gn @@ -73,6 +73,12 @@ rtc_source_set("no_unique_address") { sources = [ "no_unique_address.h" ] } +rtc_source_set("no_cfi_icall") { + sources = [ "no_cfi_icall.h" ] + + deps = [ "..:sanitizer" ] +} + if (is_mac || is_ios) { rtc_library("cocoa_threading") { sources = [ diff --git a/rtc_base/system/no_cfi_icall.h b/rtc_base/system/no_cfi_icall.h new file mode 100644 index 0000000000..42d6c9c2ca --- /dev/null +++ b/rtc_base/system/no_cfi_icall.h @@ -0,0 +1,33 @@ +/* + * 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. + */ + +#ifndef RTC_BASE_SYSTEM_NO_CFI_ICALL_H_ +#define RTC_BASE_SYSTEM_NO_CFI_ICALL_H_ + +#include "rtc_base/sanitizer.h" + +// DISABLE_CFI_ICALL -- Disable Control Flow Integrity indirect call checks. +// Note that the same macro is defined in "base/compiler_specific.h". +// Only use this when building standalone WebRTC. +#if !defined(WEBRTC_CHROMIUM_BUILD) +#if !defined(DISABLE_CFI_ICALL) +#if defined(WEBRTC_WIN) +// Windows also needs __declspec(guard(nocf)). +#define DISABLE_CFI_ICALL RTC_NO_SANITIZE("cfi-icall") __declspec(guard(nocf)) +#else +#define DISABLE_CFI_ICALL RTC_NO_SANITIZE("cfi-icall") +#endif // defined(WEBRTC_WIN) +#endif // !defined(DISABLE_CFI_ICALL) +#if !defined(DISABLE_CFI_ICALL) +#define DISABLE_CFI_ICALL +#endif +#endif // !defined(WEBRTC_CHROMIUM_BUILD) + +#endif // RTC_BASE_SYSTEM_NO_CFI_ICALL_H_