//
// Copyright (C) 2012 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.
//
//

ASAN_NEEDS_SEGV = "0"
ASAN_HAS_EXCEPTIONS = "1"
ASAN_FLEXIBLE_MAPPING_AND_OFFSET = "0"

asan_rtl_files = [
    "asan_activation.cc",
    "asan_allocator.cc",
    "asan_fake_stack.cc",
    "asan_flags.cc",
    "asan_globals.cc",
    "asan_interceptors.cc",
    "asan_linux.cc",
    "asan_mac.cc",
    "asan_malloc_linux.cc",
    "asan_malloc_mac.cc",
    "asan_malloc_win.cc",
    "asan_poisoning.cc",
    "asan_posix.cc",
    "asan_report.cc",
    "asan_rtl.cc",
    "asan_stack.cc",
    "asan_stats.cc",
    "asan_suppressions.cc",
    "asan_thread.cc",
    "asan_win.cc",
]

asan_rtl_cxx_files = ["asan_new_delete.cc"]

asan_rtl_cflags = [
    "-fvisibility=hidden",
    "-fno-exceptions",
    "-DASAN_LOW_MEMORY=1",
    "-DASAN_NEEDS_SEGV=" + ASAN_NEEDS_SEGV,
    "-DASAN_HAS_EXCEPTIONS=" + ASAN_HAS_EXCEPTIONS,
    "-DASAN_FLEXIBLE_MAPPING_AND_OFFSET=" + ASAN_FLEXIBLE_MAPPING_AND_OFFSET,
    "-Wno-covered-switch-default",
    "-Wno-non-virtual-dtor",
    "-Wno-sign-compare",
    "-Wno-unused-parameter",
    "-std=c++11",
    "-fno-rtti",
    "-fno-builtin",
]

cc_library_static {
    name: "libasan",
    host_supported: true,
    defaults: ["asan_arch_defaults"],
    include_dirs: [
        "external/compiler-rt/lib",
        "external/compiler-rt/include",
    ],
    cflags: asan_rtl_cflags,
    target: {
        android: {
            srcs: ["asan_preinit.cc"],
        },
        host: {
            srcs: asan_rtl_files,
            whole_static_libs: ["libubsan"],
            static_libs: [
                "libinterception",
                "liblsan",
                "libsan",
            ],
        },
    },

    clang: true,
    sdk_version: "19",
    stl: "none",

    sanitize: {
        never: true,
    },
}

cc_library_host_static {
    name: "libasan_cxx",
    include_dirs: [
        "external/compiler-rt/lib",
        "external/compiler-rt/include",
    ],
    cflags: asan_rtl_cflags,
    srcs: asan_rtl_cxx_files,

    clang: true,
    compile_multilib: "both",

    sanitize: {
        never: true,
    },
    target: {
        darwin: {
            enabled: false,
        },
    },
}

cc_binary {
    name: "asanwrapper",
    defaults: ["asan_arch_defaults"],

    srcs: ["asanwrapper.cc"],

    cppflags: ["-std=c++11"],
    sanitize: {
        never: true,
    },

    stl: "libc++",
}

// ANDROIDMK TRANSLATION ERROR: unsupported conditional
// ifneq (true,$(SKIP_LLVM_TESTS))
cc_library_static {
    name: "libasan_noinst_test",
    host_supported: true,
    defaults: ["asan_arch_defaults"],

    tags: ["tests"],
    include_dirs: [
        "external/gtest/include",
        "external/compiler-rt/include",
        "external/compiler-rt/lib",
        "external/compiler-rt/lib/asan/tests",
        "external/compiler-rt/lib/sanitizer_common/tests",
    ],
    cflags: [
        "-Wno-non-virtual-dtor",
        "-Wno-unused-parameter",
        "-Wno-sign-compare",
        "-DASAN_UAR=0",
        "-DASAN_HAS_BLACKLIST=1",
        "-DASAN_HAS_EXCEPTIONS=" + ASAN_HAS_EXCEPTIONS,
        "-DASAN_NEEDS_SEGV=" + ASAN_NEEDS_SEGV,
        "-std=c++11",
    ],
    srcs: [
        "tests/asan_noinst_test.cc",
        "tests/asan_test_main.cc",
    ],

    clang: true,
    sanitize: {
        never: true,
    },

    stl: "libc++",
}

cc_test {
    name: "asan_test",
    host_supported: true,
    defaults: ["asan_arch_defaults"],

    tags: ["tests"],
    include_dirs: [
        "external/compiler-rt/lib",
        "external/compiler-rt/lib/asan/tests",
        "external/compiler-rt/lib/sanitizer_common/tests",
    ],
    cflags: [
        "-DASAN_LOW_MEMORY=1",
        "-DASAN_UAR=0",
        "-DASAN_NEEDS_SEGV=" + ASAN_NEEDS_SEGV,
        "-DASAN_HAS_EXCEPTIONS=" + ASAN_HAS_EXCEPTIONS,
        "-DASAN_HAS_BLACKLIST=1",
        "-Wno-covered-switch-default",
        "-Wno-non-virtual-dtor",
        "-Wno-sign-compare",
        "-Wno-unused-parameter",
        "-std=c++11",
    ],

    srcs: [
        "tests/asan_globals_test.cc",
        "tests/asan_test.cc",
        //"tests/asan_noinst_test.cc",
        //"tests/asan_test_main.cc",
    ],

    static_libs: ["libasan_noinst_test"],
    sanitize: {
        address: true,
        blacklist: "tests/asan_test.ignore",
    },
    clang: true,

    stl: "libc++",
    target: {
        host: {
            host_ldlibs: ["-lrt"],
        },
    },
}

// ANDROIDMK TRANSLATION ERROR: endif from unsupported contitional
// endif
// SKIP_LLVM_TESTS
