// ==============================================================
// libc_malloc_debug_backtrace.a
// ==============================================================
// Used by libmemunreachable
cc_library_static {

    name: "libc_malloc_debug_backtrace",

    srcs: [
        "backtrace.cpp",
        "MapData.cpp",
    ],

    stl: "libc++_static",

    whole_static_libs: [
        "libasync_safe",
        "libdemangle",
    ],

    include_dirs: ["bionic/libc"],

    export_include_dirs: ["."],

    sanitize: {
        never: true,
    },
    native_coverage: false,

    // -Wno-error=format-zero-length needed for gcc to compile.
    cflags: [
        "-Wall",
        "-Werror",
        "-Wno-error=format-zero-length",
    ],
}

// ==============================================================
// libc_malloc_debug.so
// ==============================================================
cc_library {
    name: "libc_malloc_debug",

    srcs: [
        "Config.cpp",
        "DebugData.cpp",
        "debug_disable.cpp",
        "GuardData.cpp",
        "malloc_debug.cpp",
        "PointerData.cpp",
        "RecordData.cpp",
    ],

    stl: "libc++_static",

    // 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"],
        },
    },

    static_libs: [
        "libasync_safe",
        "libbase",
        "libc_malloc_debug_backtrace",
    ],

    multilib: {
        lib32: {
            version_script: "exported32.map",
        },
        lib64: {
            version_script: "exported64.map",
        },
    },
    allow_undefined_symbols: true,
    include_dirs: ["bionic/libc"],

    sanitize: {
        never: true,
    },
    native_coverage: false,

    // -Wno-error=format-zero-length needed for gcc to compile.
    cflags: [
        "-Wall",
        "-Werror",
        "-fno-stack-protector",
        "-Wno-error=format-zero-length",
        "-Wthread-safety",
    ],
}

// ==============================================================
// Unit Tests
// ==============================================================
cc_test {
    name: "malloc_debug_unit_tests",

    srcs: [
        "tests/backtrace_fake.cpp",
        "tests/log_fake.cpp",
        "tests/libc_fake.cpp",
        "tests/malloc_debug_config_tests.cpp",
        "tests/malloc_debug_unit_tests.cpp",
    ],

    whole_static_libs: ["libc_malloc_debug"],

    local_include_dirs: ["tests"],
    include_dirs: [
        "bionic/libc",
        "bionic/libc/async_safe/include",
    ],

    shared_libs: ["libbase"],

    cflags: [
        "-Wall",
        "-Werror",
        "-Wno-error=format-zero-length",
    ],
}