# # 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 # # http://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.bzl", "ABSL_DEFAULT_COPTS", "ABSL_TEST_COPTS", "ABSL_EXCEPTIONS_FLAG", ) load( "//absl:test_dependencies.bzl", "GUNIT_MAIN_DEPS_SELECTOR", "GUNIT_MAIN_NO_LEAK_CHECK_DEPS_SELECTOR", ) package(default_visibility = ["//visibility:public"]) licenses(["notice"]) # Apache 2.0 # Some header files in //base are directly exported for unusual use cases, # and the ABSL versions must also be exported for those users. exports_files(["thread_annotations.h"]) cc_library( name = "spinlock_wait", srcs = [ "internal/spinlock_posix.inc", "internal/spinlock_wait.cc", "internal/spinlock_win32.inc", ], hdrs = [ "internal/scheduling_mode.h", "internal/spinlock_wait.h", ], copts = ABSL_DEFAULT_COPTS, deps = [":core_headers"], ) cc_library( name = "config", hdrs = [ "config.h", "policy_checks.h", ], copts = ABSL_DEFAULT_COPTS, ) cc_library( name = "dynamic_annotations", srcs = ["dynamic_annotations.cc"], hdrs = ["dynamic_annotations.h"], copts = ABSL_DEFAULT_COPTS, defines = ["__CLANG_SUPPORT_DYN_ANNOTATION__"], ) cc_library( name = "core_headers", hdrs = [ "attributes.h", "macros.h", "optimization.h", "port.h", "thread_annotations.h", ], copts = ABSL_DEFAULT_COPTS, deps = [ ":config", ":dynamic_annotations", ], ) cc_library( name = "malloc_extension", srcs = ["internal/malloc_extension.cc"], hdrs = [ "internal/malloc_extension.h", "internal/malloc_extension_c.h", ], copts = ABSL_DEFAULT_COPTS, deps = [ ":core_headers", ":dynamic_annotations", ], ) # malloc_extension feels like it wants to be folded into this target, but # malloc_internal gets special build treatment to compile at -O3, so these # need to stay separate. cc_library( name = "malloc_internal", srcs = [ "internal/low_level_alloc.cc", "internal/malloc_hook.cc", "internal/malloc_hook_mmap_linux.inc", ], hdrs = [ "internal/low_level_alloc.h", "internal/malloc_hook.h", "internal/malloc_hook_c.h", ], copts = ABSL_DEFAULT_COPTS, textual_hdrs = [ "internal/malloc_hook_invoke.h", ], deps = [ ":base", ":config", ":core_headers", ":dynamic_annotations", ":spinlock_wait", ], ) cc_library( name = "base_internal", hdrs = [ "internal/identity.h", "internal/invoke.h", ], copts = ABSL_DEFAULT_COPTS, ) cc_library( name = "base", srcs = [ "internal/cycleclock.cc", "internal/raw_logging.cc", "internal/spinlock.cc", "internal/sysinfo.cc", "internal/thread_identity.cc", "internal/unscaledcycleclock.cc", ], hdrs = [ "call_once.h", "casts.h", "internal/atomic_hook.h", "internal/cycleclock.h", "internal/log_severity.h", "internal/low_level_scheduling.h", "internal/per_thread_tls.h", "internal/raw_logging.h", "internal/spinlock.h", "internal/sysinfo.h", "internal/thread_identity.h", "internal/tsan_mutex_interface.h", "internal/unscaledcycleclock.h", ], copts = ABSL_DEFAULT_COPTS, deps = [ ":base_internal", ":config", ":core_headers", ":dynamic_annotations", ":spinlock_wait", ], ) cc_test( name = "bit_cast_test", size = "small", srcs = [ "bit_cast_test.cc", ], copts = ABSL_TEST_COPTS, deps = [ ":base", ":core_headers", ] + select(GUNIT_MAIN_DEPS_SELECTOR), ) cc_library( name = "throw_delegate", srcs = ["internal/throw_delegate.cc"], hdrs = ["internal/throw_delegate.h"], copts = ABSL_DEFAULT_COPTS + ABSL_EXCEPTIONS_FLAG, features = [ "-use_header_modules", # b/33207452 ], deps = [ ":base", ":config", ":core_headers", ], ) cc_test( name = "throw_delegate_test", srcs = ["throw_delegate_test.cc"], copts = ABSL_TEST_COPTS + ABSL_EXCEPTIONS_FLAG, deps = [ ":throw_delegate", ] + select(GUNIT_MAIN_DEPS_SELECTOR), ) cc_library( name = "exception_testing", testonly = 1, hdrs = ["internal/exception_testing.h"], copts = ABSL_TEST_COPTS, deps = [ ":config", "@com_google_googletest//:gtest", ], ) cc_test( name = "invoke_test", size = "small", srcs = ["invoke_test.cc"], copts = ABSL_TEST_COPTS, deps = [ ":base_internal", "//absl/strings", "//absl/memory", ] + select(GUNIT_MAIN_DEPS_SELECTOR), ) # Common test library made available for use in non-absl code that overrides # AbslInternalSpinLockDelay and AbslInternalSpinLockWake. cc_library( name = "spinlock_test_common", testonly = 1, srcs = ["spinlock_test_common.cc"], copts = ABSL_TEST_COPTS, deps = [ ":base", ":core_headers", ":spinlock_wait", "//absl/synchronization", "@com_google_googletest//:gtest", ], alwayslink = 1, ) cc_test( name = "spinlock_test", size = "medium", srcs = ["spinlock_test_common.cc"], copts = ABSL_TEST_COPTS, deps = [ ":base", ":core_headers", ":spinlock_wait", "//absl/synchronization", "@com_google_googletest//:gtest_main", ], ) cc_library( name = "endian", hdrs = [ "internal/endian.h", "internal/unaligned_access.h", ], copts = ABSL_DEFAULT_COPTS, deps = [ ":config", ":core_headers", ], ) cc_test( name = "endian_test", srcs = ["internal/endian_test.cc"], copts = ABSL_TEST_COPTS, deps = [ ":base", ":config", ":endian", ] + select(GUNIT_MAIN_DEPS_SELECTOR), ) cc_test( name = "config_test", srcs = ["config_test.cc"], copts = ABSL_TEST_COPTS, deps = [ ":config", ] + select(GUNIT_MAIN_DEPS_SELECTOR), ) cc_test( name = "call_once_test", srcs = ["call_once_test.cc"], copts = ABSL_TEST_COPTS, deps = [ ":base", ":core_headers", "//absl/synchronization", ] + select(GUNIT_MAIN_DEPS_SELECTOR), ) cc_test( name = "raw_logging_test", srcs = ["raw_logging_test.cc"], copts = ABSL_TEST_COPTS, deps = [ ":base", "@com_google_googletest//:gtest_main", ], ) cc_test( name = "sysinfo_test", size = "small", srcs = ["internal/sysinfo_test.cc"], copts = ABSL_TEST_COPTS, deps = [ ":base", "//absl/synchronization", ] + select(GUNIT_MAIN_DEPS_SELECTOR), ) cc_test( name = "low_level_alloc_test", size = "small", srcs = ["internal/low_level_alloc_test.cc"], copts = ABSL_TEST_COPTS, linkopts = select({ "//absl:windows": [], "//conditions:default": ["-pthread"], }), deps = [":malloc_internal"], ) cc_test( name = "thread_identity_test", size = "small", srcs = ["internal/thread_identity_test.cc"], copts = ABSL_TEST_COPTS, linkopts = select({ "//absl:windows": [], "//conditions:default": ["-pthread"], }), deps = [ ":base", ":core_headers", "//absl/synchronization", ] + select(GUNIT_MAIN_DEPS_SELECTOR), ) cc_test( name = "malloc_extension_system_malloc_test", size = "small", srcs = ["internal/malloc_extension_test.cc"], copts = select({ "//absl:windows": [ "/DABSL_MALLOC_EXTENSION_TEST_ALLOW_MISSING_EXTENSION=1", ], "//conditions:default": [ "-DABSL_MALLOC_EXTENSION_TEST_ALLOW_MISSING_EXTENSION=1", ], }) + ABSL_TEST_COPTS, features = [ # This test can't be run under lsan because the test requires system # malloc, and lsan provides a competing malloc implementation. "-leak_sanitize", ], deps = [ ":malloc_extension", ] + select(GUNIT_MAIN_NO_LEAK_CHECK_DEPS_SELECTOR), )