//
// Copyright (C) 2014 The Android Open Source Project
//
// 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.
//

cc_defaults {
    name: "libbacktrace_common",

    cflags: [
        "-Wall",
        "-Werror",
    ],

    // The latest clang (r230699) does not allow SP/PC to be declared in inline asm lists.
    clang_cflags: ["-Wno-inline-asm"],

    include_dirs: ["external/libunwind/include/tdep"],

    target: {
        darwin: {
            enabled: false,
        },
    },

    multilib: {
        lib32: {
            suffix: "32",
        },
        lib64: {
            suffix: "64",
        },
    },
}

libbacktrace_sources = [
    "Backtrace.cpp",
    "BacktraceCurrent.cpp",
    "BacktracePtrace.cpp",
    "thread_utils.c",
    "ThreadEntry.cpp",
    "UnwindStack.cpp",
    "UnwindStackMap.cpp",
]

cc_library_headers {
    name: "libbacktrace_headers",
    vendor_available: true,
    export_include_dirs: ["include"],
}

cc_library {
    name: "libbacktrace",
    vendor_available: false,
    vndk: {
        enabled: true,
        support_system_process: true,
    },
    defaults: ["libbacktrace_common"],
    host_supported: true,

    cflags: [
        "-Wexit-time-destructors",
    ],

    srcs: [
        "BacktraceMap.cpp",
    ],

    export_include_dirs: ["include"],

    target: {
        darwin: {
            enabled: true,
            shared_libs: [
                "libbase",
            ],
        },
        linux: {
            srcs: libbacktrace_sources,

            shared_libs: [
                "libbase",
                "liblog",
                "libunwind",
                "libunwindstack",
                "libdexfile",
            ],

            static_libs: ["libcutils"],

            // libdexfile will eventually properly export headers, for now
            // include these directly.
            include_dirs: [
                "art/runtime",
            ],

            header_libs: ["jni_headers"],
        },
        android: {
            static_libs: ["libasync_safe"],
        },
        vendor: {
            cflags: ["-DNO_LIBDEXFILE_SUPPORT"],
            exclude_shared_libs: ["libdexfile"],
        },
    },
    whole_static_libs: ["libdemangle"],
}

cc_library_shared {
    name: "libbacktrace_test",
    defaults: ["libbacktrace_common"],
    host_supported: true,
    strip: {
        none: true,
    },
    cflags: ["-O0"],
    srcs: ["backtrace_testlib.cpp"],

    shared_libs: [
        "libunwindstack",
    ],
}

//-------------------------------------------------------------------------
// The backtrace_test executable.
//-------------------------------------------------------------------------
cc_test {
    name: "backtrace_test",
    defaults: ["libbacktrace_common"],
    host_supported: true,
    srcs: [
        "backtrace_offline_test.cpp",
        "backtrace_test.cpp",
        "GetPss.cpp",
        "thread_utils.c",
    ],

    cflags: [
        "-fno-builtin",
        "-O0",
        "-g",
    ],

    shared_libs: [
        "libbacktrace_test",
        "libbacktrace",
        "libdexfile",
        "libbase",
        "libcutils",
        "liblog",
        "libunwindstack",
    ],

    group_static_libs: true,

    target: {
        android: {
            cflags: ["-DENABLE_PSS_TESTS"],
            shared_libs: [
                "libutils",
            ],
        },
        linux_glibc: {
            static_libs: ["libutils"],
        },
    },

    // libdexfile will eventually properly export headers, for now
    // include these directly.
    include_dirs: [
        "art/runtime",
    ],

    data: [
        "testdata/arm/*",
        "testdata/arm64/*",
        "testdata/x86/*",
        "testdata/x86_64/*",
    ],
}

cc_benchmark {
    name: "backtrace_benchmarks",
    defaults: ["libbacktrace_common"],

    srcs: [
        "backtrace_benchmarks.cpp",
        "backtrace_read_benchmarks.cpp",
    ],

    shared_libs: [
        "libbacktrace",
        "libbase",
        "libunwindstack",
    ],
}
