| # 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") | |
| declare_args() { | |
| absl_build_tests = build_with_chromium | |
| } | |
| template("absl_source_set") { | |
| source_set(target_name) { | |
| if (defined(invoker.testonly) && invoker.testonly && !absl_build_tests) { | |
| not_needed(invoker, "*") | |
| } else { | |
| 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 (!defined(defines)) { | |
| defines = [] | |
| } | |
| if (is_component_build) { | |
| defines += [ "ABSL_BUILD_DLL" ] | |
| if (!is_win && current_os != "aix") { | |
| 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. | |
| 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/*", | |
| ] | |
| if (!is_component_build) { | |
| visibility += [ | |
| # Not used by Chromium directly. | |
| "//chromecast/internal/*", | |
| "//libassistant/*", | |
| ] | |
| } | |
| } else { | |
| visibility = [ "*" ] | |
| } | |
| } | |
| } | |
| } | |
| } | |
| template("absl_test") { | |
| source_set(target_name) { | |
| if (!absl_build_tests) { | |
| not_needed(invoker, "*") | |
| } else { | |
| 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", | |
| ] | |
| } | |
| } | |
| } |