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