// 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.

cc_library_headers {
    name: "linker_reloc_bench_headers",
    defaults: ["bionic_spawn_benchmark_targets"],
    export_include_dirs: ["include"],
}

// TODO: This benchmark doesn't work with TradeFed/atest because it doesn't copy its test libraries
// into the testcases/linker_reloc_bench directory. The obvious way to do that is to list each
// library in the "data" property, but that doesn't work, because each library is listed as having a
// "link:shared" variant (as opposed to "link:static"), whereas the cc_benchmark has no
// "link:(shared/static)" variation. It appears that Soong needs to be fixed to make this benchmark
// work with TradeFed/atest.

cc_benchmark {
    name: "linker-reloc-bench",

    defaults: [
        "bionic_spawn_benchmark_targets",
        "linker_reloc_bench_all_libs",
    ],

    data: [":linker_reloc_bench_main"],
    srcs: ["linker_reloc_bench.cpp"],

    static_libs: [
        "libbase",
        "libbionic_spawn_benchmark",
        "liblog",
    ],
}

cc_defaults {
    name: "linker_reloc_bench_binary",
    defaults: ["bionic_spawn_benchmark_targets"],
    header_libs: ["linker_reloc_bench_headers"],
    stl: "none",
    gtest: false,

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

cc_defaults {
    name: "linker_reloc_bench_library",
    defaults: ["bionic_spawn_benchmark_targets"],
    header_libs: ["linker_reloc_bench_headers"],
    stl: "none",
    gtest: false,
    relative_install_path: "linker-reloc-bench",

    static: {
        enabled: false,
    },
}
