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_