1# 2# Copyright 2017 The Abseil Authors. 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# https://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15# 16 17load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test") 18load( 19 "//absl:copts/configure_copts.bzl", 20 "ABSL_DEFAULT_COPTS", 21 "ABSL_DEFAULT_LINKOPTS", 22 "ABSL_TEST_COPTS", 23) 24 25package(default_visibility = ["//visibility:public"]) 26 27licenses(["notice"]) 28 29# Internal data structure for efficiently detecting mutex dependency cycles 30cc_library( 31 name = "graphcycles_internal", 32 srcs = [ 33 "internal/graphcycles.cc", 34 ], 35 hdrs = [ 36 "internal/graphcycles.h", 37 ], 38 copts = ABSL_DEFAULT_COPTS, 39 linkopts = ABSL_DEFAULT_LINKOPTS, 40 visibility = [ 41 "//absl:__subpackages__", 42 ], 43 deps = [ 44 "//absl/base", 45 "//absl/base:base_internal", 46 "//absl/base:config", 47 "//absl/base:core_headers", 48 "//absl/base:malloc_internal", 49 "//absl/base:raw_logging_internal", 50 ], 51) 52 53cc_library( 54 name = "kernel_timeout_internal", 55 hdrs = ["internal/kernel_timeout.h"], 56 copts = ABSL_DEFAULT_COPTS, 57 linkopts = ABSL_DEFAULT_LINKOPTS, 58 visibility = [ 59 "//absl/synchronization:__pkg__", 60 ], 61 deps = [ 62 "//absl/base:core_headers", 63 "//absl/base:raw_logging_internal", 64 "//absl/time", 65 ], 66) 67 68cc_library( 69 name = "synchronization", 70 srcs = [ 71 "barrier.cc", 72 "blocking_counter.cc", 73 "internal/create_thread_identity.cc", 74 "internal/per_thread_sem.cc", 75 "internal/waiter.cc", 76 "mutex.cc", 77 "notification.cc", 78 ], 79 hdrs = [ 80 "barrier.h", 81 "blocking_counter.h", 82 "internal/create_thread_identity.h", 83 "internal/futex.h", 84 "internal/per_thread_sem.h", 85 "internal/waiter.h", 86 "mutex.h", 87 "notification.h", 88 ], 89 copts = ABSL_DEFAULT_COPTS, 90 linkopts = select({ 91 "//absl:windows": [], 92 "//absl:wasm": [], 93 "//conditions:default": ["-pthread"], 94 }) + ABSL_DEFAULT_LINKOPTS, 95 deps = [ 96 ":graphcycles_internal", 97 ":kernel_timeout_internal", 98 "//absl/base", 99 "//absl/base:atomic_hook", 100 "//absl/base:base_internal", 101 "//absl/base:config", 102 "//absl/base:core_headers", 103 "//absl/base:dynamic_annotations", 104 "//absl/base:malloc_internal", 105 "//absl/base:raw_logging_internal", 106 "//absl/debugging:stacktrace", 107 "//absl/debugging:symbolize", 108 "//absl/time", 109 ], 110) 111 112cc_test( 113 name = "barrier_test", 114 size = "small", 115 srcs = ["barrier_test.cc"], 116 copts = ABSL_TEST_COPTS, 117 linkopts = ABSL_DEFAULT_LINKOPTS, 118 deps = [ 119 ":synchronization", 120 "//absl/time", 121 "@com_google_googletest//:gtest_main", 122 ], 123) 124 125cc_test( 126 name = "blocking_counter_test", 127 size = "small", 128 srcs = ["blocking_counter_test.cc"], 129 copts = ABSL_TEST_COPTS, 130 linkopts = ABSL_DEFAULT_LINKOPTS, 131 deps = [ 132 ":synchronization", 133 "//absl/time", 134 "@com_google_googletest//:gtest_main", 135 ], 136) 137 138cc_test( 139 name = "graphcycles_test", 140 size = "medium", 141 srcs = ["internal/graphcycles_test.cc"], 142 copts = ABSL_TEST_COPTS, 143 linkopts = ABSL_DEFAULT_LINKOPTS, 144 deps = [ 145 ":graphcycles_internal", 146 "//absl/base:core_headers", 147 "//absl/base:raw_logging_internal", 148 "@com_google_googletest//:gtest_main", 149 ], 150) 151 152cc_test( 153 name = "graphcycles_benchmark", 154 srcs = ["internal/graphcycles_benchmark.cc"], 155 copts = ABSL_TEST_COPTS, 156 linkopts = ABSL_DEFAULT_LINKOPTS, 157 tags = [ 158 "benchmark", 159 ], 160 deps = [ 161 ":graphcycles_internal", 162 "//absl/base:raw_logging_internal", 163 "@com_github_google_benchmark//:benchmark_main", 164 ], 165) 166 167cc_library( 168 name = "thread_pool", 169 testonly = 1, 170 hdrs = ["internal/thread_pool.h"], 171 linkopts = ABSL_DEFAULT_LINKOPTS, 172 visibility = [ 173 "//absl:__subpackages__", 174 ], 175 deps = [ 176 ":synchronization", 177 "//absl/base:core_headers", 178 ], 179) 180 181cc_test( 182 name = "mutex_test", 183 size = "large", 184 srcs = ["mutex_test.cc"], 185 copts = ABSL_TEST_COPTS, 186 linkopts = ABSL_DEFAULT_LINKOPTS, 187 shard_count = 25, 188 deps = [ 189 ":synchronization", 190 ":thread_pool", 191 "//absl/base", 192 "//absl/base:config", 193 "//absl/base:core_headers", 194 "//absl/base:raw_logging_internal", 195 "//absl/memory", 196 "//absl/time", 197 "@com_google_googletest//:gtest_main", 198 ], 199) 200 201cc_library( 202 name = "mutex_benchmark_common", 203 testonly = 1, 204 srcs = ["mutex_benchmark.cc"], 205 copts = ABSL_TEST_COPTS, 206 linkopts = ABSL_DEFAULT_LINKOPTS, 207 visibility = [ 208 "//absl/synchronization:__pkg__", 209 ], 210 deps = [ 211 ":synchronization", 212 ":thread_pool", 213 "//absl/base", 214 "//absl/base:config", 215 "@com_github_google_benchmark//:benchmark_main", 216 ], 217 alwayslink = 1, 218) 219 220cc_binary( 221 name = "mutex_benchmark", 222 testonly = 1, 223 copts = ABSL_DEFAULT_COPTS, 224 linkopts = ABSL_DEFAULT_LINKOPTS, 225 visibility = ["//visibility:private"], 226 deps = [ 227 ":mutex_benchmark_common", 228 ], 229) 230 231cc_test( 232 name = "notification_test", 233 size = "small", 234 srcs = ["notification_test.cc"], 235 copts = ABSL_TEST_COPTS, 236 linkopts = ABSL_DEFAULT_LINKOPTS, 237 deps = [ 238 ":synchronization", 239 "//absl/time", 240 "@com_google_googletest//:gtest_main", 241 ], 242) 243 244cc_library( 245 name = "per_thread_sem_test_common", 246 testonly = 1, 247 srcs = ["internal/per_thread_sem_test.cc"], 248 copts = ABSL_TEST_COPTS, 249 linkopts = ABSL_DEFAULT_LINKOPTS, 250 deps = [ 251 ":synchronization", 252 "//absl/base", 253 "//absl/base:config", 254 "//absl/strings", 255 "//absl/time", 256 "@com_google_googletest//:gtest", 257 ], 258 alwayslink = 1, 259) 260 261cc_test( 262 name = "per_thread_sem_test", 263 size = "medium", 264 copts = ABSL_TEST_COPTS, 265 linkopts = ABSL_DEFAULT_LINKOPTS, 266 deps = [ 267 ":per_thread_sem_test_common", 268 ":synchronization", 269 "//absl/strings", 270 "//absl/time", 271 "@com_google_googletest//:gtest_main", 272 ], 273) 274 275cc_test( 276 name = "lifetime_test", 277 srcs = [ 278 "lifetime_test.cc", 279 ], 280 copts = ABSL_TEST_COPTS, 281 linkopts = ABSL_DEFAULT_LINKOPTS, 282 tags = ["no_test_ios_x86_64"], 283 deps = [ 284 ":synchronization", 285 "//absl/base:core_headers", 286 "//absl/base:raw_logging_internal", 287 ], 288) 289