aboutsummaryrefslogtreecommitdiff
path: root/third_party/abseil-cpp/absl.gni
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/abseil-cpp/absl.gni')
-rw-r--r--third_party/abseil-cpp/absl.gni107
1 files changed, 107 insertions, 0 deletions
diff --git a/third_party/abseil-cpp/absl.gni b/third_party/abseil-cpp/absl.gni
new file mode 100644
index 0000000000..4c6cd374b9
--- /dev/null
+++ b/third_party/abseil-cpp/absl.gni
@@ -0,0 +1,107 @@
+# Copyright 2020 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# This file contains the definition of the template absl_source_set which
+# should be the only type of target needed in abseil's BUILD.gn files.
+# This template will correctly set "configs" and "public_configs" in order
+# to correctly compile abseil in Chromium.
+#
+# Usage:
+# Most of the times its usage will be similar to the example below but all
+# the arguments avilable in source_set are also available for absl_source_set.
+#
+# absl_source_set("foo") {
+# sources = [ "foo.cc" ]
+# public = [ "foo.h" ]
+# deps = [ ":bar" ]
+# }
+
+import("//build_overrides/build.gni")
+
+template("absl_source_set") {
+ source_set(target_name) {
+ forward_variables_from(invoker, "*")
+ configs -= [ "//build/config/compiler:chromium_code" ]
+ configs += [
+ "//build/config/compiler:no_chromium_code",
+ "//build/config/compiler:prevent_unsafe_narrowing",
+ "//third_party/abseil-cpp:absl_default_cflags_cc",
+ "//third_party/abseil-cpp:absl_define_config",
+ ]
+
+ if (is_component_build) {
+ defines = [ "ABSL_BUILD_DLL" ]
+ if (!is_win) {
+ configs -= [ "//build/config/gcc:symbol_visibility_hidden" ]
+ configs += [ "//build/config/gcc:symbol_visibility_default" ]
+ }
+ }
+
+ if (!defined(public_configs)) {
+ public_configs = []
+ }
+ public_configs += [ "//third_party/abseil-cpp:absl_include_config" ]
+
+ if (!defined(visibility)) {
+ # Within Chromium builds, restrict direct visibility of Abseil sources, so
+ # users must depend on //third_party/abseil-cpp:absl. This prevents use of
+ # banned targets like absl/types:any. A few targets require exceptions.
+ # TODO(crbug.com/1096380): Consider replacing build_with_chromium with
+ # is_component_build for a narrower, more accurate condition.
+ if (build_with_chromium) {
+ visibility = [
+ # Abseil itself.
+ "//third_party/abseil-cpp/*",
+
+ # GTest. It unconditionally #includes any.h if pretty-print support
+ # for absl types is enabled.
+ "//third_party/googletest/*",
+
+ # WebRTC binary to run PSNR and SSIM video quality analysis. It
+ # statically links absl and it is used by "browser_tests" when
+ # is_component_build=false but it cannot depend on the absl
+ # component because it uses absl/flags.
+ "//third_party/webrtc/rtc_tools:frame_analyzer",
+
+ # WebRTC binaries used by //:chromium_builder_asan. They both
+ # statically link absl (because they depend on absl/flags) and are
+ # used by Chromium only when is_component_build=false.
+ "//third_party/webrtc/rtc_tools:rtp_generator",
+ "//third_party/webrtc/rtc_tools:video_replay",
+
+ # Not used by Chromium directly.
+ "//chromecast/internal/*",
+ "//libassistant/*",
+ ]
+ } else {
+ visibility = [ "*" ]
+ }
+ }
+ }
+}
+
+template("absl_test") {
+ source_set(target_name) {
+ forward_variables_from(invoker, "*")
+ testonly = true
+ configs -= [ "//build/config/compiler:chromium_code" ]
+ configs += [
+ "//build/config/compiler:no_chromium_code",
+ "//third_party/abseil-cpp:absl_default_cflags_cc",
+ "//third_party/abseil-cpp:absl_define_config",
+ "//third_party/abseil-cpp:absl_test_config",
+ ]
+
+ if (!defined(public_configs)) {
+ public_configs = []
+ }
+ public_configs += [ "//third_party/abseil-cpp:absl_include_config" ]
+
+ visibility = [ "//third_party/abseil-cpp/:*" ]
+ deps += [
+ "//third_party/googletest:gmock",
+ "//third_party/googletest:gtest",
+ ]
+ }
+}