| # Copyright 2020 The Chromium Authors. All rights reserved. |
| # 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", |
| "//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 = [ "*" ] |
| } |
| } |
| } |
| } |