/*
 * 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 androidx.build.Publish
import androidx.build.SupportConfigKt
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

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

android {
    sourceSets {
        main.assets.srcDirs += new File(
                SupportConfigKt.getPrebuiltsRoot(project),
                "androidx/traceprocessor/tracebox"
        )
        androidTest.assets.srcDirs += new File(
                SupportConfigKt.getPrebuiltsRoot(project),
                "androidx/traceprocessor/testdata"
        )
    }
    namespace "androidx.benchmark"
}

wire {
    kotlin {}

    // prune unused config components which have deprecated fields
    prune 'perfetto.protos.TraceConfig.IncidentReportConfig'
    prune 'perfetto.protos.ProcessStatsConfig.Quirks'

    sourcePath {
        srcDir 'src/main/proto'
    }
}

dependencies {
    implementation(libs.kotlinStdlib)
    api("androidx.annotation:annotation:1.1.0")
    api("androidx.annotation:annotation-experimental:1.0.0")
    implementation("androidx.tracing:tracing-ktx:1.0.0")
    implementation(libs.testMonitor)
    implementation(libs.wireRuntime)

    androidTestImplementation(libs.testRules)
    androidTestImplementation(libs.testExtJunit)
    androidTestImplementation(libs.kotlinTest)
}

androidx {
    name = "Android Benchmark - Common"
    publish = Publish.SNAPSHOT_AND_RELEASE
    mavenGroup = LibraryGroups.BENCHMARK
    inceptionYear = "2018"
    description = "Android Benchmark - Common"
}

// Allow usage of Kotlin's @Experimental annotation, which is itself experimental.
tasks.withType(KotlinCompile).configureEach {
    kotlinOptions {
        freeCompilerArgs += ["-Xopt-in=kotlin.Experimental"]
    }
}

// https://github.com/square/wire/issues/1947
// Remove when we upgrade to fixed wire library
afterEvaluate {
    tasks.named("compileReleaseKotlin").configure {
        it.dependsOn("generateDebugProtos")
    }
    tasks.named("compileDebugKotlin").configure {
        it.dependsOn("generateReleaseProtos")
    }
}

