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

// build caliper host jar
// ============================================================

java_library_host {
    name: "caliper",

    srcs: ["caliper/src/main/java/**/*.java"],
    java_resource_dirs: ["caliper/src/main/resources"],

    static_libs: [
        "apache-commons-math",
        "caliper-prebuilts",
        "dagger2",
        "dagger2-inject",
        "guava",
    ],

    // Use Dagger2 annotation processor
    plugins: ["dagger2-compiler"],

    java_version: "1.8",
}

// build caliper target api jar
// ============================================================
// This contains just those classes needed for benchmarks to compile.

java_library {
    name: "caliper-api-target",
    installable: true,

    srcs: [
        "caliper/src/main/java/com/google/caliper/AfterExperiment.java",
        "caliper/src/main/java/com/google/caliper/BeforeExperiment.java",
        "caliper/src/main/java/com/google/caliper/Param.java",
        "caliper/src/main/java/com/google/caliper/All.java",
        "caliper/src/main/java/com/google/caliper/Benchmark.java",
    ],
    sdk_version: "core_current",

    java_version: "1.8",
}

// build caliper tests
// ============================================================
// vogar --expectations $ANDROID_BUILD_TOP/external/caliper/expectations/knownfailures.txt \
//        --test-only \
//        --classpath $ANDROID_BUILD_TOP/out/host/common/obj/JAVA_LIBRARIES/caliper-tests_intermediates/javalib.jar \
//        com.google.caliper

java_test_host {
    name: "caliper-tests",

    srcs: ["caliper/src/test/java/**/*.java"],
    java_resource_dirs: ["caliper/src/test/resources"],

    static_libs: [
        "caliper",
        "junit",
        "mockito",
    ],

    // Use Dagger2 annotation processor
    plugins: ["dagger2-compiler"],

    java_version: "1.8",
}

// build caliper examples
// ============================================================

java_library_host {
    name: "caliper-examples",

    srcs: ["examples/src/main/java/**/*.java"],

    static_libs: [
        "caliper",
        "junit",
        "mockito",
    ],

    java_version: "1.8",
}

// Build host dependencies.
// ============================================================

java_import_host {
    name: "caliper-gson",
    jars: ["lib/gson-2.2.2.jar"],
}

java_import_host {
    name: "caliper-prebuilts",
    jars: [
        "lib/gson-2.2.2.jar",
        "lib/java-allocation-instrumenter-2.0.jar",
        "lib/jersey-client-1.11.jar",
        "lib/jersey-core-1.11.jar",
        "lib/joda-time-2.1.jar",
        "lib/jsr311-api-1.1.1.jar",
    ],
}
