/*
 * Copyright 2016-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
 */

project.ext.nativeMainSets = []
project.ext.nativeTestSets = []

kotlin {
    targets.metaClass.addTarget = { preset ->
        def target = delegate.fromPreset(preset, preset.name)
        project.ext.nativeMainSets.add(target.compilations['main'].kotlinSourceSets.first())
        project.ext.nativeTestSets.add(target.compilations['test'].kotlinSourceSets.first())
    }

    targets {
        addTarget(presets.linuxX64)
        addTarget(presets.iosArm64)
        addTarget(presets.iosArm32)
        addTarget(presets.iosX64)
        addTarget(presets.macosX64)
        addTarget(presets.mingwX64)
        addTarget(presets.tvosArm64)
        addTarget(presets.tvosX64)
        addTarget(presets.watchosArm32)
        addTarget(presets.watchosArm64)
        addTarget(presets.watchosX86)
        addTarget(presets.watchosX64)
        addTarget(presets.iosSimulatorArm64)
        addTarget(presets.watchosSimulatorArm64)
        addTarget(presets.tvosSimulatorArm64)
        addTarget(presets.macosArm64)
    }

    sourceSets {
        nativeMain { dependsOn commonMain }
        nativeTest { dependsOn commonTest }

        configure(nativeMainSets) { dependsOn nativeMain }
        configure(nativeTestSets) { dependsOn nativeTest }
    }
}
