From bb956570fe38f65cd7bb4a9f80aaf67ce18a755d Mon Sep 17 00:00:00 2001 From: vmishenev Date: Sun, 27 Aug 2023 19:56:59 +0300 Subject: [PATCH] Add platform dependencies from K/N distribution --- .../gradle/kotlin/kotlinClasspathUtils.kt | 43 ++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/kotlin/kotlinClasspathUtils.kt b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/kotlin/kotlinClasspathUtils.kt index 83cb87d6a9..ddb6013c23 100644 --- a/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/kotlin/kotlinClasspathUtils.kt +++ b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/kotlin/kotlinClasspathUtils.kt @@ -7,6 +7,13 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.mpp.AbstractKotlinNativeCompilation import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.gradle.tasks.KotlinCompileTool +import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader +import org.jetbrains.kotlin.konan.library.KONAN_DISTRIBUTION_COMMON_LIBS_DIR +import org.jetbrains.kotlin.konan.library.KONAN_DISTRIBUTION_KLIB_DIR +import org.jetbrains.kotlin.konan.library.KONAN_DISTRIBUTION_PLATFORM_LIBS_DIR +import org.jetbrains.kotlin.konan.library.KONAN_STDLIB_NAME +import org.jetbrains.kotlin.konan.target.KonanTarget +import java.io.File internal fun Project.classpathOf(sourceSet: KotlinSourceSet): FileCollection { val compilations = compilationsOf(sourceSet) @@ -79,7 +86,7 @@ private fun KotlinCompilation.getKotlinCompileTask(kgpVersion: KotlinGradlePlugi private fun KotlinCompilation.platformDependencyFiles(project: Project): FileCollection { val excludePlatformDependencyFiles = project.classpathProperty("excludePlatformDependencyFiles", default = false) - if (excludePlatformDependencyFiles) return project.files() + if (excludePlatformDependencyFiles) return getPlatfromDependenciesFromKonanDistribution(project) return (this as? AbstractKotlinNativeCompilation) ?.target?.project?.configurations ?.findByName(@Suppress("DEPRECATION") this.defaultSourceSet.implementationMetadataConfigurationName) // KT-58640 @@ -88,3 +95,37 @@ private fun KotlinCompilation.platformDependencyFiles(project: Project): FileCol private fun Project.classpathProperty(name: String, default: Boolean): Boolean = (findProperty("org.jetbrains.dokka.classpath.$name") as? String)?.toBoolean() ?: default + +// -------- The hack for platform dependencies from compiler ------------------ +// adapted from https://github.com/jetbrains/kotlin/blob/b6a215d681695a2fe0cc798308966c5675de447f/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/KotlinNativePlatformDependencies.kt#L39 + +private fun KotlinCompilation.getPlatfromDependenciesFromKonanDistribution(project: Project): FileCollection { + return if (this is AbstractKotlinNativeCompilation) + project.files(project.getStdLibFromKonanDistribution()) + project.files(project.getPlatformLibsFromKonanDistribution(this.konanTarget)) + else + project.files() +} + +private fun Project.nativeHome(): String? = + this.findProperty("org.jetbrains.kotlin.native.home") as? String + +// copy-pasted from https://github.com/jetbrains/kotlin/blob/c9aeadd31f763646237faffab38a57923c520fa1/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/nativeToolRunners.kt#L29 +private fun Project.konanHome(): String { + return nativeHome()?.let { file(it).absolutePath } + ?: NativeCompilerDownloader(project).compilerDirectory.absolutePath +} + +private fun Project.getStdLibFromKonanDistribution(): File { + val root = file(this.konanHome()) + val konanCommonLibraries = root.resolve(KONAN_DISTRIBUTION_KLIB_DIR).resolve(KONAN_DISTRIBUTION_COMMON_LIBS_DIR) + val stdlib = konanCommonLibraries.resolve(KONAN_STDLIB_NAME) + return stdlib +} +//copy-pasted from https://github.com/jetbrains/kotlin/blob/05a6d89151e6a7230faf733e51161b5f07ae10a7/native/commonizer/src/org/jetbrains/kotlin/commonizer/repository/KonanDistributionRepository.kt#L20 +// https://github.com/jetbrains/kotlin/blob/b6a215d681695a2fe0cc798308966c5675de447f/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/KotlinNativePlatformDependencies.kt#L83 +private fun Project.getPlatformLibsFromKonanDistribution(target: KonanTarget): Array? { + val root = file(this.konanHome()) + val platformLibsDir = root.resolve(KONAN_DISTRIBUTION_KLIB_DIR).resolve(KONAN_DISTRIBUTION_PLATFORM_LIBS_DIR) + val libs = platformLibsDir.resolve(target.name).takeIf { it.isDirectory }?.listFiles() + return libs +} \ No newline at end of file