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

// -----------------------------------------------------------------------------
// Benchmarks library, usable by projects outside this directory.
// -----------------------------------------------------------------------------

benchmark_cflags = [
    "-O2",
    "-fno-builtin",
    "-Wall",
    "-Wextra",
    "-Werror",
    "-Wunused",
]

benchmark_cppflags = ["-std=gnu++11"]

benchmarklib_src_files = [
    "Benchmark.cpp",
    "utils.cpp",
    "main.cpp",
]

cc_library_static {
    name: "libbenchmark",
    host_supported: true,
    cflags: benchmark_cflags,
    cppflags: benchmark_cppflags,
    srcs: benchmarklib_src_files,
    static_libs: ["libbase"],
    export_include_dirs: ["."],
    target: {
        darwin: {
            // Only supported on linux systems.
            disabled: true,
        },
    },
}

// -----------------------------------------------------------------------------
// Benchmarks.
// -----------------------------------------------------------------------------
benchmark_src_files = [
    "math_benchmark.cpp",
    "property_benchmark.cpp",
    "pthread_benchmark.cpp",
    "semaphore_benchmark.cpp",
    "stdio_benchmark.cpp",
    "string_benchmark.cpp",
    "time_benchmark.cpp",
    "unistd_benchmark.cpp",
]

// Build benchmarks for the device (with bionic's .so). Run with:
//   adb shell bionic-benchmarks32
//   adb shell bionic-benchmarks64
cc_binary {
    name: "bionic-benchmarks",
    multilib: {
        lib32: {
            suffix: "32",
        },
        lib64: {
            suffix: "64",
        },
    },
    compile_multilib: "both",
    cflags: benchmark_cflags,
    cppflags: benchmark_cppflags,
    srcs: benchmark_src_files,
    static_libs: [
        "libbenchmark",
        "libbase",
    ],
}

// We don't build a static benchmark executable because it's not usually
// useful. If you're trying to run the current benchmarks on an older
// release, it's (so far at least) always because you want to measure the
// performance of the old release's libc, and a static benchmark isn't
// going to let you do that.

// Build benchmarks for the host (against glibc!). Run with:
cc_binary_host {
    name: "bionic-benchmarks-glibc",
    multilib: {
        lib32: {
            stem: "bionic-benchmarks-glibc32",
        },
        lib64: {
            stem: "bionic-benchmarks-glibc64",
        },
    },
    compile_multilib: "both",
    cflags: benchmark_cflags,
    cppflags: benchmark_cppflags,
    ldflags: ["-lrt"],
    srcs: benchmark_src_files,
    static_libs: [
        "libbenchmark",
        "libbase",
    ],
    target: {
        darwin: {
            // Only supported on linux systems.
            disabled: true,
        },
    },
}