Fix wrong context of LanguageSettings to compiler options sync
Add Native target configuration to always iterate on all native target compilations in afterEvaluate and trigger sync of compilation LanguageSettings to compiler options. This way afterEvaluate will be called in the correct context. ^KT-54439 Fixed
This commit is contained in:
committed by
Space Team
parent
901ebcc043
commit
a32b2c4a3f
+23
-2
@@ -25,9 +25,7 @@ import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||
import org.jetbrains.kotlin.konan.target.presetName
|
||||
import org.junit.Assume
|
||||
import org.junit.Ignore
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.rules.ErrorCollector
|
||||
import java.io.File
|
||||
import java.nio.file.Files
|
||||
import java.util.*
|
||||
@@ -1179,6 +1177,29 @@ class GeneralNativeIT : BaseGradleIT() {
|
||||
}
|
||||
}
|
||||
|
||||
// KT-54439
|
||||
@Test
|
||||
fun testLanguageSettingsSyncToNativeTasks() = with(transformNativeTestProjectWithPluginDsl("native-kotlin-options")) {
|
||||
gradleBuildScript().modify {
|
||||
"""
|
||||
|${it.substringBefore("kotlin {")}
|
||||
|
|
||||
|kotlin {
|
||||
| ${HostManager.host.presetName}("host") {
|
||||
| compilations.named("main").configure {
|
||||
| kotlinOptions.freeCompilerArgs += ["-Xverbose-phases=Linker"]
|
||||
| }
|
||||
| }
|
||||
|}
|
||||
""".trimMargin()
|
||||
}
|
||||
|
||||
build("assemble") {
|
||||
assertSuccessful()
|
||||
assertContains("-Xverbose-phases=Linker")
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun List<String>.containsSequentially(vararg elements: String): Boolean {
|
||||
check(elements.isNotEmpty())
|
||||
|
||||
+5
@@ -11,10 +11,12 @@ import org.gradle.api.NamedDomainObjectContainer
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.tasks.TaskProvider
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
|
||||
import org.jetbrains.kotlin.gradle.plugin.HasCompilerOptions
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationWithResources
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinNativeCompilationData
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinNativeFragmentMetadataCompilationData
|
||||
import org.jetbrains.kotlin.gradle.targets.native.NativeCompilerOptions
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile
|
||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||
@@ -77,6 +79,9 @@ abstract class KotlinNativeCompilation @Inject constructor(
|
||||
override val target: KotlinNativeTarget
|
||||
get() = super.target as KotlinNativeTarget
|
||||
|
||||
override val compilerOptions: NativeCompilerOptions
|
||||
get() = super.compilerOptions as NativeCompilerOptions
|
||||
|
||||
// Interop DSL.
|
||||
val cinterops = project.container(DefaultCInteropSettings::class.java) { cinteropName ->
|
||||
project.objects.newInstance(DefaultCInteropSettings::class.java, cinteropName, this)
|
||||
|
||||
+5
@@ -324,6 +324,11 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
|
||||
project.syncLanguageSettingsToLinkTask(binary)
|
||||
}
|
||||
}
|
||||
project.runOnceAfterEvaluated("Sync native compilation language settings to compiler options") {
|
||||
target.compilations.all { compilation ->
|
||||
compilation.compilerOptions.syncLanguageSettings()
|
||||
}
|
||||
}
|
||||
|
||||
target.binaries.withType(Executable::class.java).all {
|
||||
project.createRunTask(it)
|
||||
|
||||
+6
-6
@@ -9,20 +9,20 @@ import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptionsDefault
|
||||
import org.jetbrains.kotlin.gradle.plugin.HasCompilerOptions
|
||||
import org.jetbrains.kotlin.gradle.plugin.runOnceAfterEvaluated
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.applyLanguageSettingsToCompilerOptions
|
||||
import org.jetbrains.kotlin.project.model.LanguageSettings
|
||||
|
||||
internal class NativeCompilerOptions(
|
||||
class NativeCompilerOptions(
|
||||
project: Project,
|
||||
nativeLanguageSettings: LanguageSettings
|
||||
private val nativeLanguageSettings: LanguageSettings
|
||||
) : HasCompilerOptions<KotlinCommonCompilerOptions> {
|
||||
override val options: KotlinCommonCompilerOptions = project.objects
|
||||
.newInstance(KotlinCommonCompilerOptionsDefault::class.java)
|
||||
.apply {
|
||||
useK2.finalizeValue()
|
||||
project.runOnceAfterEvaluated("apply Kotlin native properties from language settings") {
|
||||
applyLanguageSettingsToCompilerOptions(nativeLanguageSettings, this)
|
||||
}
|
||||
}
|
||||
|
||||
fun syncLanguageSettings() {
|
||||
applyLanguageSettingsToCompilerOptions(nativeLanguageSettings, options)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user