• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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