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(default_visibility = ["//visibility:private"]) 23 24licenses(["notice"]) 25 26cc_library( 27 name = "cpu_detect", 28 srcs = [ 29 "internal/cpu_detect.cc", 30 ], 31 hdrs = ["internal/cpu_detect.h"], 32 copts = ABSL_DEFAULT_COPTS, 33 linkopts = ABSL_DEFAULT_LINKOPTS, 34 visibility = ["//visibility:private"], 35 deps = [ 36 "//absl/base", 37 "//absl/base:config", 38 ], 39) 40 41cc_library( 42 name = "crc_internal", 43 srcs = [ 44 "internal/crc.cc", 45 "internal/crc_internal.h", 46 "internal/crc_x86_arm_combined.cc", 47 ], 48 hdrs = [ 49 "internal/crc.h", 50 "internal/crc32_x86_arm_combined_simd.h", 51 ], 52 copts = ABSL_DEFAULT_COPTS, 53 linkopts = ABSL_DEFAULT_LINKOPTS, 54 visibility = ["//visibility:private"], 55 deps = [ 56 ":cpu_detect", 57 "//absl/base", 58 "//absl/base:config", 59 "//absl/base:core_headers", 60 "//absl/base:dynamic_annotations", 61 "//absl/base:endian", 62 "//absl/base:prefetch", 63 "//absl/base:raw_logging_internal", 64 "//absl/memory", 65 "//absl/numeric:bits", 66 ], 67) 68 69cc_library( 70 name = "crc32c", 71 srcs = [ 72 "crc32c.cc", 73 "internal/crc32c_inline.h", 74 "internal/crc_memcpy_fallback.cc", 75 "internal/crc_memcpy_x86_64.cc", 76 "internal/crc_non_temporal_memcpy.cc", 77 ], 78 hdrs = [ 79 "crc32c.h", 80 "internal/crc32c.h", 81 "internal/crc_memcpy.h", 82 ], 83 copts = ABSL_DEFAULT_COPTS, 84 linkopts = ABSL_DEFAULT_LINKOPTS, 85 visibility = ["//visibility:public"], 86 deps = [ 87 ":cpu_detect", 88 ":crc_internal", 89 ":non_temporal_memcpy", 90 "//absl/base:config", 91 "//absl/base:core_headers", 92 "//absl/base:dynamic_annotations", 93 "//absl/base:endian", 94 "//absl/base:prefetch", 95 "//absl/strings", 96 ], 97) 98 99cc_test( 100 name = "crc32c_test", 101 srcs = ["crc32c_test.cc"], 102 copts = ABSL_TEST_COPTS, 103 linkopts = ABSL_DEFAULT_LINKOPTS, 104 visibility = ["//visibility:private"], 105 deps = [ 106 ":crc32c", 107 "//absl/strings", 108 "@com_google_googletest//:gtest_main", 109 ], 110) 111 112cc_library( 113 name = "non_temporal_arm_intrinsics", 114 hdrs = ["internal/non_temporal_arm_intrinsics.h"], 115 copts = ABSL_DEFAULT_COPTS, 116 linkopts = ABSL_DEFAULT_LINKOPTS, 117 visibility = ["//visibility:private"], 118 deps = [ 119 "//absl/base:config", 120 ], 121) 122 123cc_library( 124 name = "non_temporal_memcpy", 125 hdrs = ["internal/non_temporal_memcpy.h"], 126 copts = ABSL_DEFAULT_COPTS, 127 linkopts = ABSL_DEFAULT_LINKOPTS, 128 visibility = ["//visibility:private"], 129 deps = [ 130 ":non_temporal_arm_intrinsics", 131 "//absl/base:config", 132 "//absl/base:core_headers", 133 ], 134) 135 136cc_test( 137 name = "crc_memcpy_test", 138 size = "large", 139 srcs = ["internal/crc_memcpy_test.cc"], 140 copts = ABSL_TEST_COPTS, 141 linkopts = ABSL_DEFAULT_LINKOPTS, 142 shard_count = 3, 143 visibility = ["//visibility:private"], 144 deps = [ 145 ":crc32c", 146 "//absl/memory", 147 "//absl/random", 148 "//absl/random:distributions", 149 "//absl/strings", 150 "@com_google_googletest//:gtest_main", 151 ], 152) 153 154cc_test( 155 name = "non_temporal_memcpy_test", 156 srcs = ["internal/non_temporal_memcpy_test.cc"], 157 copts = ABSL_TEST_COPTS, 158 linkopts = ABSL_DEFAULT_LINKOPTS, 159 visibility = ["//visibility:private"], 160 deps = [ 161 ":non_temporal_memcpy", 162 "@com_google_googletest//:gtest_main", 163 ], 164) 165 166cc_library( 167 name = "crc_cord_state", 168 srcs = ["internal/crc_cord_state.cc"], 169 hdrs = ["internal/crc_cord_state.h"], 170 copts = ABSL_DEFAULT_COPTS, 171 linkopts = ABSL_DEFAULT_LINKOPTS, 172 visibility = ["//absl/strings:__pkg__"], 173 deps = [ 174 ":crc32c", 175 "//absl/base:config", 176 "//absl/numeric:bits", 177 "//absl/strings", 178 ], 179) 180 181cc_test( 182 name = "crc_cord_state_test", 183 srcs = ["internal/crc_cord_state_test.cc"], 184 copts = ABSL_TEST_COPTS, 185 linkopts = ABSL_DEFAULT_LINKOPTS, 186 visibility = ["//visibility:private"], 187 deps = [ 188 ":crc32c", 189 ":crc_cord_state", 190 "@com_google_googletest//:gtest_main", 191 ], 192) 193 194cc_binary( 195 name = "crc32c_benchmark", 196 testonly = 1, 197 srcs = ["crc32c_benchmark.cc"], 198 copts = ABSL_TEST_COPTS, 199 linkopts = ABSL_DEFAULT_LINKOPTS, 200 tags = [ 201 "benchmark", 202 ], 203 visibility = ["//visibility:private"], 204 deps = [ 205 ":crc32c", 206 "//absl/memory", 207 "//absl/strings", 208 "@com_github_google_benchmark//:benchmark_main", 209 ], 210) 211