BUILD.bazel 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  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. load(
  15. "//absl:copts/configure_copts.bzl",
  16. "ABSL_DEFAULT_COPTS",
  17. "ABSL_DEFAULT_LINKOPTS",
  18. "ABSL_TEST_COPTS",
  19. )
  20. package(
  21. default_visibility = ["//visibility:private"],
  22. features = [
  23. "header_modules",
  24. "layering_check",
  25. "parse_headers",
  26. ],
  27. )
  28. licenses(["notice"])
  29. cc_library(
  30. name = "cpu_detect",
  31. srcs = [
  32. "internal/cpu_detect.cc",
  33. ],
  34. hdrs = ["internal/cpu_detect.h"],
  35. copts = ABSL_DEFAULT_COPTS,
  36. linkopts = ABSL_DEFAULT_LINKOPTS,
  37. visibility = ["//visibility:private"],
  38. deps = [
  39. "//absl/base",
  40. "//absl/base:config",
  41. ],
  42. )
  43. cc_library(
  44. name = "crc_internal",
  45. srcs = [
  46. "internal/crc.cc",
  47. "internal/crc_internal.h",
  48. "internal/crc_x86_arm_combined.cc",
  49. ],
  50. hdrs = [
  51. "internal/crc.h",
  52. "internal/crc32_x86_arm_combined_simd.h",
  53. ],
  54. copts = ABSL_DEFAULT_COPTS,
  55. linkopts = ABSL_DEFAULT_LINKOPTS,
  56. visibility = ["//visibility:private"],
  57. deps = [
  58. ":cpu_detect",
  59. "//absl/base:config",
  60. "//absl/base:core_headers",
  61. "//absl/base:endian",
  62. "//absl/base:prefetch",
  63. "//absl/base:raw_logging_internal",
  64. "//absl/memory",
  65. "//absl/numeric:bits",
  66. ],
  67. )
  68. cc_library(
  69. name = "crc32c",
  70. srcs = [
  71. "crc32c.cc",
  72. "internal/crc32c_inline.h",
  73. "internal/crc_memcpy_fallback.cc",
  74. "internal/crc_memcpy_x86_arm_combined.cc",
  75. "internal/crc_non_temporal_memcpy.cc",
  76. ],
  77. hdrs = [
  78. "crc32c.h",
  79. "internal/crc32c.h",
  80. "internal/crc_memcpy.h",
  81. ],
  82. copts = ABSL_DEFAULT_COPTS,
  83. linkopts = ABSL_DEFAULT_LINKOPTS,
  84. visibility = ["//visibility:public"],
  85. deps = [
  86. ":cpu_detect",
  87. ":crc_internal",
  88. ":non_temporal_memcpy",
  89. "//absl/base:config",
  90. "//absl/base:core_headers",
  91. "//absl/base:endian",
  92. "//absl/base:prefetch",
  93. "//absl/strings",
  94. "//absl/strings:str_format",
  95. ],
  96. )
  97. cc_test(
  98. name = "crc32c_test",
  99. srcs = ["crc32c_test.cc"],
  100. copts = ABSL_TEST_COPTS,
  101. linkopts = ABSL_DEFAULT_LINKOPTS,
  102. visibility = ["//visibility:private"],
  103. deps = [
  104. ":crc32c",
  105. "//absl/strings",
  106. "//absl/strings:str_format",
  107. "@com_google_googletest//:gtest",
  108. "@com_google_googletest//:gtest_main",
  109. ],
  110. )
  111. cc_library(
  112. name = "non_temporal_arm_intrinsics",
  113. hdrs = ["internal/non_temporal_arm_intrinsics.h"],
  114. copts = ABSL_DEFAULT_COPTS,
  115. linkopts = ABSL_DEFAULT_LINKOPTS,
  116. visibility = [
  117. ":__pkg__",
  118. ],
  119. deps = [
  120. "//absl/base:config",
  121. ],
  122. )
  123. cc_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 = [
  129. ":__pkg__",
  130. ],
  131. deps = [
  132. ":non_temporal_arm_intrinsics",
  133. "//absl/base:config",
  134. "//absl/base:core_headers",
  135. ],
  136. )
  137. cc_test(
  138. name = "crc_memcpy_test",
  139. size = "large",
  140. srcs = ["internal/crc_memcpy_test.cc"],
  141. copts = ABSL_TEST_COPTS,
  142. linkopts = ABSL_DEFAULT_LINKOPTS,
  143. shard_count = 3,
  144. visibility = ["//visibility:private"],
  145. deps = [
  146. ":crc32c",
  147. "//absl/memory",
  148. "//absl/random",
  149. "//absl/random:distributions",
  150. "//absl/strings",
  151. "@com_google_googletest//:gtest",
  152. "@com_google_googletest//:gtest_main",
  153. ],
  154. )
  155. cc_test(
  156. name = "non_temporal_memcpy_test",
  157. srcs = ["internal/non_temporal_memcpy_test.cc"],
  158. copts = ABSL_TEST_COPTS,
  159. linkopts = ABSL_DEFAULT_LINKOPTS,
  160. visibility = ["//visibility:private"],
  161. deps = [
  162. ":non_temporal_memcpy",
  163. "@com_google_googletest//:gtest",
  164. "@com_google_googletest//:gtest_main",
  165. ],
  166. )
  167. cc_library(
  168. name = "crc_cord_state",
  169. srcs = ["internal/crc_cord_state.cc"],
  170. hdrs = ["internal/crc_cord_state.h"],
  171. copts = ABSL_DEFAULT_COPTS,
  172. linkopts = ABSL_DEFAULT_LINKOPTS,
  173. visibility = ["//absl/strings:__pkg__"],
  174. deps = [
  175. ":crc32c",
  176. "//absl/base:config",
  177. "//absl/base:no_destructor",
  178. "//absl/numeric:bits",
  179. ],
  180. )
  181. cc_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",
  191. "@com_google_googletest//:gtest_main",
  192. ],
  193. )
  194. cc_binary(
  195. name = "crc32c_benchmark",
  196. testonly = True,
  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. )