diff --git a/GRADLE_PLUGIN.md b/GRADLE_PLUGIN.md index 90f2a850b7c..06053d5e761 100644 --- a/GRADLE_PLUGIN.md +++ b/GRADLE_PLUGIN.md @@ -233,6 +233,12 @@ For this project the task graph will be the following: // *.klib library for linking. library project.file('path/to/library') + + // library project + library project(':lib') + + // artifect in a library project + library(project(':lib'), 'artifectName') // naitve library for linking. nativeLibrary project.file('path/to/native/library/') diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileTask.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileTask.kt index fa05d37c462..90e56da309f 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileTask.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileTask.kt @@ -204,6 +204,27 @@ open class KonanCompileConfig( // DSL. Libraries. + fun library(project: Project) { + this.project.evaluationDependsOn(project.path) + project.konanArtifactsContainer.asSequence() + .map { it.compilationTask } + .filter { it.produce == "library" } + .forEach { + compilationTask.dependsOn(it) + library(it.artifact) + } + } + + fun library(project: Project, artifactName: String) { + this.project.evaluationDependsOn(project.path) + val libraryCompilationTask = project.konanArtifactsContainer.getByName(artifactName).compilationTask + if (libraryCompilationTask.produce != "library") { + throw IllegalArgumentException("Artifact is not a library: $artifactName (in project: ${project.path})") + } + compilationTask.dependsOn(libraryCompilationTask) + library(libraryCompilationTask.artifact) + } + fun library(lib: Any) = libraries(lib) fun libraries(vararg libs: Any) = with(compilationTask) { libraries.add(project.files(*libs))