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