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

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

license {
    name: "bionic_benchmarks_license",
    visibility: [":__subpackages__"],
    license_kinds: [
        "SPDX-license-identifier-Apache-2.0",
        "SPDX-license-identifier-BSD",
    ],
    license_text: [
        "NOTICE",
    ],
}

cc_defaults {
    name: "bionic-benchmarks-defaults",
    cflags: [
        "-O2",
        "-fno-builtin",
        "-Wall",
        "-Wextra",
        "-Werror",
        "-Wno-gcc-compat",
        "-Wunused",
    ],
    srcs: [
        "bionic_benchmarks.cpp",
        "atomic_benchmark.cpp",
        "ctype_benchmark.cpp",
        "get_heap_size_benchmark.cpp",
        "inttypes_benchmark.cpp",
        "malloc_benchmark.cpp",
        "malloc_sql_benchmark.cpp",
        "malloc_map_benchmark.cpp",
        "math_benchmark.cpp",
        "property_benchmark.cpp",
        "pthread_benchmark.cpp",
        "semaphore_benchmark.cpp",
        "stdio_benchmark.cpp",
        "stdlib_benchmark.cpp",
        "string_benchmark.cpp",
        "syscall_mm_benchmark.cpp",
        "time_benchmark.cpp",
        "unistd_benchmark.cpp",
        "wctype_benchmark.cpp",
    ],
    shared_libs: ["liblog"],
    static_libs: [
        "libbase",
        "libBionicBenchmarksUtils",
        "libtinyxml2",
    ],
    stl: "libc++_static",

    target: {
        android: {
            header_libs: ["bionic_libc_platform_headers"],
            static_libs: [
                "libmeminfo",
                "libprocinfo",
            ],
        },
    },
}

cc_defaults {
    name: "bionic-benchmarks-extras-defaults",
    cflags: [
        "-Wall",
        "-Wextra",
        "-Werror",
        "-Wunused",
    ],
}

// Build benchmarks for the device (with bionic's .so). Run with:
//   adb shell /data/benchmarktest/bionic-benchmarks/bionic-benchmarks
//   adb shell /data/benchmarktest64/bionic-benchmarks/bionic-benchmarks
cc_benchmark {
    name: "bionic-benchmarks",
    defaults: ["bionic-benchmarks-defaults"],
    srcs: [
        "dlfcn_benchmark.cpp",
    ],
    data: ["suites/*"],
    static_libs: [
        "libsystemproperties",
        "libasync_safe",
    ],
    include_dirs: ["bionic/libc"],
}

cc_benchmark {
    name: "bionic-benchmarks-static",
    defaults: ["bionic-benchmarks-defaults"],
    data: ["suites/*"],
    static_libs: [
        "liblog",
        "libsystemproperties",
        "libasync_safe",
    ],
    include_dirs: ["bionic/libc"],
    static_executable: true,
}

// Build benchmarks for the host (against glibc!). Run with:
cc_benchmark_host {
    name: "bionic-benchmarks-glibc",
    defaults: ["bionic-benchmarks-defaults"],
    srcs: [
        "dlfcn_benchmark.cpp",
    ],
    target: {
        darwin: {
            // Only supported on linux systems.
            enabled: false,
        },
    },
    data: ["suites/*"],
}

cc_library_static {
    name: "libBionicBenchmarksUtils",
    defaults: ["bionic-benchmarks-extras-defaults"],
    srcs: ["util.cpp"],
    host_supported: true,
}

cc_test {
    name: "bionic-benchmarks-tests",
    isolated: true,
    defaults: ["bionic-benchmarks-extras-defaults"],
    srcs: [
        "tests/benchmark_test.cpp",
        "tests/interface_test.cpp",
    ],
    static_libs: [
        "libbase",
        "libBionicBenchmarksUtils",
    ],
    data: [
        "test_suites/*",
        "suites/*",
        ":bionic-benchmarks",
    ],
    test_suites: ["device-tests"],
    require_root: true,
}

cc_binary {
    name: "malloc-rss-benchmark",
    srcs: [
        "malloc_rss_benchmark.cpp",
    ],

    shared_libs: [
        "libbase",
    ],

    target: {
        android: {
            static_libs: [
                "libmeminfo",
                "libprocinfo",
            ],
        },
    },
}
