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