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

plugins {
    id("SupportAndroidLibraryPlugin")
    id("kotlin-android")
}

dependencies {
    api(project(":annotation"))

    implementation(TEST_RUNNER)

    androidTestImplementation(JUNIT)
    androidTestImplementation(KOTLIN_STDLIB)
}

supportLibrary {
    name = "Android Benchmark"
    publish = false
    mavenVersion = LibraryVersions.BENCHMARK
    mavenGroup = LibraryGroups.BENCHMARK
    inceptionYear = "2018"
    description = "Android Benchmark"
    failOnUncheckedWarnings = true
    failOnDeprecationWarnings = true
}
