• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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",
61    "//third_party/abseil-cpp/absl/algorithm:container",
62    "//third_party/abseil-cpp/absl/base",
63    "//third_party/abseil-cpp/absl/base:config",
64    "//third_party/abseil-cpp/absl/base:core_headers",
65    "//third_party/abseil-cpp/absl/base:log_severity",
66    "//third_party/abseil-cpp/absl/base:no_destructor",
67    "//third_party/abseil-cpp/absl/base:nullability",
68    "//third_party/abseil-cpp/absl/base:prefetch",
69    "//third_party/abseil-cpp/absl/cleanup",
70    "//third_party/abseil-cpp/absl/container:btree",
71    "//third_party/abseil-cpp/absl/container:fixed_array",
72    "//third_party/abseil-cpp/absl/container:flat_hash_map",
73    "//third_party/abseil-cpp/absl/container:flat_hash_set",
74    "//third_party/abseil-cpp/absl/container:inlined_vector",
75    "//third_party/abseil-cpp/absl/container:node_hash_map",
76    "//third_party/abseil-cpp/absl/container:node_hash_set",
77    "//third_party/abseil-cpp/absl/debugging:failure_signal_handler",
78    "//third_party/abseil-cpp/absl/debugging:stacktrace",
79    "//third_party/abseil-cpp/absl/debugging:symbolize",
80    "//third_party/abseil-cpp/absl/functional:any_invocable",
81    "//third_party/abseil-cpp/absl/functional:bind_front",
82    "//third_party/abseil-cpp/absl/functional:function_ref",
83    "//third_party/abseil-cpp/absl/functional:overload",
84    "//third_party/abseil-cpp/absl/hash",
85    "//third_party/abseil-cpp/absl/log:absl_check",
86    "//third_party/abseil-cpp/absl/log:absl_log",
87    "//third_party/abseil-cpp/absl/log:absl_vlog_is_on",
88    "//third_party/abseil-cpp/absl/log:die_if_null",
89    "//third_party/abseil-cpp/absl/log:globals",
90    "//third_party/abseil-cpp/absl/log:initialize",
91    "//third_party/abseil-cpp/absl/log:log_entry",
92    "//third_party/abseil-cpp/absl/log:log_sink",
93    "//third_party/abseil-cpp/absl/log:log_sink_registry",
94    "//third_party/abseil-cpp/absl/memory",
95    "//third_party/abseil-cpp/absl/meta:type_traits",
96    "//third_party/abseil-cpp/absl/numeric:bits",
97    "//third_party/abseil-cpp/absl/numeric:int128",
98    "//third_party/abseil-cpp/absl/random",
99    "//third_party/abseil-cpp/absl/random:bit_gen_ref",
100    "//third_party/abseil-cpp/absl/random:distributions",
101    "//third_party/abseil-cpp/absl/status",
102    "//third_party/abseil-cpp/absl/status:statusor",
103    "//third_party/abseil-cpp/absl/strings",
104    "//third_party/abseil-cpp/absl/strings:cord",
105    "//third_party/abseil-cpp/absl/strings:has_ostream_operator",
106    "//third_party/abseil-cpp/absl/strings:str_format",
107    "//third_party/abseil-cpp/absl/strings:string_view",
108    "//third_party/abseil-cpp/absl/synchronization",
109    "//third_party/abseil-cpp/absl/time",
110    "//third_party/abseil-cpp/absl/types:optional",
111    "//third_party/abseil-cpp/absl/types:span",
112    "//third_party/abseil-cpp/absl/types:variant",
113    "//third_party/abseil-cpp/absl/utility",
114  ]
115
116  # Dependencies that preferably shouldn't be public in chromium.
117  public_deps += [
118    # public in abseil, but deprecated in chromium, yet used.
119    "//third_party/abseil-cpp/absl/base:dynamic_annotations",
120
121    # base/logging.cc uses this non-public absl dependency while there no better
122    # alternative to inject abort hook. See notes in `base/logging.cc`.
123    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
124
125    # absl internal utilities used by protobuf.
126    "//third_party/abseil-cpp/absl/container:layout",
127  ]
128
129  if (is_component_build) {
130    public_deps += [ ":absl_full_deps" ]
131  }
132
133  # The following dependencies currently don't build with NaCl.
134  # TODO(https://crbug.com/1114625): Fix build errors and remove this section.
135  if (is_nacl) {
136    public_deps -=
137        [ "//third_party/abseil-cpp/absl/debugging:failure_signal_handler" ]
138  }
139
140  visibility = [ ":absl" ]
141}
142
143# Some third-party libraries use additional parts of absl that are banned in
144# Chrome (e.g. flags generates static initializers that are undesirable in
145# non-test binaries). These third-party libraries can depend on `absl_full`
146# instead of `absl` to use those banned subsets of Abseil as well.
147source_set("absl_full") {
148  public_deps = [ ":absl" ]
149
150  # In component builds, `absl` itself depends on `absl_full_deps` directly so
151  # that all of absl is built as a single shared library. This is to prevent
152  # globals from being duplicated between both `absl` and `absl_full` (e.g.
153  # inline variables), and the subtle breakage that could cause.
154  #
155  # Deps violations will still be enforced by the non-component build.
156  if (!is_component_build) {
157    public_deps += [ ":absl_full_deps" ]
158  }
159
160  if (build_with_chromium) {
161    visibility = [
162      # Used by some test executables, but not by anything that is a
163      # part of Chrome.
164      "//components/optimization_guide/internal/*",
165      "//third_party/fuzztest:*",
166      "//third_party/webrtc/*",
167
168      # GoogleTest doesn't actually need absl_full, but this makes gn check
169      # happier.
170      "//third_party/googletest:*",
171    ]
172  }
173}
174
175group("absl_full_deps") {
176  public_deps = [
177    # Banned because each flag registration generates a static initializer, and
178    # the flag registration mechanism is problematic in component builds.
179    "//third_party/abseil-cpp/absl/flags:config",
180    "//third_party/abseil-cpp/absl/flags:flag",
181    "//third_party/abseil-cpp/absl/flags:parse",
182    "//third_party/abseil-cpp/absl/flags:reflection",
183    "//third_party/abseil-cpp/absl/flags:usage",
184
185    # Banned because the LOG and CHECK macros conflict with Chrome's version of
186    # those macros.
187    "//third_party/abseil-cpp/absl/log",
188    "//third_party/abseil-cpp/absl/log:check",
189  ]
190
191  visibility = [
192    ":absl_component_deps",
193    ":absl_full",
194  ]
195
196  public_configs = [ "//third_party/abseil-cpp/absl/flags:absl_flags_config" ]
197}
198
199config("absl_include_config") {
200  include_dirs = [ "." ]
201}
202
203config("absl_define_config") {
204  defines = [ "ABSL_ALLOCATOR_NOTHROW=1" ]
205
206  if (is_win && !use_custom_libcxx) {
207    defines += [
208      # See crbug.com/1101367: Acknowledge extended alignment when using
209      # MSVC's standard library.
210      "_ENABLE_EXTENDED_ALIGNED_STORAGE",
211    ]
212  }
213}
214
215config("absl_default_cflags_cc") {
216  cflags_cc = []
217  if (is_clang) {
218    cflags_cc += [
219      # TODO(crbug.com/588506): Explicitly enable conversion warnings.
220      "-Wbool-conversion",
221      "-Wconstant-conversion",
222      "-Wenum-conversion",
223      "-Wint-conversion",
224      "-Wliteral-conversion",
225      "-Wnon-literal-null-conversion",
226      "-Wnull-conversion",
227      "-Wobjc-literal-conversion",
228      "-Wstring-conversion",
229    ]
230    if (!is_nacl) {
231      cflags_cc += [ "-Wbitfield-enum-conversion" ]
232    }
233  }
234}
235
236config("absl_test_cflags_cc") {
237  cflags_cc = []
238  if (is_clang || !is_win) {
239    cflags_cc += [
240      "-Wno-conversion-null",
241      "-Wno-missing-declarations",
242      "-Wno-unused-function",
243      "-Wno-unused-parameter",
244      "-Wno-unused-private-field",
245    ]
246  }
247  if (is_win) {
248    cflags_cc += [
249      "/wd4101",  # unreferenced local variable
250    ]
251  }
252}
253
254config("absl_test_config") {
255  cflags_cc = []
256  if (is_win && !is_clang) {
257    cflags_cc += [ "/wd4996" ]
258  }
259  if (is_clang) {
260    cflags_cc += [
261      "-Wno-deprecated-declarations",
262      "-Wno-implicit-const-int-float-conversion",
263      "-Wno-unused-private-field",
264      "-Wno-unused-function",
265    ]
266  }
267}
268
269if (absl_build_tests) {
270  import("//testing/test.gni")
271
272  if (!is_component_build) {
273    test("absl_tests") {
274      testonly = true
275      deps = [
276        "absl/algorithm:algorithm_test",
277        "absl/algorithm:container_test",
278        "absl/base:attributes_test",
279        "absl/base:config_test",
280        "absl/base:iterator_traits_test",
281        "absl/base:no_destructor_test",
282        "absl/base:nullability_default_nonnull_test",
283        "absl/base:nullability_test",
284        "absl/base:poison_test",
285        "absl/base:prefetch_test",
286        "absl/base:tracing_internal_strong_test",
287        "absl/base:tracing_internal_weak_test",
288        "absl/cleanup:cleanup_test",
289        "absl/container:common_policy_traits_test",
290        "absl/container:fixed_array_test",
291        "absl/container:flat_hash_map_test",
292        "absl/container:flat_hash_set_test",
293        "absl/container:hash_function_defaults_test",
294        "absl/container:inlined_vector_test",
295        "absl/container:node_hash_map_test",
296        "absl/container:node_hash_set_test",
297        "absl/container:node_slot_policy_test",
298        "absl/container:raw_hash_set_allocator_test",
299        "absl/container:sample_element_size_test",
300        "absl/crc:crc32c_test",
301        "absl/crc:crc_cord_state_test",
302        "absl/crc:crc_memcpy_test",
303        "absl/crc:non_temporal_memcpy_test",
304        "absl/debugging:bounded_utf8_length_sequence_test",
305        "absl/debugging:decode_rust_punycode_test",
306        "absl/debugging:demangle_rust_test",
307        "absl/debugging:stacktrace_test",
308        "absl/debugging:utf8_for_code_point_test",
309        "absl/flags:flag_test",
310        "absl/functional:any_invocable_test",
311        "absl/functional:function_ref_test",
312        "absl/functional:overload_test",
313        "absl/hash:hash_instantiated_test",
314        "absl/hash:hash_test",
315        "absl/hash:low_level_hash_test",
316        "absl/log:absl_check_test",
317        "absl/log:absl_log_basic_test",
318        "absl/log:die_if_null_test",
319        "absl/log:flags_test",
320        "absl/log:globals_test",
321        "absl/log:log_entry_test",
322        "absl/log:log_format_test",
323        "absl/log:log_macro_hygiene_test",
324        "absl/log:log_modifier_methods_test",
325        "absl/log:log_sink_test",
326        "absl/log:log_streamer_test",
327        "absl/log:scoped_mock_log_test",
328        "absl/log:stripping_test",
329        "absl/log:vlog_is_on_test",
330        "absl/log/internal:fnmatch_test",
331        "absl/log/internal:stderr_log_sink_test",
332        "absl/log/internal:structured_proto_test",
333        "absl/memory:memory_test",
334        "absl/meta:type_traits_test",
335        "absl/numeric:int128_test",
336        "absl/profiling:exponential_biased_test",
337        "absl/profiling:periodic_sampler_test",
338        "absl/random:distributions_test",
339        "absl/random:mock_distributions_test",
340        "absl/random/internal:nonsecure_base_test",
341        "absl/status:status_matchers_test",
342        "absl/status:status_test",
343        "absl/status:statusor_test",
344        "absl/strings:ascii_test",
345        "absl/strings:char_formatting_test",
346        "absl/strings:charset_test",
347        "absl/strings:cord_buffer_test",
348        "absl/strings:cord_data_edge_test",
349        "absl/strings:cord_rep_btree_navigator_test",
350        "absl/strings:cord_rep_btree_reader_test",
351        "absl/strings:cord_rep_btree_test",
352        "absl/strings:cord_rep_crc_test",
353        "absl/strings:cord_test",
354        "absl/strings:cordz_functions_test",
355        "absl/strings:cordz_handle_test",
356        "absl/strings:cordz_info_statistics_test",
357        "absl/strings:cordz_info_test",
358        "absl/strings:cordz_sample_token_test",
359        "absl/strings:cordz_test",
360        "absl/strings:cordz_update_scope_test",
361        "absl/strings:cordz_update_tracker_test",
362        "absl/strings:damerau_levenshtein_distance_test",
363        "absl/strings:has_absl_stringify_test",
364        "absl/strings:has_ostream_operator_test",
365        "absl/strings:match_test",
366        "absl/strings:str_cat_test",
367        "absl/strings:str_format_arg_test",
368        "absl/strings:str_format_bind_test",
369        "absl/strings:str_format_checker_test",
370        "absl/strings:str_format_convert_test",
371        "absl/strings:str_format_extension_test",
372        "absl/strings:str_format_output_test",
373        "absl/strings:str_format_parser_test",
374        "absl/strings:str_format_test",
375        "absl/strings:str_replace_test",
376        "absl/strings:string_view_test",
377        "absl/synchronization:barrier_test",
378        "absl/synchronization:graphcycles_test",
379        "absl/synchronization:kernel_timeout_internal_test",
380        "absl/synchronization:mutex_test",
381        "absl/synchronization:per_thread_sem_test",
382        "absl/synchronization:waiter_test",
383        "absl/time:time_test",
384        "absl/types:span_test",
385        "absl/types:variant_test",
386        "//third_party/googletest:gtest_main",
387      ]
388    }
389  }
390
391  test("absl_hardening_tests") {
392    testonly = true
393    sources = [ "absl_hardening_test.cc" ]
394    deps = [
395      ":absl",
396      "//base/test:run_all_unittests",
397      "//third_party/googletest:gtest",
398    ]
399  }
400}
401