diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanArtifactContainer.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanArtifactContainer.kt index 25ea6cd52b5..ef1b1a856e2 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanArtifactContainer.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanArtifactContainer.kt @@ -34,6 +34,12 @@ open class KonanArtifactContainer(val project: ProjectInternal) registerFactory(KonanProgram::class.java) { name -> instantiator.newInstance(KonanProgram::class.java, name, project, instantiator) } + registerFactory(KonanDynamic::class.java) { name -> + instantiator.newInstance(KonanDynamic::class.java, name, project, instantiator) + } + registerFactory(KonanFramework::class.java) { name -> + instantiator.newInstance(KonanFramework::class.java, name, project, instantiator) + } registerFactory(KonanLibrary::class.java) { name -> instantiator.newInstance(KonanLibrary::class.java, name, project, instantiator) } @@ -58,6 +64,22 @@ open class KonanArtifactContainer(val project: ProjectInternal) fun program(name: String, configureAction: Closure<*>) = program(name, ConfigureUtil.configureUsing(configureAction)) + fun dynamic(name: String) = create(name, KonanDynamic::class.java) + fun dynamic(name: String, configureAction: Action) = + create(name, KonanDynamic::class.java, configureAction) + fun dynamic(name: String, configureAction: KonanDynamic.() -> Unit) = + create(name, KonanDynamic::class.java, configureAction) + fun dynamic(name: String, configureAction: Closure<*>) = + dynamic(name, ConfigureUtil.configureUsing(configureAction)) + + fun framework(name: String) = create(name, KonanFramework::class.java) + fun framework(name: String, configureAction: Action) = + create(name, KonanFramework::class.java, configureAction) + fun framework(name: String, configureAction: KonanFramework.() -> Unit) = + create(name, KonanFramework::class.java, configureAction) + fun framework(name: String, configureAction: Closure<*>) = + framework(name, ConfigureUtil.configureUsing(configureAction)) + fun library(name: String) = create(name, KonanLibrary::class.java) fun library(name: String, configureAction: Action) = create(name, KonanLibrary::class.java, configureAction) diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileConfig.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileConfig.kt index c92df1ecec7..f23617c284f 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileConfig.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileConfig.kt @@ -20,10 +20,7 @@ import org.gradle.api.Task import org.gradle.api.file.FileCollection import org.gradle.api.internal.project.ProjectInternal import org.gradle.internal.reflect.Instantiator -import org.jetbrains.kotlin.gradle.plugin.tasks.KonanCompileBitcodeTask -import org.jetbrains.kotlin.gradle.plugin.tasks.KonanCompileLibraryTask -import org.jetbrains.kotlin.gradle.plugin.tasks.KonanCompileProgramTask -import org.jetbrains.kotlin.gradle.plugin.tasks.KonanCompileTask +import org.jetbrains.kotlin.gradle.plugin.tasks.* import org.jetbrains.kotlin.konan.target.KonanTarget import java.io.File @@ -76,6 +73,26 @@ open class KonanProgram(name: String, project: ProjectInternal, instantiator: In get() = project.konanBinBaseDir } +open class KonanDynamic(name: String, project: ProjectInternal, instantiator: Instantiator) + : KonanCompileConfig(name, KonanCompileDynamicTask::class.java, project, instantiator) { + + override val typeForDescription: String + get() = "dynamic library" + + override val defaultBaseDir: File + get() = project.konanBinBaseDir +} + +open class KonanFramework(name: String, project: ProjectInternal, instantiator: Instantiator) + : KonanCompileConfig(name, KonanCompileFrameworkTask::class.java, project, instantiator) { + + override val typeForDescription: String + get() = "framework" + + override val defaultBaseDir: File + get() = project.konanBinBaseDir +} + open class KonanLibrary(name: String, project: ProjectInternal, instantiator: Instantiator) : KonanCompileConfig(name, KonanCompileLibraryTask::class.java, project, instantiator) { diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanBaseTasks.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanBaseTasks.kt index 2b219142349..a4c9c34e56e 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanBaseTasks.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanBaseTasks.kt @@ -60,7 +60,7 @@ abstract class KonanTargetableTask: DefaultTask() { /** A task building an artifact. */ abstract class KonanArtifactTask: KonanTargetableTask(), KonanArtifactSpec { - val artifact: File + open val artifact: File @OutputFile get() = destinationDir.resolve(artifactNameWithSuffix) @Internal lateinit var destinationDir: File diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanCompileTask.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanCompileTask.kt index da5afb0db19..ff5434f2a9d 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanCompileTask.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanCompileTask.kt @@ -23,6 +23,8 @@ import org.jetbrains.kotlin.konan.target.CompilerOutputKind enum class Produce(val cliOption: String, val kind: CompilerOutputKind) { PROGRAM("program", CompilerOutputKind.PROGRAM), + DYNAMIC("dynamic", CompilerOutputKind.DYNAMIC), + FRAMEWORK("framework", CompilerOutputKind.FRAMEWORK), LIBRARY("library", CompilerOutputKind.LIBRARY), BITCODE("bitcode", CompilerOutputKind.BITCODE) } @@ -171,6 +173,17 @@ open class KonanCompileProgramTask: KonanCompileTask() { override val produce: Produce get() = Produce.PROGRAM } +open class KonanCompileDynamicTask: KonanCompileTask() { + override val produce: Produce get() = Produce.DYNAMIC +} + +open class KonanCompileFrameworkTask: KonanCompileTask() { + override val produce: Produce get() = Produce.FRAMEWORK + + override val artifact + @OutputDirectory get() = super.artifact +} + open class KonanCompileLibraryTask: KonanCompileTask() { override val produce: Produce get() = Produce.LIBRARY }