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

import static androidx.build.dependencies.DependenciesKt.*
import androidx.build.LibraryGroups
import androidx.build.Publish
import androidx.build.SupportConfigKt

plugins {
    id("AndroidXPlugin")
    id("com.android.library")
    id("kotlin-android")
}

android {
    defaultConfig {
        // 18 needed for UI automator. While 28 is a theoretical minimum for Perfetto, we
        // currently leave this lower currently to enable optional usage.
        minSdkVersion 18
    }
    sourceSets {
        main.assets.srcDirs += new File(
                SupportConfigKt.getPrebuiltsRoot(project),
                "androidx/traceprocessor/trace_processor_shell"
        )
    }
}

dependencies {
    api(JUNIT)
    api(KOTLIN_STDLIB)
    api("androidx.annotation:annotation:1.1.0")

    implementation(project(":benchmark:benchmark-common"))
    implementation(ANDROIDX_TEST_CORE)
    implementation(ANDROIDX_TEST_UIAUTOMATOR)
    implementation(ANDROIDX_TEST_RULES)

    androidTestImplementation(project(":internal-testutils-ktx"))
    androidTestImplementation(project(":tracing:tracing-ktx"))
    androidTestImplementation(ANDROIDX_TEST_EXT_JUNIT)
    androidTestImplementation(ANDROIDX_TEST_RUNNER)
}

androidx {
    name = "Android Benchmark - Macrobenchmark"
    publish = Publish.SNAPSHOT_ONLY
    mavenGroup = LibraryGroups.BENCHMARK
    inceptionYear = "2020"
    description = "Android Benchmark - Macrobenchmark"
}

// Define a task dependency so the app is installed before we run macro benchmarks.
tasks.getByPath(':benchmark:benchmark-macro-junit4:connectedCheck')
        .dependsOn(
                tasks.getByPath(
                        ':benchmark:integration-tests:macrobenchmark-target:installRelease'
                )
        )