xref: /aosp_15_r20/external/abseil-cpp/absl/crc/BUILD.bazel (revision 9356374a3709195abf420251b3e825997ff56c0f)
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