| # Copyright 2025 The IREE Authors | |
| # | |
| # Licensed under the Apache License v2.0 with LLVM Exceptions. | |
| # See https://llvm.org/LICENSE.txt for license information. | |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| load("//build_tools/bazel:build_defs.oss.bzl", "iree_cmake_extra_content", "iree_runtime_cc_library") | |
| package(default_visibility = ["//visibility:public"]) | |
| # CMake builds libbacktrace via FetchContent. | |
| # This file is only used for Bazel builds. | |
| iree_cmake_extra_content( | |
| content = """ | |
| # libbacktrace is built by build_tools/third_party/libbacktrace/CMakeLists.txt | |
| # using FetchContent. This file is only used for Bazel builds. | |
| return() | |
| """, | |
| inline = True, | |
| ) | |
| # Linux implementation with libbacktrace from BCR. | |
| # Includes pthreads since libbacktrace usage requires pthread_once. | |
| # Includes dl since status_stack_trace.c uses dladdr (needed on glibc < 2.34). | |
| # The hdrs exports our wrapper header which re-exports BCR's backtrace.h, | |
| # allowing the layering check to see the header dependency chain. | |
| # We use includes=["."] to make the wrapper includable as <iree_libbacktrace.h>. | |
| iree_runtime_cc_library( | |
| name = "libbacktrace_linux", | |
| hdrs = ["iree_libbacktrace.h"], | |
| defines = ["IREE_HAVE_LIBBACKTRACE=1"], | |
| includes = ["."], | |
| deps = [ | |
| "//build_tools:dl", | |
| "//build_tools:pthreads", | |
| "@libbacktrace//:libbacktrace", | |
| ], | |
| ) | |
| # Empty target for non-Linux platforms. | |
| iree_runtime_cc_library( | |
| name = "libbacktrace_disabled", | |
| ) | |
| # Transparent alias that switches between implementations. | |
| # Using alias (not cc_library wrapper) properly propagates headers for layering check. | |
| alias( | |
| name = "libbacktrace", | |
| actual = select({ | |
| "@platforms//os:linux": ":libbacktrace_linux", | |
| "//conditions:default": ":libbacktrace_disabled", | |
| }), | |
| ) |