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 17load( 18 "//absl:copts/configure_copts.bzl", 19 "ABSL_DEFAULT_COPTS", 20 "ABSL_DEFAULT_LINKOPTS", 21 "ABSL_TEST_COPTS", 22) 23 24package( 25 default_visibility = ["//visibility:public"], 26 features = [ 27 "header_modules", 28 "layering_check", 29 "parse_headers", 30 ], 31) 32 33licenses(["notice"]) 34 35cc_library( 36 name = "hash", 37 srcs = [ 38 "internal/hash.cc", 39 "internal/hash.h", 40 ], 41 hdrs = ["hash.h"], 42 copts = ABSL_DEFAULT_COPTS, 43 linkopts = ABSL_DEFAULT_LINKOPTS, 44 deps = [ 45 ":city", 46 ":low_level_hash", 47 "//absl/base:config", 48 "//absl/base:core_headers", 49 "//absl/base:endian", 50 "//absl/container:fixed_array", 51 "//absl/functional:function_ref", 52 "//absl/meta:type_traits", 53 "//absl/numeric:bits", 54 "//absl/numeric:int128", 55 "//absl/strings", 56 "//absl/types:optional", 57 "//absl/types:variant", 58 "//absl/utility", 59 ], 60) 61 62cc_library( 63 name = "hash_testing", 64 testonly = True, 65 hdrs = ["hash_testing.h"], 66 linkopts = ABSL_DEFAULT_LINKOPTS, 67 deps = [ 68 ":spy_hash_state", 69 "//absl/meta:type_traits", 70 "//absl/strings", 71 "//absl/types:variant", 72 "@com_google_googletest//:gtest", 73 ], 74) 75 76cc_test( 77 name = "hash_test", 78 srcs = [ 79 "hash_test.cc", 80 "internal/hash_test.h", 81 ], 82 copts = ABSL_TEST_COPTS, 83 linkopts = ABSL_DEFAULT_LINKOPTS, 84 deps = [ 85 ":hash", 86 ":hash_testing", 87 ":spy_hash_state", 88 "//absl/base:config", 89 "//absl/base:core_headers", 90 "//absl/container:btree", 91 "//absl/container:flat_hash_map", 92 "//absl/container:flat_hash_set", 93 "//absl/container:node_hash_map", 94 "//absl/container:node_hash_set", 95 "//absl/memory", 96 "//absl/meta:type_traits", 97 "//absl/numeric:int128", 98 "//absl/strings:cord_test_helpers", 99 "//absl/strings:string_view", 100 "//absl/types:optional", 101 "//absl/types:variant", 102 "@com_google_googletest//:gtest", 103 "@com_google_googletest//:gtest_main", 104 ], 105) 106 107cc_test( 108 name = "hash_instantiated_test", 109 srcs = [ 110 "hash_instantiated_test.cc", 111 "internal/hash_test.h", 112 ], 113 copts = ABSL_TEST_COPTS, 114 linkopts = ABSL_DEFAULT_LINKOPTS, 115 deps = [ 116 ":hash", 117 ":hash_testing", 118 "//absl/base:config", 119 "//absl/container:btree", 120 "//absl/container:flat_hash_map", 121 "//absl/container:flat_hash_set", 122 "//absl/container:node_hash_map", 123 "//absl/container:node_hash_set", 124 "@com_google_googletest//:gtest", 125 "@com_google_googletest//:gtest_main", 126 ], 127) 128 129cc_binary( 130 name = "hash_benchmark", 131 testonly = True, 132 srcs = ["hash_benchmark.cc"], 133 copts = ABSL_TEST_COPTS, 134 linkopts = ABSL_DEFAULT_LINKOPTS, 135 tags = ["benchmark"], 136 visibility = ["//visibility:private"], 137 deps = [ 138 ":hash", 139 "//absl/base:core_headers", 140 "//absl/container:flat_hash_set", 141 "//absl/random", 142 "//absl/strings", 143 "//absl/strings:cord", 144 "//absl/strings:cord_test_helpers", 145 "@com_github_google_benchmark//:benchmark_main", 146 ], 147) 148 149cc_library( 150 name = "spy_hash_state", 151 testonly = True, 152 hdrs = ["internal/spy_hash_state.h"], 153 copts = ABSL_DEFAULT_COPTS, 154 linkopts = ABSL_DEFAULT_LINKOPTS, 155 visibility = ["//visibility:private"], 156 deps = [ 157 ":hash", 158 "//absl/strings", 159 "//absl/strings:str_format", 160 ], 161) 162 163cc_library( 164 name = "city", 165 srcs = ["internal/city.cc"], 166 hdrs = [ 167 "internal/city.h", 168 ], 169 copts = ABSL_DEFAULT_COPTS, 170 linkopts = ABSL_DEFAULT_LINKOPTS, 171 deps = [ 172 "//absl/base:config", 173 "//absl/base:core_headers", 174 "//absl/base:endian", 175 ], 176) 177 178cc_test( 179 name = "city_test", 180 srcs = ["internal/city_test.cc"], 181 copts = ABSL_TEST_COPTS, 182 linkopts = ABSL_DEFAULT_LINKOPTS, 183 deps = [ 184 ":city", 185 "@com_google_googletest//:gtest", 186 "@com_google_googletest//:gtest_main", 187 ], 188) 189 190cc_library( 191 name = "low_level_hash", 192 srcs = ["internal/low_level_hash.cc"], 193 hdrs = ["internal/low_level_hash.h"], 194 copts = ABSL_DEFAULT_COPTS, 195 linkopts = ABSL_DEFAULT_LINKOPTS, 196 visibility = ["//visibility:private"], 197 deps = [ 198 "//absl/base:config", 199 "//absl/base:endian", 200 "//absl/base:prefetch", 201 "//absl/numeric:int128", 202 ], 203) 204 205cc_test( 206 name = "low_level_hash_test", 207 srcs = ["internal/low_level_hash_test.cc"], 208 copts = ABSL_TEST_COPTS, 209 linkopts = ABSL_DEFAULT_LINKOPTS, 210 visibility = ["//visibility:private"], 211 deps = [ 212 ":low_level_hash", 213 "//absl/strings", 214 "@com_google_googletest//:gtest", 215 "@com_google_googletest//:gtest_main", 216 ], 217) 218