#
# 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",
)

package(
    default_visibility = ["//visibility:public"],
)

licenses(["notice"])  # Apache 2.0

cc_library(
    name = "stacktrace",
    srcs = [
        "stacktrace.cc",
    ],
    hdrs = ["stacktrace.h"],
    copts = ABSL_DEFAULT_COPTS,
    deps = [
        ":debugging_internal",
        "//absl/base",
        "//absl/base:core_headers",
    ],
)

cc_library(
    name = "debugging_internal",
    srcs = [
        "internal/address_is_readable.cc",
        "internal/elf_mem_image.cc",
        "internal/vdso_support.cc",
    ],
    hdrs = [
        "internal/address_is_readable.h",
        "internal/elf_mem_image.h",
        "internal/stacktrace_aarch64-inl.inc",
        "internal/stacktrace_arm-inl.inc",
        "internal/stacktrace_config.h",
        "internal/stacktrace_generic-inl.inc",
        "internal/stacktrace_powerpc-inl.inc",
        "internal/stacktrace_unimplemented-inl.inc",
        "internal/stacktrace_win32-inl.inc",
        "internal/stacktrace_x86-inl.inc",
        "internal/vdso_support.h",
    ],
    copts = ABSL_DEFAULT_COPTS,
    deps = [
        "//absl/base",
        "//absl/base:dynamic_annotations",
        "//absl/base:core_headers",
    ],
)

cc_library(
    name = "leak_check",
    srcs = select({
        # The leak checking interface depends on weak function
        # declarations that may not necessarily have definitions.
        # Windows doesn't support this, and ios requires
        # guaranteed definitions for weak symbols.
        "//absl:ios": [],
        "//absl:windows": [],
        "//conditions:default": [
            "leak_check.cc",
        ],
    }),
    hdrs = select({
        "//absl:ios": [],
        "//absl:windows": [],
        "//conditions:default": ["leak_check.h"],
    }),
    deps = ["//absl/base:core_headers"],
)

# Adding a dependency to leak_check_disable will disable
# sanitizer leak checking (asan/lsan) in a test without
# the need to mess around with build features.
cc_library(
    name = "leak_check_disable",
    srcs = ["leak_check_disable.cc"],
    linkstatic = 1,
    alwayslink = 1,
)

# These targets exists for use in tests only, explicitly configuring the
# LEAK_SANITIZER macro. It must be linked with -fsanitize=leak for lsan.
ABSL_LSAN_LINKOPTS = select({
    "//absl:llvm_compiler": ["-fsanitize=leak"],
    "//conditions:default": [],
})

cc_library(
    name = "leak_check_api_enabled_for_testing",
    testonly = 1,
    srcs = ["leak_check.cc"],
    hdrs = ["leak_check.h"],
    copts = select({
        "//absl:llvm_compiler": ["-DLEAK_SANITIZER"],
        "//conditions:default": [],
    }),
    visibility = ["//visibility:private"],
)

cc_library(
    name = "leak_check_api_disabled_for_testing",
    testonly = 1,
    srcs = ["leak_check.cc"],
    hdrs = ["leak_check.h"],
    copts = ["-ULEAK_SANITIZER"],
    visibility = ["//visibility:private"],
)

cc_test(
    name = "leak_check_test",
    srcs = ["leak_check_test.cc"],
    copts = select({
        "//absl:llvm_compiler": ["-DABSL_EXPECT_LEAK_SANITIZER"],
        "//conditions:default": [],
    }),
    linkopts = ABSL_LSAN_LINKOPTS,
    deps = [
        ":leak_check_api_enabled_for_testing",
        "//absl/base",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_test(
    name = "leak_check_no_lsan_test",
    srcs = ["leak_check_test.cc"],
    copts = ["-UABSL_EXPECT_LEAK_SANITIZER"],
    deps = [
        ":leak_check_api_disabled_for_testing",
        "//absl/base",  # for raw_logging
        "@com_google_googletest//:gtest_main",
    ],
)

# Test that leak checking is skipped when lsan is enabled but
# ":leak_check_disable" is linked in.
#
# This test should fail in the absence of a dependency on ":leak_check_disable"
cc_test(
    name = "disabled_leak_check_test",
    srcs = ["leak_check_fail_test.cc"],
    linkopts = ABSL_LSAN_LINKOPTS,
    deps = [
        ":leak_check_api_enabled_for_testing",
        ":leak_check_disable",
        "//absl/base",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_library(
    name = "stack_consumption",
    testonly = 1,
    srcs = ["internal/stack_consumption.cc"],
    hdrs = ["internal/stack_consumption.h"],
    copts = ABSL_DEFAULT_COPTS,
    deps = [
        "//absl/base",
        "//absl/base:core_headers",
    ],
    visibility = ["//visibility:private"],
)

cc_test(
    name = "stack_consumption_test",
    srcs = ["internal/stack_consumption_test.cc"],
    copts = ABSL_TEST_COPTS,
    deps = [
        ":stack_consumption",
        "//absl/base",
        "//absl/base:core_headers",
        "@com_google_googletest//:gtest_main",
    ],
)
