blob: de06ebddc33669089c6e97784770a63b927d205a [file] [log] [blame]
#
# Copyright 2017 The Abseil Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
load(
"//absl:copts/configure_copts.bzl",
"ABSL_DEFAULT_COPTS",
"ABSL_DEFAULT_LINKOPTS",
"ABSL_TEST_COPTS",
)
package(
default_visibility = ["//visibility:private"],
features = [
"header_modules",
"layering_check",
"parse_headers",
],
)
licenses(["notice"])
# Internal data structure for efficiently detecting mutex dependency cycles
cc_library(
name = "graphcycles_internal",
srcs = [
"internal/graphcycles.cc",
],
hdrs = [
"internal/graphcycles.h",
],
copts = ABSL_DEFAULT_COPTS + select({
"//conditions:default": [],
}),
linkopts = ABSL_DEFAULT_LINKOPTS,
deps = [
"//absl/base",
"//absl/base:base_internal",
"//absl/base:config",
"//absl/base:core_headers",
"//absl/base:malloc_internal",
"//absl/base:raw_logging_internal",
],
)
cc_library(
name = "kernel_timeout_internal",
srcs = ["internal/kernel_timeout.cc"],
hdrs = ["internal/kernel_timeout.h"],
copts = ABSL_DEFAULT_COPTS,
linkopts = ABSL_DEFAULT_LINKOPTS,
visibility = [
],
deps = [
"//absl/base",
"//absl/base:config",
"//absl/base:core_headers",
"//absl/base:raw_logging_internal",
"//absl/time",
],
)
cc_test(
name = "kernel_timeout_internal_test",
srcs = ["internal/kernel_timeout_test.cc"],
copts = ABSL_TEST_COPTS,
flaky = 1,
linkopts = ABSL_DEFAULT_LINKOPTS,
deps = [
":kernel_timeout_internal",
"//absl/base:config",
"//absl/random",
"//absl/time",
"@com_google_googletest//:gtest",
"@com_google_googletest//:gtest_main",
],
)
cc_library(
name = "synchronization",
srcs = [
"barrier.cc",
"blocking_counter.cc",
"internal/create_thread_identity.cc",
"internal/futex_waiter.cc",
"internal/per_thread_sem.cc",
"internal/pthread_waiter.cc",
"internal/sem_waiter.cc",
"internal/stdcpp_waiter.cc",
"internal/waiter_base.cc",
"internal/win32_waiter.cc",
"mutex.cc",
"notification.cc",
],
hdrs = [
"barrier.h",
"blocking_counter.h",
"internal/create_thread_identity.h",
"internal/futex.h",
"internal/futex_waiter.h",
"internal/per_thread_sem.h",
"internal/pthread_waiter.h",
"internal/sem_waiter.h",
"internal/stdcpp_waiter.h",
"internal/waiter.h",
"internal/waiter_base.h",
"internal/win32_waiter.h",
"mutex.h",
"notification.h",
],
copts = ABSL_DEFAULT_COPTS,
linkopts = select({
"//absl:msvc_compiler": [],
"//absl:clang-cl_compiler": [],
"//absl:wasm": [],
"//conditions:default": ["-pthread"],
}) + ABSL_DEFAULT_LINKOPTS,
visibility = ["//visibility:public"],
deps = [
":graphcycles_internal",
":kernel_timeout_internal",
"//absl/base",
"//absl/base:atomic_hook",
"//absl/base:base_internal",
"//absl/base:config",
"//absl/base:core_headers",
"//absl/base:dynamic_annotations",
"//absl/base:malloc_internal",
"//absl/base:raw_logging_internal",
"//absl/debugging:stacktrace",
"//absl/debugging:symbolize",
"//absl/time",
] + select({
"//conditions:default": [],
}),
)
cc_test(
name = "barrier_test",
size = "small",
srcs = ["barrier_test.cc"],
copts = ABSL_TEST_COPTS,
linkopts = ABSL_DEFAULT_LINKOPTS,
tags = [
"no_test_wasm", # b/122473323
],
deps = [
":synchronization",
"//absl/time",
"@com_google_googletest//:gtest",
"@com_google_googletest//:gtest_main",
],
)
cc_test(
name = "blocking_counter_test",
size = "small",
srcs = ["blocking_counter_test.cc"],
copts = ABSL_TEST_COPTS,
linkopts = ABSL_DEFAULT_LINKOPTS,
tags = [
"no_test_wasm", # b/122473323
],
deps = [
":synchronization",
"//absl/time",
"@com_google_googletest//:gtest",
"@com_google_googletest//:gtest_main",
],
)
cc_binary(
name = "blocking_counter_benchmark",
testonly = 1,
srcs = ["blocking_counter_benchmark.cc"],
copts = ABSL_TEST_COPTS,
linkopts = ABSL_DEFAULT_LINKOPTS,
tags = ["benchmark"],
deps = [
":synchronization",
":thread_pool",
"//absl/base:no_destructor",
"@com_github_google_benchmark//:benchmark_main",
],
)
cc_test(
name = "graphcycles_test",
size = "medium",
srcs = ["internal/graphcycles_test.cc"],
copts = ABSL_TEST_COPTS,
linkopts = ABSL_DEFAULT_LINKOPTS,
deps = [
":graphcycles_internal",
"//absl/base:core_headers",
"//absl/log",
"//absl/log:check",
"@com_google_googletest//:gtest",
"@com_google_googletest//:gtest_main",
],
)
cc_test(
name = "graphcycles_benchmark",
srcs = ["internal/graphcycles_benchmark.cc"],
copts = ABSL_TEST_COPTS,
linkopts = ABSL_DEFAULT_LINKOPTS,
tags = [
"benchmark",
],
deps = [
":graphcycles_internal",
"//absl/base:raw_logging_internal",
"@com_github_google_benchmark//:benchmark_main",
"@com_google_googletest//:gtest",
],
)
cc_library(
name = "thread_pool",
testonly = 1,
hdrs = ["internal/thread_pool.h"],
linkopts = ABSL_DEFAULT_LINKOPTS,
visibility = [
"//absl:__subpackages__",
],
deps = [
":synchronization",
"//absl/base:core_headers",
"//absl/functional:any_invocable",
],
)
cc_test(
name = "mutex_test",
size = "large",
srcs = ["mutex_test.cc"],
copts = ABSL_TEST_COPTS,
flaky = 1,
linkopts = ABSL_DEFAULT_LINKOPTS,
shard_count = 25,
deps = [
":synchronization",
":thread_pool",
"//absl/base",
"//absl/base:config",
"//absl/base:core_headers",
"//absl/log",
"//absl/log:check",
"//absl/memory",
"//absl/time",
"@com_google_googletest//:gtest",
"@com_google_googletest//:gtest_main",
],
)
cc_test(
name = "mutex_method_pointer_test",
srcs = ["mutex_method_pointer_test.cc"],
copts = ABSL_TEST_COPTS,
linkopts = ABSL_DEFAULT_LINKOPTS,
deps = [
":synchronization",
"//absl/base:config",
"@com_google_googletest//:gtest",
"@com_google_googletest//:gtest_main",
],
)
cc_library(
name = "mutex_benchmark_common",
testonly = 1,
srcs = ["mutex_benchmark.cc"],
copts = ABSL_TEST_COPTS,
linkopts = ABSL_DEFAULT_LINKOPTS,
visibility = [
],
deps = [
":synchronization",
":thread_pool",
"//absl/base",
"//absl/base:config",
"//absl/base:no_destructor",
"@com_github_google_benchmark//:benchmark_main",
],
alwayslink = 1,
)
cc_binary(
name = "mutex_benchmark",
testonly = 1,
copts = ABSL_DEFAULT_COPTS,
linkopts = ABSL_DEFAULT_LINKOPTS,
deps = [
":mutex_benchmark_common",
],
)
cc_test(
name = "notification_test",
size = "small",
srcs = ["notification_test.cc"],
copts = ABSL_TEST_COPTS,
flaky = 1,
linkopts = ABSL_DEFAULT_LINKOPTS,
tags = ["no_test_lexan"],
deps = [
":synchronization",
"//absl/time",
"@com_google_googletest//:gtest",
"@com_google_googletest//:gtest_main",
],
)
cc_library(
name = "per_thread_sem_test_common",
testonly = 1,
srcs = ["internal/per_thread_sem_test.cc"],
copts = ABSL_TEST_COPTS,
linkopts = ABSL_DEFAULT_LINKOPTS,
visibility = [
],
deps = [
":synchronization",
"//absl/base",
"//absl/base:config",
"//absl/strings",
"//absl/time",
"@com_google_googletest//:gtest",
],
alwayslink = 1,
)
cc_test(
name = "per_thread_sem_test",
size = "large",
copts = ABSL_TEST_COPTS,
linkopts = ABSL_DEFAULT_LINKOPTS,
tags = [
"no_test_wasm",
],
deps = [
":per_thread_sem_test_common",
":synchronization",
"//absl/strings",
"//absl/time",
"@com_google_googletest//:gtest_main",
],
)
cc_test(
name = "waiter_test",
srcs = ["internal/waiter_test.cc"],
copts = ABSL_TEST_COPTS,
flaky = 1,
linkopts = ABSL_DEFAULT_LINKOPTS,
deps = [
":kernel_timeout_internal",
":synchronization",
":thread_pool",
"//absl/base:config",
"//absl/random",
"//absl/time",
"@com_google_googletest//:gtest",
"@com_google_googletest//:gtest_main",
],
)
cc_test(
name = "lifetime_test",
srcs = [
"lifetime_test.cc",
],
copts = ABSL_TEST_COPTS,
linkopts = ABSL_DEFAULT_LINKOPTS,
tags = [
"no_test_ios_x86_64",
"no_test_wasm",
],
deps = [
":synchronization",
"//absl/base:core_headers",
"//absl/log:check",
],
)