• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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("${skia_root_dir}/build/config/c++/c++.gni")
10import("${skia_root_dir}/build/config/sanitizers/sanitizers.gni")
11import("${skia_root_dir}/build/toolchain/toolchain.gni")
12import("${skia_root_dir}/build_overrides/build.gni")
13import("${skia_third_party_dir}/abseil-cpp/absl.gni")
14
15config("absl_component_build") {
16  defines = [ "ABSL_CONSUME_DLL" ]
17}
18
19component("absl") {
20  public_deps = [ ":absl_component_deps" ]
21  if (is_component_build) {
22    public_configs = [ ":absl_component_build" ]
23
24    if (is_win && is_clang) {
25      if (current_cpu == "x64") {
26        if (is_asan) {
27          sources = [ "symbols_x64_rel_asan.def" ]
28        } else {
29          sources = [ "symbols_x64_rel.def" ]
30        }
31      }
32      if (current_cpu == "x86") {
33        sources = [ "symbols_x86_rel.def" ]
34      }
35      if (current_cpu == "arm64") {
36        sources = [ "symbols_arm64_rel.def" ]
37      }
38    }
39  }
40}
41
42group("absl_component_deps") {
43  public_deps = [
44    "${skia_third_party_dir}/abseil-cpp/absl/algorithm:container",
45    "${skia_third_party_dir}/abseil-cpp/absl/base",
46    "${skia_third_party_dir}/abseil-cpp/absl/base:config",
47    "${skia_third_party_dir}/abseil-cpp/absl/base:core_headers",
48    "${skia_third_party_dir}/abseil-cpp/absl/container:btree",
49    "${skia_third_party_dir}/abseil-cpp/absl/container:fixed_array",
50    "${skia_third_party_dir}/abseil-cpp/absl/container:flat_hash_map",
51    "${skia_third_party_dir}/abseil-cpp/absl/container:flat_hash_set",
52    "${skia_third_party_dir}/abseil-cpp/absl/container:inlined_vector",
53    "${skia_third_party_dir}/abseil-cpp/absl/container:node_hash_map",
54    "${skia_third_party_dir}/abseil-cpp/absl/container:node_hash_set",
55    "${skia_third_party_dir}/abseil-cpp/absl/debugging:failure_signal_handler",
56    "${skia_third_party_dir}/abseil-cpp/absl/debugging:stacktrace",
57    "${skia_third_party_dir}/abseil-cpp/absl/debugging:symbolize",
58    "${skia_third_party_dir}/abseil-cpp/absl/functional:bind_front",
59    "${skia_third_party_dir}/abseil-cpp/absl/hash",
60    "${skia_third_party_dir}/abseil-cpp/absl/memory",
61    "${skia_third_party_dir}/abseil-cpp/absl/meta:type_traits",
62    "${skia_third_party_dir}/abseil-cpp/absl/numeric:bits",
63    "${skia_third_party_dir}/abseil-cpp/absl/numeric:int128",
64    "${skia_third_party_dir}/abseil-cpp/absl/status",
65    "${skia_third_party_dir}/abseil-cpp/absl/status:statusor",
66    "${skia_third_party_dir}/abseil-cpp/absl/strings",
67    "${skia_third_party_dir}/abseil-cpp/absl/strings:str_format",
68    "${skia_third_party_dir}/abseil-cpp/absl/synchronization",
69    "${skia_third_party_dir}/abseil-cpp/absl/time",
70    "${skia_third_party_dir}/abseil-cpp/absl/types:optional",
71    "${skia_third_party_dir}/abseil-cpp/absl/types:span",
72    "${skia_third_party_dir}/abseil-cpp/absl/types:variant",
73  ]
74
75  # The following dependencies currently don't build with NaCl.
76  # TODO(https://crbug.com/1114625): Fix build errors and remove this section.
77  if (is_nacl) {
78    public_deps -= [
79      "${skia_third_party_dir}/abseil-cpp/absl/container:flat_hash_map",
80      "${skia_third_party_dir}/abseil-cpp/absl/container:flat_hash_set",
81      "${skia_third_party_dir}/abseil-cpp/absl/container:node_hash_map",
82      "${skia_third_party_dir}/abseil-cpp/absl/container:node_hash_set",
83      "${skia_third_party_dir}/abseil-cpp/absl/debugging:failure_signal_handler",
84    ]
85  }
86
87  visibility = [ ":absl" ]
88}
89
90group("default") {
91  deps = [
92    "absl/types:any",
93    "absl/types:bad_any_cast",
94    "absl/types:bad_optional_access",
95    "absl/types:optional",
96    "absl/types:span",
97  ]
98}
99
100config("absl_include_config") {
101  include_dirs = [ "." ]
102}
103
104config("absl_define_config") {
105  defines = [ "ABSL_ALLOCATOR_NOTHROW=1" ]
106
107  if (is_win && !use_custom_libcxx) {
108    defines += [
109      # See crbug.com/1101367: Acknowledge extended alignment when using
110      # MSVC's standard library.
111      "_ENABLE_EXTENDED_ALIGNED_STORAGE",
112    ]
113  }
114}
115
116config("absl_default_cflags_cc") {
117  cflags_cc = []
118  if (is_clang) {
119    cflags_cc += [
120      # TODO(crbug.com/588506): Explicitly enable conversion warnings.
121      "-Wbool-conversion",
122      "-Wconstant-conversion",
123      "-Wenum-conversion",
124      "-Wint-conversion",
125      "-Wliteral-conversion",
126      "-Wnon-literal-null-conversion",
127      "-Wnull-conversion",
128      "-Wobjc-literal-conversion",
129      "-Wno-sign-conversion",
130      "-Wstring-conversion",
131    ]
132    if (!is_nacl && !use_xcode_clang) {
133      cflags_cc += [ "-Wbitfield-enum-conversion" ]
134    }
135  }
136  if (is_win) {
137    cflags_cc += [
138      "/wd4005",  # macro-redefinition
139      "/wd4018",  # sign-compare
140      "/wd4068",  # unknown pragma
141      "/wd4702",  # unreachable code
142    ]
143  }
144}
145
146config("absl_test_cflags_cc") {
147  cflags_cc = []
148  if (is_clang || !is_win) {
149    cflags_cc += [
150      "-Wno-conversion-null",
151      "-Wno-missing-declarations",
152      "-Wno-sign-compare",
153      "-Wno-unused-function",
154      "-Wno-unused-parameter",
155      "-Wno-unused-private-field",
156    ]
157  }
158  if (is_win) {
159    cflags_cc += [
160      "/wd4018",  # signed/unsigned mismatch
161      "/wd4101",  # unreferenced local variable
162    ]
163  }
164}
165
166if (build_with_chromium) {
167  import("${skia_root_dir}/testing/test.gni")
168
169  if (!is_component_build) {
170    test("absl_tests") {
171      testonly = true
172      deps = [
173        "${skia_third_party_dir}/googletest:gtest_main",
174        "absl/algorithm:algorithm_test",
175        "absl/algorithm:container_test",
176        "absl/base:config_test",
177        "absl/cleanup:cleanup_test",
178        "absl/container:inlined_vector_test",
179        "absl/hash:low_level_hash_test",
180        "absl/memory:memory_test",
181        "absl/meta:type_traits_test",
182        "absl/status:statusor_test",
183        "absl/strings:ascii_test",
184        "absl/strings:cord_rep_btree_navigator_test",
185        "absl/strings:cord_rep_btree_reader_test",
186        "absl/strings:cord_rep_btree_test",
187        "absl/strings:cord_rep_consume_test",
188        "absl/strings:cordz_functions_test",
189        "absl/strings:cordz_info_statistics_test",
190        "absl/strings:cordz_info_test",
191        "absl/strings:cordz_test",
192        "absl/strings:cordz_update_scope_test",
193        "absl/strings:cordz_update_tracker_test",
194        "absl/strings:match_test",
195        "absl/strings:str_replace_test",
196        "absl/strings:string_view_test",
197        "absl/types:optional_test",
198        "absl/types:variant_test",
199      ]
200    }
201  }
202
203  test("absl_hardening_tests") {
204    testonly = true
205    sources = [ "absl_hardening_test.cc" ]
206    deps = [
207      "${skia_root_dir}/base/test:run_all_unittests",
208      "${skia_third_party_dir}/abseil-cpp/absl/base:config",
209      "${skia_third_party_dir}/abseil-cpp/absl/container:fixed_array",
210      "${skia_third_party_dir}/abseil-cpp/absl/container:inlined_vector",
211      "${skia_third_party_dir}/abseil-cpp/absl/strings",
212      "${skia_third_party_dir}/abseil-cpp/absl/types:optional",
213      "${skia_third_party_dir}/abseil-cpp/absl/types:span",
214      "${skia_third_party_dir}/abseil-cpp/absl/types:variant",
215      "${skia_third_party_dir}/googletest:gtest",
216    ]
217  }
218}
219