BUILD.gn 7.4 KB

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