//
// 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",
    "UnwindCurrent.cpp",
    "UnwindMap.cpp",
    "UnwindPtrace.cpp",
]

cc_library {
    name: "libbacktrace",
    defaults: ["libbacktrace_common"],
    host_supported: true,

    srcs: [
        "BacktraceMap.cpp",
    ],

    target: {
        darwin: {
            enabled: true,
        },
        linux: {
            srcs: libbacktrace_sources,

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

            static_libs: ["libcutils"],
            host_ldlibs: ["-lrt"],
        },
        android: {
            srcs: libbacktrace_sources,

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

            static_libs: ["libcutils"],
        },
    },
}

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

    target: {
        linux: {
            shared_libs: [
                "libunwind",
            ],
        },
        android: {
            shared_libs: [
                "libunwind",
            ],
        },
    }
}

//-------------------------------------------------------------------------
// The libbacktrace_offline static library.
//-------------------------------------------------------------------------
cc_library_static {
    name: "libbacktrace_offline",
    defaults: ["libbacktrace_common"],
    host_supported: true,
    srcs: ["BacktraceOffline.cpp"],

    cflags: [
        "-D__STDC_CONSTANT_MACROS",
        "-D__STDC_LIMIT_MACROS",
        "-D__STDC_FORMAT_MACROS",
    ],

    header_libs: ["llvm-headers"],

    // Use shared libraries so their headers get included during build.
    shared_libs = [
        "libbase",
        "libunwind",
    ],
}

//-------------------------------------------------------------------------
// 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",
        "libbase",
        "libcutils",
        "liblog",
        "libunwind",
    ],

    group_static_libs: true,

    // Statically link LLVMlibraries to remove dependency on llvm shared library.
    static_libs = [
        "libbacktrace_offline",
        "libLLVMObject",
        "libLLVMBitReader",
        "libLLVMMC",
        "libLLVMMCParser",
        "libLLVMCore",
        "libLLVMSupport",

        "libziparchive",
        "libz",
    ],

    header_libs: ["llvm-headers"],

    target: {
        android: {
            cflags: ["-DENABLE_PSS_TESTS"],
            shared_libs: [
                "libdl",
                "libutils",
            ],
        },
        linux: {
            host_ldlibs: [
                "-lpthread",
                "-lrt",
                "-ldl",
                "-lncurses",
            ],
            static_libs: ["libutils"],
        },
    },
}
