cc_defaults {
    name: "libmemunreachable_defaults",

    cflags: [
        "-Wall",
        "-Wextra",
        "-Werror",
    ],
    clang: true,
    shared_libs: [
        "libbase",
        "liblog",
    ],
}

cc_library_shared {
    name: "libmemunreachable",
    vendor_available: true,
    defaults: ["libmemunreachable_defaults"],
    srcs: [
        "Allocator.cpp",
        "HeapWalker.cpp",
        "LeakFolding.cpp",
        "LeakPipe.cpp",
        "LineBuffer.cpp",
        "MemUnreachable.cpp",
        "ProcessMappings.cpp",
        "PtracerThread.cpp",
        "ThreadCapture.cpp",
    ],

    static_libs: [
        "libc_malloc_debug_backtrace",
        "libc_logging",
    ],
    // Only need this for arm since libc++ uses its own unwind code that
    // doesn't mix with the other default unwind code.
    arch: {
        arm: {
            static_libs: ["libunwind_llvm"],
        },
    },
    export_include_dirs: ["include"],
    local_include_dirs: ["include"],
}

cc_test {
    name: "memunreachable_test",
    defaults: ["libmemunreachable_defaults"],
    host_supported: true,
    srcs: [
        "tests/Allocator_test.cpp",
        "tests/HeapWalker_test.cpp",
        "tests/LeakFolding_test.cpp",
    ],

    target: {
        android: {
            srcs: [
                "tests/DisableMalloc_test.cpp",
                "tests/MemUnreachable_test.cpp",
                "tests/ThreadCapture_test.cpp",
            ],
            shared_libs: [
                "libmemunreachable",
            ],
        },
        host: {
            srcs: [
                "Allocator.cpp",
                "HeapWalker.cpp",
                "LeakFolding.cpp",
                "tests/HostMallocStub.cpp",
            ],
        },
        darwin: {
            enabled: false,
        },
    },
}