Collect and pass to K2Native actual targets of native-shared compilation
^KT-38658 Fixed
This commit is contained in:
+1
-3
@@ -264,9 +264,7 @@ class KotlinMetadataTargetConfigurator(kotlinPluginVersion: String) :
|
||||
val compilationFactory: KotlinCompilationFactory<out AbstractKotlinCompilation<*>> = when {
|
||||
isNativeSourceSet -> KotlinSharedNativeCompilationFactory(
|
||||
target,
|
||||
//get FIRST platform for metadata compiling
|
||||
//todo: get commonized platform libraries for metadata compiling
|
||||
(platformCompilations.first() as KotlinNativeCompilation).konanTarget
|
||||
platformCompilations.map { (it as AbstractKotlinNativeCompilation).konanTarget }
|
||||
)
|
||||
else -> KotlinCommonCompilationFactory(target)
|
||||
}
|
||||
|
||||
+8
-2
@@ -97,8 +97,14 @@ class KotlinNativeCompilation(
|
||||
get() = compileKotlinTask.kotlinOptions
|
||||
}
|
||||
|
||||
class KotlinSharedNativeCompilation(override val target: KotlinMetadataTarget, konanTarget: KonanTarget, name: String) :
|
||||
AbstractKotlinNativeCompilation(target, konanTarget, name),
|
||||
class KotlinSharedNativeCompilation(override val target: KotlinMetadataTarget, val konanTargets: List<KonanTarget>, name: String) :
|
||||
AbstractKotlinNativeCompilation(
|
||||
target,
|
||||
// TODO: this will end up as '-target' argument passed to K2Native, which is wrong.
|
||||
// Rewrite this when we'll compile native-shared source-sets against commonized platform libs
|
||||
konanTargets.first(),
|
||||
name
|
||||
),
|
||||
KotlinMetadataCompilation<KotlinCommonOptions> {
|
||||
|
||||
override val friendArtifacts: FileCollection
|
||||
|
||||
+2
-2
@@ -26,11 +26,11 @@ class KotlinNativeCompilationFactory(
|
||||
|
||||
class KotlinSharedNativeCompilationFactory(
|
||||
val target: KotlinMetadataTarget,
|
||||
val konanTarget: KonanTarget
|
||||
val konanTargets: List<KonanTarget>
|
||||
): KotlinCompilationFactory<KotlinSharedNativeCompilation> {
|
||||
override val itemClass: Class<KotlinSharedNativeCompilation>
|
||||
get() = KotlinSharedNativeCompilation::class.java
|
||||
|
||||
override fun create(name: String): KotlinSharedNativeCompilation =
|
||||
KotlinSharedNativeCompilation(target, konanTarget, name)
|
||||
KotlinSharedNativeCompilation(target, konanTargets, name)
|
||||
}
|
||||
+27
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonToolOptions
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCompile
|
||||
import org.jetbrains.kotlin.gradle.dsl.NativeCacheKind
|
||||
import org.jetbrains.kotlin.gradle.internal.ensureParentDirsCreated
|
||||
import org.jetbrains.kotlin.gradle.plugin.LanguageSettingsBuilder
|
||||
import org.jetbrains.kotlin.gradle.plugin.cocoapods.asValidFrameworkName
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||
@@ -28,6 +29,7 @@ import org.jetbrains.kotlin.gradle.plugin.sources.DefaultLanguageSettingsBuilder
|
||||
import org.jetbrains.kotlin.gradle.utils.getValue
|
||||
import org.jetbrains.kotlin.gradle.utils.klibModuleName
|
||||
import org.jetbrains.kotlin.konan.library.KLIB_INTEROP_IR_PROVIDER_IDENTIFIER
|
||||
import org.jetbrains.kotlin.konan.properties.saveToFile
|
||||
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
|
||||
import org.jetbrains.kotlin.konan.target.CompilerOutputKind.*
|
||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||
@@ -245,6 +247,21 @@ abstract class AbstractKotlinNativeCompile<T : KotlinCommonToolOptions> : Abstra
|
||||
}
|
||||
}
|
||||
|
||||
@get:Input
|
||||
@get:Optional
|
||||
internal val konanTargetsForManifest: String? by project.provider {
|
||||
(compilation as? KotlinSharedNativeCompilation)
|
||||
?.konanTargets
|
||||
?.joinToString(separator = " ") { it.visibleName }
|
||||
}
|
||||
|
||||
@get:Internal
|
||||
internal val manifestFile: Provider<File>
|
||||
get() = project.provider {
|
||||
val inputManifestFile = project.buildDir.resolve("tmp/$name/inputManifest")
|
||||
inputManifestFile
|
||||
}
|
||||
|
||||
// Args passed to the compiler only (except sources).
|
||||
protected open fun buildCompilerArgs(): List<String> = mutableListOf<String>().apply {
|
||||
addKey("-opt", optimized)
|
||||
@@ -257,6 +274,7 @@ abstract class AbstractKotlinNativeCompile<T : KotlinCommonToolOptions> : Abstra
|
||||
if (compilation is KotlinSharedNativeCompilation) {
|
||||
add("-Xexpect-actual-linker")
|
||||
add("-Xmetadata-klib")
|
||||
addArg("-manifest", manifestFile.get().absolutePath)
|
||||
}
|
||||
|
||||
addArg("-o", outputFile.get().absolutePath)
|
||||
@@ -278,6 +296,15 @@ abstract class AbstractKotlinNativeCompile<T : KotlinCommonToolOptions> : Abstra
|
||||
open fun compile() {
|
||||
val output = outputFile.get()
|
||||
output.parentFile.mkdirs()
|
||||
|
||||
if (compilation is KotlinSharedNativeCompilation) {
|
||||
val manifestFile: File = manifestFile.get()
|
||||
manifestFile.ensureParentDirsCreated()
|
||||
val properties = java.util.Properties()
|
||||
properties[KLIB_PROPERTY_NATIVE_TARGETS] = konanTargetsForManifest!!
|
||||
properties.saveToFile(org.jetbrains.kotlin.konan.file.File(manifestFile.toPath()))
|
||||
}
|
||||
|
||||
KotlinNativeCompilerRunner(project).run(buildArgs())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user