1# Copyright (c) 2018 The Chromium Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5# Flags specified here must not impact ABI. Code compiled with and without these 6# opts will be linked together, and in some cases headers compiled with and 7# without these options will be part of the same program. 8 9import("//build/config/c++/c++.gni") 10import("//build/config/nacl/config.gni") 11import("//build/config/sanitizers/sanitizers.gni") 12import("//build/toolchain/toolchain.gni") 13import("//build_overrides/build.gni") 14import("//third_party/abseil-cpp/absl.gni") 15 16config("absl_component_build") { 17 defines = [ "ABSL_CONSUME_DLL" ] 18} 19 20assert(!is_nacl || is_nacl_saigo, 21 "base must not be built in most nacl toolchains") 22 23component("absl") { 24 public_deps = [ ":absl_component_deps" ] 25 if (is_component_build) { 26 public_configs = [ ":absl_component_build" ] 27 28 if (is_win && is_clang) { 29 if (current_cpu == "x64") { 30 if (is_debug) { 31 sources = [ "symbols_x64_dbg.def" ] 32 } else { 33 if (is_asan) { 34 sources = [ "symbols_x64_rel_asan.def" ] 35 } else { 36 sources = [ "symbols_x64_rel.def" ] 37 } 38 } 39 } 40 if (current_cpu == "x86") { 41 if (is_debug) { 42 sources = [ "symbols_x86_dbg.def" ] 43 } else { 44 sources = [ "symbols_x86_rel.def" ] 45 } 46 } 47 if (current_cpu == "arm64") { 48 if (is_debug) { 49 sources = [ "symbols_arm64_dbg.def" ] 50 } else { 51 sources = [ "symbols_arm64_rel.def" ] 52 } 53 } 54 } 55 } 56} 57 58group("absl_component_deps") { 59 public_deps = [ 60 "//third_party/abseil-cpp/absl/algorithm:container", 61 "//third_party/abseil-cpp/absl/base", 62 "//third_party/abseil-cpp/absl/base:config", 63 "//third_party/abseil-cpp/absl/base:core_headers", 64 "//third_party/abseil-cpp/absl/cleanup", 65 "//third_party/abseil-cpp/absl/container:btree", 66 "//third_party/abseil-cpp/absl/container:fixed_array", 67 "//third_party/abseil-cpp/absl/container:flat_hash_map", 68 "//third_party/abseil-cpp/absl/container:flat_hash_set", 69 "//third_party/abseil-cpp/absl/container:inlined_vector", 70 "//third_party/abseil-cpp/absl/container:node_hash_map", 71 "//third_party/abseil-cpp/absl/container:node_hash_set", 72 "//third_party/abseil-cpp/absl/debugging:failure_signal_handler", 73 "//third_party/abseil-cpp/absl/debugging:stacktrace", 74 "//third_party/abseil-cpp/absl/debugging:symbolize", 75 "//third_party/abseil-cpp/absl/functional:bind_front", 76 "//third_party/abseil-cpp/absl/hash", 77 "//third_party/abseil-cpp/absl/memory", 78 "//third_party/abseil-cpp/absl/meta:type_traits", 79 "//third_party/abseil-cpp/absl/numeric:bits", 80 "//third_party/abseil-cpp/absl/numeric:int128", 81 "//third_party/abseil-cpp/absl/random", 82 "//third_party/abseil-cpp/absl/status", 83 "//third_party/abseil-cpp/absl/status:statusor", 84 "//third_party/abseil-cpp/absl/strings", 85 "//third_party/abseil-cpp/absl/strings:cord", 86 "//third_party/abseil-cpp/absl/strings:str_format", 87 "//third_party/abseil-cpp/absl/synchronization", 88 "//third_party/abseil-cpp/absl/time", 89 "//third_party/abseil-cpp/absl/types:optional", 90 "//third_party/abseil-cpp/absl/types:span", 91 "//third_party/abseil-cpp/absl/types:variant", 92 ] 93 94 # The following dependencies currently don't build with NaCl. 95 # TODO(https://crbug.com/1114625): Fix build errors and remove this section. 96 if (is_nacl) { 97 public_deps -= [ 98 "//third_party/abseil-cpp/absl/container:flat_hash_map", 99 "//third_party/abseil-cpp/absl/container:flat_hash_set", 100 "//third_party/abseil-cpp/absl/container:node_hash_map", 101 "//third_party/abseil-cpp/absl/container:node_hash_set", 102 "//third_party/abseil-cpp/absl/debugging:failure_signal_handler", 103 ] 104 } 105 106 visibility = [ ":absl" ] 107} 108 109group("default") { 110 deps = [ 111 "absl/types:any", 112 "absl/types:bad_any_cast", 113 "absl/types:bad_optional_access", 114 "absl/types:optional", 115 "absl/types:span", 116 ] 117} 118 119config("absl_include_config") { 120 include_dirs = [ "." ] 121} 122 123config("absl_define_config") { 124 defines = [ "ABSL_ALLOCATOR_NOTHROW=1" ] 125 126 if (is_win && !use_custom_libcxx) { 127 defines += [ 128 # See crbug.com/1101367: Acknowledge extended alignment when using 129 # MSVC's standard library. 130 "_ENABLE_EXTENDED_ALIGNED_STORAGE", 131 ] 132 } 133} 134 135config("absl_default_cflags_cc") { 136 cflags_cc = [] 137 if (is_clang) { 138 cflags_cc += [ 139 # TODO(crbug.com/588506): Explicitly enable conversion warnings. 140 "-Wbool-conversion", 141 "-Wconstant-conversion", 142 "-Wenum-conversion", 143 "-Wint-conversion", 144 "-Wliteral-conversion", 145 "-Wnon-literal-null-conversion", 146 "-Wnull-conversion", 147 "-Wobjc-literal-conversion", 148 "-Wno-sign-conversion", 149 "-Wstring-conversion", 150 ] 151 if (!is_nacl) { 152 cflags_cc += [ "-Wbitfield-enum-conversion" ] 153 } 154 } 155} 156 157config("absl_test_cflags_cc") { 158 cflags_cc = [] 159 if (is_clang || !is_win) { 160 cflags_cc += [ 161 "-Wno-conversion-null", 162 "-Wno-missing-declarations", 163 "-Wno-sign-compare", 164 "-Wno-unused-function", 165 "-Wno-unused-parameter", 166 "-Wno-unused-private-field", 167 ] 168 } 169 if (is_win) { 170 cflags_cc += [ 171 "/wd4018", # signed/unsigned mismatch 172 "/wd4101", # unreferenced local variable 173 ] 174 } 175} 176 177if (build_with_chromium) { 178 import("//testing/test.gni") 179 180 if (!is_component_build) { 181 test("absl_tests") { 182 testonly = true 183 deps = [ 184 "absl/algorithm:algorithm_test", 185 "absl/algorithm:container_test", 186 "absl/base:config_test", 187 "absl/cleanup:cleanup_test", 188 "absl/container:inlined_vector_test", 189 "absl/container:node_slot_policy_test", 190 "absl/container:sample_element_size_test", 191 "absl/hash:hash_test", 192 "absl/hash:low_level_hash_test", 193 "absl/memory:memory_test", 194 "absl/meta:type_traits_test", 195 "absl/profiling:exponential_biased_test", 196 "absl/profiling:periodic_sampler_test", 197 "absl/status:statusor_test", 198 "absl/strings:ascii_test", 199 "absl/strings:cord_data_edge_test", 200 "absl/strings:cord_rep_btree_navigator_test", 201 "absl/strings:cord_rep_btree_reader_test", 202 "absl/strings:cord_rep_btree_test", 203 "absl/strings:cord_rep_crc_test", 204 "absl/strings:cordz_functions_test", 205 "absl/strings:cordz_info_statistics_test", 206 "absl/strings:cordz_info_test", 207 "absl/strings:cordz_test", 208 "absl/strings:cordz_update_scope_test", 209 "absl/strings:cordz_update_tracker_test", 210 "absl/strings:match_test", 211 "absl/strings:str_replace_test", 212 "absl/strings:string_view_test", 213 "absl/types:optional_test", 214 "absl/types:variant_test", 215 "//third_party/googletest:gtest_main", 216 ] 217 } 218 } 219 220 test("absl_hardening_tests") { 221 testonly = true 222 sources = [ "absl_hardening_test.cc" ] 223 deps = [ 224 "//base/test:run_all_unittests", 225 "//third_party/abseil-cpp/absl/base:config", 226 "//third_party/abseil-cpp/absl/container:fixed_array", 227 "//third_party/abseil-cpp/absl/container:inlined_vector", 228 "//third_party/abseil-cpp/absl/strings", 229 "//third_party/abseil-cpp/absl/types:optional", 230 "//third_party/abseil-cpp/absl/types:span", 231 "//third_party/abseil-cpp/absl/types:variant", 232 "//third_party/googletest:gtest", 233 ] 234 } 235} 236