BUILD.bazel 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. #
  2. # Copyright 2019 The Abseil Authors.
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. # https://www.apache.org/licenses/LICENSE-2.0
  9. #
  10. # Unless required by applicable law or agreed to in writing, software
  11. # distributed under the License is distributed on an "AS IS" BASIS,
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. # See the License for the specific language governing permissions and
  14. # limitations under the License.
  15. #
  16. load(
  17. "//absl:copts/configure_copts.bzl",
  18. "ABSL_DEFAULT_COPTS",
  19. "ABSL_DEFAULT_LINKOPTS",
  20. "ABSL_TEST_COPTS",
  21. )
  22. package(
  23. default_visibility = ["//visibility:public"],
  24. features = [
  25. "header_modules",
  26. "layering_check",
  27. "parse_headers",
  28. ],
  29. )
  30. licenses(["notice"])
  31. cc_library(
  32. name = "hash",
  33. srcs = [
  34. "internal/hash.cc",
  35. "internal/hash.h",
  36. ],
  37. hdrs = ["hash.h"],
  38. copts = ABSL_DEFAULT_COPTS,
  39. linkopts = ABSL_DEFAULT_LINKOPTS,
  40. deps = [
  41. ":city",
  42. ":low_level_hash",
  43. "//absl/base:config",
  44. "//absl/base:core_headers",
  45. "//absl/base:endian",
  46. "//absl/container:fixed_array",
  47. "//absl/functional:function_ref",
  48. "//absl/meta:type_traits",
  49. "//absl/numeric:bits",
  50. "//absl/numeric:int128",
  51. "//absl/strings",
  52. "//absl/types:optional",
  53. "//absl/types:variant",
  54. "//absl/utility",
  55. ],
  56. )
  57. cc_library(
  58. name = "hash_testing",
  59. testonly = True,
  60. hdrs = ["hash_testing.h"],
  61. linkopts = ABSL_DEFAULT_LINKOPTS,
  62. deps = [
  63. ":spy_hash_state",
  64. "//absl/meta:type_traits",
  65. "//absl/strings",
  66. "//absl/types:variant",
  67. "@com_google_googletest//:gtest",
  68. ],
  69. )
  70. cc_test(
  71. name = "hash_test",
  72. srcs = [
  73. "hash_test.cc",
  74. "internal/hash_test.h",
  75. ],
  76. copts = ABSL_TEST_COPTS,
  77. linkopts = ABSL_DEFAULT_LINKOPTS,
  78. deps = [
  79. ":hash",
  80. ":hash_testing",
  81. ":spy_hash_state",
  82. "//absl/base:config",
  83. "//absl/base:core_headers",
  84. "//absl/container:btree",
  85. "//absl/container:flat_hash_map",
  86. "//absl/container:flat_hash_set",
  87. "//absl/container:node_hash_map",
  88. "//absl/container:node_hash_set",
  89. "//absl/memory",
  90. "//absl/meta:type_traits",
  91. "//absl/numeric:int128",
  92. "//absl/strings:cord_test_helpers",
  93. "//absl/strings:string_view",
  94. "//absl/types:optional",
  95. "//absl/types:variant",
  96. "@com_google_googletest//:gtest",
  97. "@com_google_googletest//:gtest_main",
  98. ],
  99. )
  100. cc_test(
  101. name = "hash_instantiated_test",
  102. srcs = [
  103. "hash_instantiated_test.cc",
  104. "internal/hash_test.h",
  105. ],
  106. copts = ABSL_TEST_COPTS,
  107. linkopts = ABSL_DEFAULT_LINKOPTS,
  108. deps = [
  109. ":hash",
  110. ":hash_testing",
  111. "//absl/base:config",
  112. "//absl/container:btree",
  113. "//absl/container:flat_hash_map",
  114. "//absl/container:flat_hash_set",
  115. "//absl/container:node_hash_map",
  116. "//absl/container:node_hash_set",
  117. "@com_google_googletest//:gtest",
  118. "@com_google_googletest//:gtest_main",
  119. ],
  120. )
  121. cc_binary(
  122. name = "hash_benchmark",
  123. testonly = True,
  124. srcs = ["hash_benchmark.cc"],
  125. copts = ABSL_TEST_COPTS,
  126. linkopts = ABSL_DEFAULT_LINKOPTS,
  127. tags = ["benchmark"],
  128. visibility = ["//visibility:private"],
  129. deps = [
  130. ":hash",
  131. "//absl/base:core_headers",
  132. "//absl/container:flat_hash_set",
  133. "//absl/random",
  134. "//absl/strings",
  135. "//absl/strings:cord",
  136. "//absl/strings:cord_test_helpers",
  137. "@com_github_google_benchmark//:benchmark_main",
  138. ],
  139. )
  140. cc_library(
  141. name = "spy_hash_state",
  142. testonly = True,
  143. hdrs = ["internal/spy_hash_state.h"],
  144. copts = ABSL_DEFAULT_COPTS,
  145. linkopts = ABSL_DEFAULT_LINKOPTS,
  146. visibility = ["//visibility:private"],
  147. deps = [
  148. ":hash",
  149. "//absl/strings",
  150. "//absl/strings:str_format",
  151. ],
  152. )
  153. cc_library(
  154. name = "city",
  155. srcs = ["internal/city.cc"],
  156. hdrs = [
  157. "internal/city.h",
  158. ],
  159. copts = ABSL_DEFAULT_COPTS,
  160. linkopts = ABSL_DEFAULT_LINKOPTS,
  161. deps = [
  162. "//absl/base:config",
  163. "//absl/base:core_headers",
  164. "//absl/base:endian",
  165. ],
  166. )
  167. cc_test(
  168. name = "city_test",
  169. srcs = ["internal/city_test.cc"],
  170. copts = ABSL_TEST_COPTS,
  171. linkopts = ABSL_DEFAULT_LINKOPTS,
  172. deps = [
  173. ":city",
  174. "@com_google_googletest//:gtest",
  175. "@com_google_googletest//:gtest_main",
  176. ],
  177. )
  178. cc_library(
  179. name = "low_level_hash",
  180. srcs = ["internal/low_level_hash.cc"],
  181. hdrs = ["internal/low_level_hash.h"],
  182. copts = ABSL_DEFAULT_COPTS,
  183. linkopts = ABSL_DEFAULT_LINKOPTS,
  184. visibility = ["//visibility:private"],
  185. deps = [
  186. "//absl/base:config",
  187. "//absl/base:endian",
  188. "//absl/base:prefetch",
  189. "//absl/numeric:int128",
  190. ],
  191. )
  192. cc_test(
  193. name = "low_level_hash_test",
  194. srcs = ["internal/low_level_hash_test.cc"],
  195. copts = ABSL_TEST_COPTS,
  196. linkopts = ABSL_DEFAULT_LINKOPTS,
  197. visibility = ["//visibility:private"],
  198. deps = [
  199. ":low_level_hash",
  200. "//absl/strings",
  201. "@com_google_googletest//:gtest",
  202. "@com_google_googletest//:gtest_main",
  203. ],
  204. )