xref: /aosp_15_r20/external/webrtc/third_party/abseil-cpp/BUILD.gn (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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/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:any_invocable",
76    "//third_party/abseil-cpp/absl/functional:bind_front",
77    "//third_party/abseil-cpp/absl/functional:function_ref",
78    "//third_party/abseil-cpp/absl/hash",
79    "//third_party/abseil-cpp/absl/log:die_if_null",
80    "//third_party/abseil-cpp/absl/memory",
81    "//third_party/abseil-cpp/absl/meta:type_traits",
82    "//third_party/abseil-cpp/absl/numeric:bits",
83    "//third_party/abseil-cpp/absl/numeric:int128",
84    "//third_party/abseil-cpp/absl/random",
85    "//third_party/abseil-cpp/absl/random:distributions",
86    "//third_party/abseil-cpp/absl/status",
87    "//third_party/abseil-cpp/absl/status:statusor",
88    "//third_party/abseil-cpp/absl/strings",
89    "//third_party/abseil-cpp/absl/strings:cord",
90    "//third_party/abseil-cpp/absl/strings:str_format",
91    "//third_party/abseil-cpp/absl/synchronization",
92    "//third_party/abseil-cpp/absl/time",
93    "//third_party/abseil-cpp/absl/types:optional",
94    "//third_party/abseil-cpp/absl/types:span",
95    "//third_party/abseil-cpp/absl/types:variant",
96    "//third_party/abseil-cpp/absl/utility",
97  ]
98
99  # The following dependencies currently don't build with NaCl.
100  # TODO(https://crbug.com/1114625): Fix build errors and remove this section.
101  if (is_nacl) {
102    public_deps -=
103        [ "//third_party/abseil-cpp/absl/debugging:failure_signal_handler" ]
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      "-Wstring-conversion",
149    ]
150    if (!is_nacl) {
151      cflags_cc += [ "-Wbitfield-enum-conversion" ]
152    }
153  }
154}
155
156config("absl_test_cflags_cc") {
157  cflags_cc = []
158  if (is_clang || !is_win) {
159    cflags_cc += [
160      "-Wno-conversion-null",
161      "-Wno-missing-declarations",
162      "-Wno-unused-function",
163      "-Wno-unused-parameter",
164      "-Wno-unused-private-field",
165    ]
166  }
167  if (is_win) {
168    cflags_cc += [
169      "/wd4101",  # unreferenced local variable
170    ]
171  }
172}
173
174config("absl_test_config") {
175  cflags_cc = []
176  if (is_win && !is_clang) {
177    cflags_cc += [ "/wd4996" ]
178  }
179  if (is_clang) {
180    cflags_cc += [
181      "-Wno-deprecated-declarations",
182      "-Wno-unused-private-field",
183      "-Wno-unused-function",
184    ]
185  }
186}
187
188if (build_with_chromium) {
189  import("//testing/test.gni")
190
191  if (!is_component_build) {
192    test("absl_tests") {
193      testonly = true
194      deps = [
195        "absl/algorithm:algorithm_test",
196        "absl/algorithm:container_test",
197        "absl/base:config_test",
198        "absl/base:prefetch_test",
199        "absl/cleanup:cleanup_test",
200        "absl/container:common_policy_traits_test",
201        "absl/container:inlined_vector_test",
202        "absl/container:node_slot_policy_test",
203        "absl/container:sample_element_size_test",
204        "absl/functional:any_invocable_test",
205        "absl/hash:hash_test",
206        "absl/hash:low_level_hash_test",
207        "absl/log:basic_log_test",
208        "absl/log:check_test",
209        "absl/log:die_if_null_test",
210        "absl/log:flags_test",
211        "absl/log:globals_test",
212        "absl/log:log_entry_test",
213        "absl/log:log_format_test",
214        "absl/log:log_macro_hygiene_test",
215        "absl/log:log_modifier_methods_test",
216        "absl/log:log_sink_test",
217        "absl/log:log_streamer_test",
218        "absl/log:scoped_mock_log_test",
219        "absl/log:stripping_test",
220        "absl/log/internal:stderr_log_sink_test",
221        "absl/memory:memory_test",
222        "absl/meta:type_traits_test",
223        "absl/profiling:exponential_biased_test",
224        "absl/profiling:periodic_sampler_test",
225        "absl/status:statusor_test",
226        "absl/strings:ascii_test",
227        "absl/strings:cord_buffer_test",
228        "absl/strings:cord_data_edge_test",
229        "absl/strings:cord_rep_btree_navigator_test",
230        "absl/strings:cord_rep_btree_reader_test",
231        "absl/strings:cord_rep_btree_test",
232        "absl/strings:cord_rep_crc_test",
233        "absl/strings:cordz_functions_test",
234        "absl/strings:cordz_info_statistics_test",
235        "absl/strings:cordz_info_test",
236        "absl/strings:cordz_test",
237        "absl/strings:cordz_update_scope_test",
238        "absl/strings:cordz_update_tracker_test",
239        "absl/strings:damerau_levenshtein_distance_test",
240        "absl/strings:match_test",
241        "absl/strings:str_replace_test",
242        "absl/strings:string_view_test",
243        "absl/types:optional_test",
244        "absl/types:variant_test",
245        "//third_party/googletest:gtest_main",
246      ]
247    }
248  }
249
250  test("absl_hardening_tests") {
251    testonly = true
252    sources = [ "absl_hardening_test.cc" ]
253    deps = [
254      "//base/test:run_all_unittests",
255      "//third_party/abseil-cpp/absl/base:config",
256      "//third_party/abseil-cpp/absl/container:fixed_array",
257      "//third_party/abseil-cpp/absl/container:inlined_vector",
258      "//third_party/abseil-cpp/absl/strings",
259      "//third_party/abseil-cpp/absl/types:optional",
260      "//third_party/abseil-cpp/absl/types:span",
261      "//third_party/abseil-cpp/absl/types:variant",
262      "//third_party/googletest:gtest",
263    ]
264  }
265}
266