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 {
|
val compilationFactory: KotlinCompilationFactory<out AbstractKotlinCompilation<*>> = when {
|
||||||
isNativeSourceSet -> KotlinSharedNativeCompilationFactory(
|
isNativeSourceSet -> KotlinSharedNativeCompilationFactory(
|
||||||
target,
|
target,
|
||||||
//get FIRST platform for metadata compiling
|
platformCompilations.map { (it as AbstractKotlinNativeCompilation).konanTarget }
|
||||||
//todo: get commonized platform libraries for metadata compiling
|
|
||||||
(platformCompilations.first() as KotlinNativeCompilation).konanTarget
|
|
||||||
)
|
)
|
||||||
else -> KotlinCommonCompilationFactory(target)
|
else -> KotlinCommonCompilationFactory(target)
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-2
@@ -97,8 +97,14 @@ class KotlinNativeCompilation(
|
|||||||
get() = compileKotlinTask.kotlinOptions
|
get() = compileKotlinTask.kotlinOptions
|
||||||
}
|
}
|
||||||
|
|
||||||
class KotlinSharedNativeCompilation(override val target: KotlinMetadataTarget, konanTarget: KonanTarget, name: String) :
|
class KotlinSharedNativeCompilation(override val target: KotlinMetadataTarget, val konanTargets: List<KonanTarget>, name: String) :
|
||||||
AbstractKotlinNativeCompilation(target, konanTarget, name),
|
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> {
|
KotlinMetadataCompilation<KotlinCommonOptions> {
|
||||||
|
|
||||||
override val friendArtifacts: FileCollection
|
override val friendArtifacts: FileCollection
|
||||||
|
|||||||
+2
-2
@@ -26,11 +26,11 @@ class KotlinNativeCompilationFactory(
|
|||||||
|
|
||||||
class KotlinSharedNativeCompilationFactory(
|
class KotlinSharedNativeCompilationFactory(
|
||||||
val target: KotlinMetadataTarget,
|
val target: KotlinMetadataTarget,
|
||||||
val konanTarget: KonanTarget
|
val konanTargets: List<KonanTarget>
|
||||||
): KotlinCompilationFactory<KotlinSharedNativeCompilation> {
|
): KotlinCompilationFactory<KotlinSharedNativeCompilation> {
|
||||||
override val itemClass: Class<KotlinSharedNativeCompilation>
|
override val itemClass: Class<KotlinSharedNativeCompilation>
|
||||||
get() = KotlinSharedNativeCompilation::class.java
|
get() = KotlinSharedNativeCompilation::class.java
|
||||||
|
|
||||||
override fun create(name: String): KotlinSharedNativeCompilation =
|
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.KotlinCommonToolOptions
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCompile
|
import org.jetbrains.kotlin.gradle.dsl.KotlinCompile
|
||||||
import org.jetbrains.kotlin.gradle.dsl.NativeCacheKind
|
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.LanguageSettingsBuilder
|
||||||
import org.jetbrains.kotlin.gradle.plugin.cocoapods.asValidFrameworkName
|
import org.jetbrains.kotlin.gradle.plugin.cocoapods.asValidFrameworkName
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
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.getValue
|
||||||
import org.jetbrains.kotlin.gradle.utils.klibModuleName
|
import org.jetbrains.kotlin.gradle.utils.klibModuleName
|
||||||
import org.jetbrains.kotlin.konan.library.KLIB_INTEROP_IR_PROVIDER_IDENTIFIER
|
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.CompilerOutputKind.*
|
import org.jetbrains.kotlin.konan.target.CompilerOutputKind.*
|
||||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
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).
|
// Args passed to the compiler only (except sources).
|
||||||
protected open fun buildCompilerArgs(): List<String> = mutableListOf<String>().apply {
|
protected open fun buildCompilerArgs(): List<String> = mutableListOf<String>().apply {
|
||||||
addKey("-opt", optimized)
|
addKey("-opt", optimized)
|
||||||
@@ -257,6 +274,7 @@ abstract class AbstractKotlinNativeCompile<T : KotlinCommonToolOptions> : Abstra
|
|||||||
if (compilation is KotlinSharedNativeCompilation) {
|
if (compilation is KotlinSharedNativeCompilation) {
|
||||||
add("-Xexpect-actual-linker")
|
add("-Xexpect-actual-linker")
|
||||||
add("-Xmetadata-klib")
|
add("-Xmetadata-klib")
|
||||||
|
addArg("-manifest", manifestFile.get().absolutePath)
|
||||||
}
|
}
|
||||||
|
|
||||||
addArg("-o", outputFile.get().absolutePath)
|
addArg("-o", outputFile.get().absolutePath)
|
||||||
@@ -278,6 +296,15 @@ abstract class AbstractKotlinNativeCompile<T : KotlinCommonToolOptions> : Abstra
|
|||||||
open fun compile() {
|
open fun compile() {
|
||||||
val output = outputFile.get()
|
val output = outputFile.get()
|
||||||
output.parentFile.mkdirs()
|
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())
|
KotlinNativeCompilerRunner(project).run(buildArgs())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user