//
// Copyright (C) 2019 The Android Open Source Project
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//  * Redistributions of source code must retain the above copyright
//    notice, this list of conditions and the following disclaimer.
//  * Redistributions in binary form must reproduce the above copyright
//    notice, this list of conditions and the following disclaimer in
//    the documentation and/or other materials provided with the
//    distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
// OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
// AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
// SUCH DAMAGE.
//

package {
    default_team: "trendy_team_native_tools_libraries",
    default_applicable_licenses: ["bionic_benchmarks_license"],
}

cc_defaults {
    name: "bionic_spawn_benchmark_targets",
    host_supported: true,
    target: {
        darwin: {
            enabled: false,
        },
        windows: {
            enabled: false,
        },
        linux_glibc_x86: {
            enabled: false,
        },
        linux_musl_x86: {
            enabled: false,
        },
    },
}

cc_library_static {
    name: "libbionic_spawn_benchmark",
    defaults: ["bionic_spawn_benchmark_targets"],

    srcs: ["spawn_benchmark.cpp"],
    export_include_dirs: ["include"],
    static_libs: [
        "libbase",
        "libgoogle-benchmark",
        "liblog",
    ],
}

cc_benchmark {
    name: "bionic-spawn-benchmarks",
    defaults: ["bionic_spawn_benchmark_targets"],

    srcs: ["spawn_benchmarks.cpp"],
    static_libs: [
        "libbase",
        "libbionic_spawn_benchmark",
        "liblog",
    ],

    // Install these binaries in the same directory as the main benchmark binary.
    data: [
        ":bench_cxa_atexit",
        ":bench_noop",
        ":bench_noop_nostl",
        ":bench_noop_static",
    ],
}

cc_defaults {
    name: "bionic_spawn_benchmark_binary",
    defaults: ["bionic_spawn_benchmark_targets"],

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

    // When this binary is installed to host/linux-x86/bin, its runpath is ${ORIGIN}/../lib64, which
    // is fine for finding host/linux-x86/lib64/libc++.so. When it's installed to
    // host/linux-x86/benchmarktest64/bionic-spawn-benchmarks, the runpath needs an extra "..". This
    // argument has no effect when a static executable is produced.
    target: {
        linux_glibc_x86_64: {
            ldflags: [
                "-Wl,--rpath,${ORIGIN}/../../lib64",
            ],
        },
        linux_musl_x86_64: {
            ldflags: [
                "-Wl,--rpath,${ORIGIN}/../../lib64",
            ],
        },
    },
}

cc_binary {
    defaults: ["bionic_spawn_benchmark_binary"],
    name: "bench_cxa_atexit",
    srcs: ["bench_cxa_atexit.cpp"],
}

cc_binary {
    defaults: ["bionic_spawn_benchmark_binary"],
    name: "bench_noop",
    srcs: ["noop.cpp"],
}

cc_binary {
    defaults: ["bionic_spawn_benchmark_binary"],
    name: "bench_noop_nostl",
    srcs: ["noop.cpp"],
    stl: "none",
}

cc_binary {
    defaults: ["bionic_spawn_benchmark_binary"],
    name: "bench_noop_static",
    srcs: ["noop.cpp"],
    static_executable: true,
    stl: "libc++_static",
}
