1# Copyright 2018 The Chromium Authors 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/base:no_destructor", 65 "//third_party/abseil-cpp/absl/base:nullability", 66 "//third_party/abseil-cpp/absl/base:prefetch", 67 "//third_party/abseil-cpp/absl/cleanup", 68 "//third_party/abseil-cpp/absl/container:btree", 69 "//third_party/abseil-cpp/absl/container:fixed_array", 70 "//third_party/abseil-cpp/absl/container:flat_hash_map", 71 "//third_party/abseil-cpp/absl/container:flat_hash_set", 72 "//third_party/abseil-cpp/absl/container:inlined_vector", 73 "//third_party/abseil-cpp/absl/container:node_hash_map", 74 "//third_party/abseil-cpp/absl/container:node_hash_set", 75 "//third_party/abseil-cpp/absl/debugging:failure_signal_handler", 76 "//third_party/abseil-cpp/absl/debugging:stacktrace", 77 "//third_party/abseil-cpp/absl/debugging:symbolize", 78 "//third_party/abseil-cpp/absl/functional:any_invocable", 79 "//third_party/abseil-cpp/absl/functional:bind_front", 80 "//third_party/abseil-cpp/absl/functional:function_ref", 81 "//third_party/abseil-cpp/absl/functional:overload", 82 "//third_party/abseil-cpp/absl/hash", 83 "//third_party/abseil-cpp/absl/log:absl_check", 84 "//third_party/abseil-cpp/absl/log:absl_log", 85 "//third_party/abseil-cpp/absl/log:die_if_null", 86 "//third_party/abseil-cpp/absl/memory", 87 "//third_party/abseil-cpp/absl/meta:type_traits", 88 "//third_party/abseil-cpp/absl/numeric:bits", 89 "//third_party/abseil-cpp/absl/numeric:int128", 90 "//third_party/abseil-cpp/absl/random", 91 "//third_party/abseil-cpp/absl/random:distributions", 92 "//third_party/abseil-cpp/absl/status", 93 "//third_party/abseil-cpp/absl/status:statusor", 94 "//third_party/abseil-cpp/absl/strings", 95 "//third_party/abseil-cpp/absl/strings:cord", 96 "//third_party/abseil-cpp/absl/strings:has_ostream_operator", 97 "//third_party/abseil-cpp/absl/strings:str_format", 98 "//third_party/abseil-cpp/absl/strings:string_view", 99 "//third_party/abseil-cpp/absl/synchronization", 100 "//third_party/abseil-cpp/absl/time", 101 "//third_party/abseil-cpp/absl/types:optional", 102 "//third_party/abseil-cpp/absl/types:span", 103 "//third_party/abseil-cpp/absl/types:variant", 104 "//third_party/abseil-cpp/absl/utility", 105 ] 106 107 # The following dependencies currently don't build with NaCl. 108 # TODO(https://crbug.com/1114625): Fix build errors and remove this section. 109 if (is_nacl) { 110 public_deps -= 111 [ "//third_party/abseil-cpp/absl/debugging:failure_signal_handler" ] 112 } 113 114 visibility = [ ":absl" ] 115} 116 117config("absl_include_config") { 118 include_dirs = [ "." ] 119} 120 121config("absl_define_config") { 122 defines = [ "ABSL_ALLOCATOR_NOTHROW=1" ] 123 124 if (is_win && !use_custom_libcxx) { 125 defines += [ 126 # See crbug.com/1101367: Acknowledge extended alignment when using 127 # MSVC's standard library. 128 "_ENABLE_EXTENDED_ALIGNED_STORAGE", 129 ] 130 } 131} 132 133config("absl_default_cflags_cc") { 134 cflags_cc = [] 135 if (is_clang) { 136 cflags_cc += [ 137 # TODO(crbug.com/588506): Explicitly enable conversion warnings. 138 "-Wbool-conversion", 139 "-Wconstant-conversion", 140 "-Wenum-conversion", 141 "-Wint-conversion", 142 "-Wliteral-conversion", 143 "-Wnon-literal-null-conversion", 144 "-Wnull-conversion", 145 "-Wobjc-literal-conversion", 146 "-Wstring-conversion", 147 ] 148 if (!is_nacl) { 149 cflags_cc += [ "-Wbitfield-enum-conversion" ] 150 } 151 } 152} 153 154config("absl_test_cflags_cc") { 155 cflags_cc = [] 156 if (is_clang || !is_win) { 157 cflags_cc += [ 158 "-Wno-conversion-null", 159 "-Wno-missing-declarations", 160 "-Wno-unused-function", 161 "-Wno-unused-parameter", 162 "-Wno-unused-private-field", 163 ] 164 } 165 if (is_win) { 166 cflags_cc += [ 167 "/wd4101", # unreferenced local variable 168 ] 169 } 170} 171 172config("absl_test_config") { 173 cflags_cc = [] 174 if (is_win && !is_clang) { 175 cflags_cc += [ "/wd4996" ] 176 } 177 if (is_clang) { 178 cflags_cc += [ 179 "-Wno-deprecated-declarations", 180 "-Wno-implicit-const-int-float-conversion", 181 "-Wno-unused-private-field", 182 "-Wno-unused-function", 183 ] 184 } 185} 186 187if (build_with_chromium) { 188 import("//testing/test.gni") 189 190 if (!is_component_build) { 191 test("absl_tests") { 192 testonly = true 193 deps = [ 194 "absl/algorithm:algorithm_test", 195 "absl/algorithm:container_test", 196 "absl/base:config_test", 197 "absl/base:no_destructor_test", 198 "absl/base:nullability_test", 199 "absl/base:prefetch_test", 200 "absl/cleanup:cleanup_test", 201 202 # TODO(mbonadei): Fix issue with EXPECT_DEATH and uncomment. 203 # "absl/container:btree_test", 204 "absl/container:common_policy_traits_test", 205 "absl/container:fixed_array_test", 206 "absl/container:flat_hash_map_test", 207 "absl/container:flat_hash_set_test", 208 "absl/container:inlined_vector_test", 209 "absl/container:node_slot_policy_test", 210 "absl/container:raw_hash_set_allocator_test", 211 "absl/container:raw_hash_set_test", 212 "absl/container:sample_element_size_test", 213 "absl/crc:crc32c_test", 214 "absl/crc:crc_cord_state_test", 215 "absl/crc:crc_memcpy_test", 216 "absl/crc:non_temporal_memcpy_test", 217 "absl/debugging:stacktrace_test", 218 "absl/flags:flag_test", 219 "absl/functional:any_invocable_test", 220 "absl/functional:function_ref_test", 221 "absl/functional:overload_test", 222 "absl/hash:hash_instantiated_test", 223 "absl/hash:hash_test", 224 "absl/hash:low_level_hash_test", 225 "absl/log:absl_check_test", 226 "absl/log:absl_log_basic_test", 227 "absl/log:die_if_null_test", 228 "absl/log:flags_test", 229 "absl/log:globals_test", 230 "absl/log:log_entry_test", 231 "absl/log:log_format_test", 232 "absl/log:log_macro_hygiene_test", 233 "absl/log:log_modifier_methods_test", 234 "absl/log:log_sink_test", 235 "absl/log:log_streamer_test", 236 "absl/log:scoped_mock_log_test", 237 "absl/log:stripping_test", 238 "absl/log/internal:fnmatch_test", 239 "absl/log/internal:stderr_log_sink_test", 240 "absl/memory:memory_test", 241 "absl/meta:type_traits_test", 242 "absl/numeric:int128_test", 243 "absl/profiling:exponential_biased_test", 244 "absl/profiling:periodic_sampler_test", 245 "absl/status:status_test", 246 "absl/status:statusor_test", 247 "absl/strings:ascii_test", 248 "absl/strings:char_formatting_test", 249 "absl/strings:charset_test", 250 "absl/strings:cord_buffer_test", 251 "absl/strings:cord_data_edge_test", 252 "absl/strings:cord_rep_btree_navigator_test", 253 "absl/strings:cord_rep_btree_reader_test", 254 "absl/strings:cord_rep_btree_test", 255 "absl/strings:cord_rep_crc_test", 256 "absl/strings:cordz_functions_test", 257 "absl/strings:cordz_info_statistics_test", 258 "absl/strings:cordz_info_test", 259 "absl/strings:cordz_test", 260 "absl/strings:cordz_update_scope_test", 261 "absl/strings:cordz_update_tracker_test", 262 "absl/strings:damerau_levenshtein_distance_test", 263 "absl/strings:has_absl_stringify_test", 264 "absl/strings:has_ostream_operator_test", 265 "absl/strings:match_test", 266 "absl/strings:str_replace_test", 267 "absl/strings:string_view_test", 268 "absl/synchronization:kernel_timeout_internal_test", 269 "absl/synchronization:waiter_test", 270 "absl/time:time_test", 271 "absl/types:optional_test", 272 "absl/types:variant_test", 273 "absl/utility:if_constexpr_test", 274 "//third_party/googletest:gtest_main", 275 ] 276 } 277 } 278 279 test("absl_hardening_tests") { 280 testonly = true 281 sources = [ "absl_hardening_test.cc" ] 282 deps = [ 283 ":absl", 284 "//base/test:run_all_unittests", 285 "//third_party/googletest:gtest", 286 ] 287 } 288} 289