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 "//absl/strings:str_format", 97 ], 98) 99 100cc_test( 101 name = "crc32c_test", 102 srcs = ["crc32c_test.cc"], 103 copts = ABSL_TEST_COPTS, 104 linkopts = ABSL_DEFAULT_LINKOPTS, 105 visibility = ["//visibility:private"], 106 deps = [ 107 ":crc32c", 108 "//absl/strings", 109 "//absl/strings:str_format", 110 "@com_google_googletest//:gtest_main", 111 ], 112) 113 114cc_library( 115 name = "non_temporal_arm_intrinsics", 116 hdrs = ["internal/non_temporal_arm_intrinsics.h"], 117 copts = ABSL_DEFAULT_COPTS, 118 linkopts = ABSL_DEFAULT_LINKOPTS, 119 visibility = ["//visibility:private"], 120 deps = [ 121 "//absl/base:config", 122 ], 123) 124 125cc_library( 126 name = "non_temporal_memcpy", 127 hdrs = ["internal/non_temporal_memcpy.h"], 128 copts = ABSL_DEFAULT_COPTS, 129 linkopts = ABSL_DEFAULT_LINKOPTS, 130 visibility = ["//visibility:private"], 131 deps = [ 132 ":non_temporal_arm_intrinsics", 133 "//absl/base:config", 134 "//absl/base:core_headers", 135 ], 136) 137 138cc_test( 139 name = "crc_memcpy_test", 140 size = "large", 141 srcs = ["internal/crc_memcpy_test.cc"], 142 copts = ABSL_TEST_COPTS, 143 linkopts = ABSL_DEFAULT_LINKOPTS, 144 shard_count = 3, 145 visibility = ["//visibility:private"], 146 deps = [ 147 ":crc32c", 148 "//absl/memory", 149 "//absl/random", 150 "//absl/random:distributions", 151 "//absl/strings", 152 "@com_google_googletest//:gtest_main", 153 ], 154) 155 156cc_test( 157 name = "non_temporal_memcpy_test", 158 srcs = ["internal/non_temporal_memcpy_test.cc"], 159 copts = ABSL_TEST_COPTS, 160 linkopts = ABSL_DEFAULT_LINKOPTS, 161 visibility = ["//visibility:private"], 162 deps = [ 163 ":non_temporal_memcpy", 164 "@com_google_googletest//:gtest_main", 165 ], 166) 167 168cc_library( 169 name = "crc_cord_state", 170 srcs = ["internal/crc_cord_state.cc"], 171 hdrs = ["internal/crc_cord_state.h"], 172 copts = ABSL_DEFAULT_COPTS, 173 linkopts = ABSL_DEFAULT_LINKOPTS, 174 visibility = ["//absl/strings:__pkg__"], 175 deps = [ 176 ":crc32c", 177 "//absl/base:config", 178 "//absl/numeric:bits", 179 "//absl/strings", 180 ], 181) 182 183cc_test( 184 name = "crc_cord_state_test", 185 srcs = ["internal/crc_cord_state_test.cc"], 186 copts = ABSL_TEST_COPTS, 187 linkopts = ABSL_DEFAULT_LINKOPTS, 188 visibility = ["//visibility:private"], 189 deps = [ 190 ":crc32c", 191 ":crc_cord_state", 192 "@com_google_googletest//:gtest_main", 193 ], 194) 195 196cc_binary( 197 name = "crc32c_benchmark", 198 testonly = 1, 199 srcs = ["crc32c_benchmark.cc"], 200 copts = ABSL_TEST_COPTS, 201 linkopts = ABSL_DEFAULT_LINKOPTS, 202 tags = [ 203 "benchmark", 204 ], 205 visibility = ["//visibility:private"], 206 deps = [ 207 ":crc32c", 208 "//absl/memory", 209 "//absl/strings", 210 "@com_github_google_benchmark//:benchmark_main", 211 ], 212) 213