// 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_applicable_licenses: ["bionic_benchmarks_license"],
}

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,
    },
}
