//
// Copyright (C) 2019 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: "gwp_asan_defaults",
    host_supported: true,
    vendor_available: true,
    product_available: true,
    recovery_available: true,
    native_bridge_supported: true,
    ramdisk_available: true,
    vendor_ramdisk_available: true,

    // GWP-ASan currently has no support for darwin.
    target: {
        darwin: {
            enabled: false,
        },
    },
}

cc_defaults {
    name: "gwp_asan_no_libs_defaults",
    defaults: ["gwp_asan_defaults"],

    // GWP-ASan is used by bionic libc, and should have no libc/libc++
    // dependencies.
    system_shared_libs: [],
    stl: "none",
}

cc_library_headers {
    name: "gwp_asan_headers",
    defaults: [
        "gwp_asan_defaults",
        "gwp_asan_no_libs_defaults",
    ],
    export_include_dirs: [
        ".",
    ],
    apex_available: [
        // This header lib is compiled also as part of the platform due to libasync_safe
        // and others that are compiled with this header and are statically included
        // in the platform side.
        "//apex_available:platform",
        "com.android.runtime",
        // GWP-ASan headers are currently referenced by the following additional APEXes
        "com.android.art",
        "com.android.art.debug",
        "com.android.media",
        "com.android.media.swcodec",
    ],
}

// Only static linkage is provided for performance reasons.
cc_library_static {
    name: "gwp_asan",
    defaults: ["gwp_asan_no_libs_defaults"],
    header_libs: [
        "gwp_asan_headers",
        "libc_headers", // Required for pthread.h in mutex.h.
    ],
    srcs: [
        "gwp_asan/common.cpp",
        "gwp_asan/guarded_pool_allocator.cpp",
        "gwp_asan/platform_specific/common_posix.cpp",
        "gwp_asan/platform_specific/guarded_pool_allocator_posix.cpp",
        "gwp_asan/platform_specific/mutex_posix.cpp",
        "gwp_asan/platform_specific/utilities_posix.cpp",
        "gwp_asan/stack_trace_compressor.cpp",
        "gwp_asan/utilities.cpp"
    ],
    // GWP-ASan requires platform (non-emulated) TLS. We use thread local
    // variables in the core, inlined interface to GWP-ASan.
    cflags: [
        "-fno-emulated-tls",
    ],
    apex_available: [
        // Required to not occlude the default platform variation from being
        // skipped by the apex mutator. If this happens - the license file for
        // the static GWP-ASan library won't be generated, and you'll get errors
        // at build time.
        "//apex_available:platform",

        "com.android.runtime", // GWP-ASan is used in libc.
        "com.android.media.swcodec", // libc_scudo (from media) uses GWP-ASan.
    ],
}

// GWP-ASan crash handler API. Provides all the tools you need to symbolize a
// GWP-ASan crash.
cc_library {
    name: "gwp_asan_crash_handler",
    defaults: ["gwp_asan_defaults"],
    header_libs: [
        "gwp_asan_headers",
        "libc_headers", // Required for assert.h
    ],
    srcs: [
        "gwp_asan/common.cpp",
        "gwp_asan/crash_handler.cpp",
        "gwp_asan/platform_specific/common_posix.cpp",
        "gwp_asan/platform_specific/utilities_posix.cpp",
        "gwp_asan/stack_trace_compressor.cpp",
    ],
    apex_available: [
        "//apex_available:platform",
        "com.android.runtime",
    ],
}

cc_fuzz {
    name: "stack_trace_compressor_fuzzer",
    host_supported: true,
    srcs: ["tools/stack_trace_compressor_fuzzer.cpp"],
    static_libs: ["gwp_asan"],
}

// These unit tests are also continuously run upstream in LLVM's buildbots.
cc_test {
    name: "gwp_asan_unittest",
    defaults: ["linux_bionic_supported"],
    static_libs: [
        "gwp_asan",
        "gwp_asan_crash_handler",
        "libasync_safe",
        "liblog",
        "libunwindstack_no_dex",
        "liblzma", // Dependency from libunwindstack.
    ],
    shared_libs: [
        "libbase",
    ],

    ldflags: [
        // Ensure that ICF doesn't clobber DeallocateMemory2 into
        // DeallocateMemory in tests/backtrace.cpp. This is done in the linker,
        // so `optnone` in the function declaration doesn't help.
        "-Wl,--icf=none",
    ],
    srcs: [
        "android/test_backtrace.cpp",
        "android/test_printf.cpp",
        "gwp_asan/optional/segv_handler_posix.cpp",
        "gwp_asan/tests/alignment.cpp",
        "gwp_asan/tests/backtrace.cpp",
        "gwp_asan/tests/basic.cpp",
        "gwp_asan/tests/compression.cpp",
        "gwp_asan/tests/crash_handler_api.cpp",
        "gwp_asan/tests/enable_disable.cpp",
        "gwp_asan/tests/harness.cpp",
        "gwp_asan/tests/iterate.cpp",
        "gwp_asan/tests/late_init.cpp",
        "gwp_asan/tests/mutex_test.cpp",
        "gwp_asan/tests/slot_reuse.cpp",
        "gwp_asan/tests/thread_contention.cpp",
    ],
    include_dirs: ["bionic/libc/async_safe/include"],
    test_suites: ["general-tests"],
    cflags: [
        // GWP-ASan requires anything that uses GuardedPoolAllocator headers to
        // use platform (ELF) TLS.
        "-fno-emulated-tls",

        // Ensure that the helper functions in test/backtrace.cpp don't get
        // tail-call optimised, as this breaks the unwind chain.
        "-fno-optimize-sibling-calls",

        // The experimental pass manager seems to kill __attribute__((optnone)),
        // and so we disable it (as we rely on optnone for tests/backtrace.cpp).
        "-fno-experimental-new-pass-manager",
    ],
}
