//
// Copyright (C) 2017 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: "libunwindstack_flags",

    host_supported: true,

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

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

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

cc_defaults {
    name: "libunwindstack_common",
    defaults: ["libunwindstack_flags"],

    srcs: [
        "ArmExidx.cpp",
        "Elf.cpp",
        "ElfInterface.cpp",
        "ElfInterfaceArm.cpp",
        "Log.cpp",
        "Regs.cpp",
        "Memory.cpp",
    ],

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

cc_library {
    name: "libunwindstack",
    defaults: ["libunwindstack_common"],
}

cc_library {
    name: "libunwindstack_debug",
    defaults: ["libunwindstack_common"],

    cflags: [
        "-UNDEBUG",
        "-O0",
        "-g",
    ],
}

//-------------------------------------------------------------------------
// Unit Tests
//-------------------------------------------------------------------------
cc_defaults {
    name: "libunwindstack_test_common",
    defaults: ["libunwindstack_flags"],

    srcs: [
        "tests/ArmExidxDecodeTest.cpp",
        "tests/ArmExidxExtractTest.cpp",
        "tests/ElfInterfaceArmTest.cpp",
        "tests/ElfInterfaceTest.cpp",
        "tests/ElfTest.cpp",
        "tests/LogFake.cpp",
        "tests/MemoryFake.cpp",
        "tests/MemoryFileTest.cpp",
        "tests/MemoryLocalTest.cpp",
        "tests/MemoryRangeTest.cpp",
        "tests/MemoryRemoteTest.cpp",
        "tests/RegsTest.cpp",
    ],

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

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

    target: {
        linux: {
            host_ldlibs: [
                "-lrt",
            ],
        },
    },
}

// These unit tests run against the shared library.
cc_test {
    name: "libunwindstack_test",
    defaults: ["libunwindstack_test_common"],

    shared_libs: [
        "libunwindstack",
    ],
}

// These unit tests run against the static debug library.
cc_test {
    name: "libunwindstack_test_debug",
    defaults: ["libunwindstack_test_common"],

    static_libs: [
        "libunwindstack_debug",
    ],
}

//-------------------------------------------------------------------------
// Utility Executables
//-------------------------------------------------------------------------
cc_defaults {
    name: "libunwindstack_executables",
    defaults: ["libunwindstack_flags"],

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

    static_libs: [
        "liblog",
    ],

    compile_multilib: "both",
}

cc_binary {
    name: "unwind_info",
    defaults: ["libunwindstack_executables"],

    srcs: [
        "unwind_info.cpp",
    ],
}
