# 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 = [ "*" ]
      }
    }
  }
}
