1*8975f5c5SAndroid Build Coastguard Worker# Copyright 2020 The Chromium Authors 2*8975f5c5SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*8975f5c5SAndroid Build Coastguard Worker# found in the LICENSE file. 4*8975f5c5SAndroid Build Coastguard Worker 5*8975f5c5SAndroid Build Coastguard Worker# This file contains the definition of the template absl_source_set which 6*8975f5c5SAndroid Build Coastguard Worker# should be the only type of target needed in abseil's BUILD.gn files. 7*8975f5c5SAndroid Build Coastguard Worker# This template will correctly set "configs" and "public_configs" in order 8*8975f5c5SAndroid Build Coastguard Worker# to correctly compile abseil in Chromium. 9*8975f5c5SAndroid Build Coastguard Worker# 10*8975f5c5SAndroid Build Coastguard Worker# Usage: 11*8975f5c5SAndroid Build Coastguard Worker# Most of the times its usage will be similar to the example below but all 12*8975f5c5SAndroid Build Coastguard Worker# the arguments avilable in source_set are also available for absl_source_set. 13*8975f5c5SAndroid Build Coastguard Worker# 14*8975f5c5SAndroid Build Coastguard Worker# absl_source_set("foo") { 15*8975f5c5SAndroid Build Coastguard Worker# sources = [ "foo.cc" ] 16*8975f5c5SAndroid Build Coastguard Worker# public = [ "foo.h" ] 17*8975f5c5SAndroid Build Coastguard Worker# deps = [ ":bar" ] 18*8975f5c5SAndroid Build Coastguard Worker# } 19*8975f5c5SAndroid Build Coastguard Worker 20*8975f5c5SAndroid Build Coastguard Workerimport("//build_overrides/build.gni") 21*8975f5c5SAndroid Build Coastguard Worker 22*8975f5c5SAndroid Build Coastguard Workerdeclare_args() { 23*8975f5c5SAndroid Build Coastguard Worker absl_build_tests = build_with_chromium 24*8975f5c5SAndroid Build Coastguard Worker} 25*8975f5c5SAndroid Build Coastguard Worker 26*8975f5c5SAndroid Build Coastguard Workertemplate("absl_source_set") { 27*8975f5c5SAndroid Build Coastguard Worker source_set(target_name) { 28*8975f5c5SAndroid Build Coastguard Worker if (defined(invoker.testonly) && invoker.testonly && !absl_build_tests) { 29*8975f5c5SAndroid Build Coastguard Worker not_needed(invoker, "*") 30*8975f5c5SAndroid Build Coastguard Worker } else { 31*8975f5c5SAndroid Build Coastguard Worker forward_variables_from(invoker, "*") 32*8975f5c5SAndroid Build Coastguard Worker configs -= [ "//build/config/compiler:chromium_code" ] 33*8975f5c5SAndroid Build Coastguard Worker configs += [ 34*8975f5c5SAndroid Build Coastguard Worker "//build/config/compiler:no_chromium_code", 35*8975f5c5SAndroid Build Coastguard Worker "//build/config/compiler:prevent_unsafe_narrowing", 36*8975f5c5SAndroid Build Coastguard Worker "//third_party/abseil-cpp:absl_default_cflags_cc", 37*8975f5c5SAndroid Build Coastguard Worker "//third_party/abseil-cpp:absl_define_config", 38*8975f5c5SAndroid Build Coastguard Worker ] 39*8975f5c5SAndroid Build Coastguard Worker 40*8975f5c5SAndroid Build Coastguard Worker if (!defined(defines)) { 41*8975f5c5SAndroid Build Coastguard Worker defines = [] 42*8975f5c5SAndroid Build Coastguard Worker } 43*8975f5c5SAndroid Build Coastguard Worker if (is_component_build) { 44*8975f5c5SAndroid Build Coastguard Worker defines += [ "ABSL_BUILD_DLL" ] 45*8975f5c5SAndroid Build Coastguard Worker if (!is_win && current_os != "aix") { 46*8975f5c5SAndroid Build Coastguard Worker configs -= [ "//build/config/gcc:symbol_visibility_hidden" ] 47*8975f5c5SAndroid Build Coastguard Worker configs += [ "//build/config/gcc:symbol_visibility_default" ] 48*8975f5c5SAndroid Build Coastguard Worker } 49*8975f5c5SAndroid Build Coastguard Worker } 50*8975f5c5SAndroid Build Coastguard Worker 51*8975f5c5SAndroid Build Coastguard Worker if (!defined(public_configs)) { 52*8975f5c5SAndroid Build Coastguard Worker public_configs = [] 53*8975f5c5SAndroid Build Coastguard Worker } 54*8975f5c5SAndroid Build Coastguard Worker public_configs += [ "//third_party/abseil-cpp:absl_include_config" ] 55*8975f5c5SAndroid Build Coastguard Worker 56*8975f5c5SAndroid Build Coastguard Worker if (!defined(visibility)) { 57*8975f5c5SAndroid Build Coastguard Worker # Within Chromium builds, restrict direct visibility of Abseil sources, so 58*8975f5c5SAndroid Build Coastguard Worker # users must depend on //third_party/abseil-cpp:absl. This prevents use of 59*8975f5c5SAndroid Build Coastguard Worker # banned targets like absl/types:any. A few targets require exceptions. 60*8975f5c5SAndroid Build Coastguard Worker if (build_with_chromium) { 61*8975f5c5SAndroid Build Coastguard Worker visibility = [ 62*8975f5c5SAndroid Build Coastguard Worker # Abseil itself. 63*8975f5c5SAndroid Build Coastguard Worker "//third_party/abseil-cpp/*", 64*8975f5c5SAndroid Build Coastguard Worker 65*8975f5c5SAndroid Build Coastguard Worker # GTest. It unconditionally #includes any.h if pretty-print support 66*8975f5c5SAndroid Build Coastguard Worker # for absl types is enabled. 67*8975f5c5SAndroid Build Coastguard Worker "//third_party/googletest/*", 68*8975f5c5SAndroid Build Coastguard Worker ] 69*8975f5c5SAndroid Build Coastguard Worker 70*8975f5c5SAndroid Build Coastguard Worker if (!is_component_build) { 71*8975f5c5SAndroid Build Coastguard Worker visibility += [ 72*8975f5c5SAndroid Build Coastguard Worker # Not used by Chromium directly. 73*8975f5c5SAndroid Build Coastguard Worker "//chromecast/internal/*", 74*8975f5c5SAndroid Build Coastguard Worker "//libassistant/*", 75*8975f5c5SAndroid Build Coastguard Worker ] 76*8975f5c5SAndroid Build Coastguard Worker } 77*8975f5c5SAndroid Build Coastguard Worker } else { 78*8975f5c5SAndroid Build Coastguard Worker visibility = [ "*" ] 79*8975f5c5SAndroid Build Coastguard Worker } 80*8975f5c5SAndroid Build Coastguard Worker } 81*8975f5c5SAndroid Build Coastguard Worker } 82*8975f5c5SAndroid Build Coastguard Worker } 83*8975f5c5SAndroid Build Coastguard Worker} 84*8975f5c5SAndroid Build Coastguard Worker 85*8975f5c5SAndroid Build Coastguard Workertemplate("absl_test") { 86*8975f5c5SAndroid Build Coastguard Worker source_set(target_name) { 87*8975f5c5SAndroid Build Coastguard Worker if (!absl_build_tests) { 88*8975f5c5SAndroid Build Coastguard Worker not_needed(invoker, "*") 89*8975f5c5SAndroid Build Coastguard Worker } else { 90*8975f5c5SAndroid Build Coastguard Worker forward_variables_from(invoker, "*") 91*8975f5c5SAndroid Build Coastguard Worker testonly = true 92*8975f5c5SAndroid Build Coastguard Worker configs -= [ "//build/config/compiler:chromium_code" ] 93*8975f5c5SAndroid Build Coastguard Worker configs += [ 94*8975f5c5SAndroid Build Coastguard Worker "//build/config/compiler:no_chromium_code", 95*8975f5c5SAndroid Build Coastguard Worker "//third_party/abseil-cpp:absl_default_cflags_cc", 96*8975f5c5SAndroid Build Coastguard Worker "//third_party/abseil-cpp:absl_define_config", 97*8975f5c5SAndroid Build Coastguard Worker "//third_party/abseil-cpp:absl_test_config", 98*8975f5c5SAndroid Build Coastguard Worker ] 99*8975f5c5SAndroid Build Coastguard Worker 100*8975f5c5SAndroid Build Coastguard Worker if (!defined(public_configs)) { 101*8975f5c5SAndroid Build Coastguard Worker public_configs = [] 102*8975f5c5SAndroid Build Coastguard Worker } 103*8975f5c5SAndroid Build Coastguard Worker public_configs += [ "//third_party/abseil-cpp:absl_include_config" ] 104*8975f5c5SAndroid Build Coastguard Worker 105*8975f5c5SAndroid Build Coastguard Worker visibility = [ "//third_party/abseil-cpp/:*" ] 106*8975f5c5SAndroid Build Coastguard Worker deps += [ 107*8975f5c5SAndroid Build Coastguard Worker "//third_party/googletest:gmock", 108*8975f5c5SAndroid Build Coastguard Worker "//third_party/googletest:gtest", 109*8975f5c5SAndroid Build Coastguard Worker ] 110*8975f5c5SAndroid Build Coastguard Worker } 111*8975f5c5SAndroid Build Coastguard Worker } 112*8975f5c5SAndroid Build Coastguard Worker} 113