[Gradle] Don't sync freeCompilerArgs second time for the Native link task

Since CompilerOptions and LanguageSettings are synchronized between
each other, we don't need this additional sync that actually duplicates
arguments.

^KT-61700 Fixed
This commit is contained in:
Yahor Berdnikau
2023-09-14 22:29:05 +02:00
committed by Space Team
parent fda47c45ec
commit d5f4cd72b7
3 changed files with 19 additions and 35 deletions
@@ -28,7 +28,11 @@ internal class KotlinNativeLinkIT : KGPBaseTest() {
@DisplayName("KT-56280: should propagate freeCompilerArgs from compilation")
@GradleTest
fun shouldUseCompilationFreeCompilerArgs(gradleVersion: GradleVersion) {
nativeProject("native-link-simple", gradleVersion) {
nativeProject(
"native-link-simple",
gradleVersion,
buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.DEBUG)
) {
buildGradle.appendText(
"""
|
@@ -47,25 +51,9 @@ internal class KotlinNativeLinkIT : KGPBaseTest() {
)
build("linkReleaseExecutableHost") {
val linkTaskOutput = output
.substringAfter("Task :linkReleaseExecutableHost")
.substringBefore("Task :linkHost")
assert(linkTaskOutput.isNotEmpty()) {
"Could not get :linkReleaseExecutableHost task output!"
}
val args = linkTaskOutput
.substringAfterLast("Transformed arguments = [")
.substringBefore("]")
.lines()
.map { it.trim() }
assert(
args.isNotEmpty() &&
args.contains("-e") &&
args.contains("main")
) {
printBuildOutput()
"Link task arguments does not contain '-e main'!"
extractNativeTasksCommandLineArgumentsFromOutput(":linkReleaseExecutableHost") {
assertCommandLineArgumentsContain("-e", "main")
assertNoDuplicates()
}
}
}
@@ -328,4 +328,14 @@ fun CommandLineArguments.assertCommandLineArgumentsContain(
"There is no ${it} in actual command line arguments are: ${args}"
}
}
}
}
/**
* Asserts that the command line arguments do not contain any duplicates.
*/
fun CommandLineArguments.assertNoDuplicates() {
assert(args.size == args.toSet().size) {
buildResult.printBuildOutput()
"Link task has duplicated arguments: ${args.joinToString()}"
}
}
@@ -88,15 +88,6 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
}
}
private fun Project.syncLanguageSettingsToLinkTask(binary: NativeBinary) {
tasks.named<KotlinNativeLink>(binary.linkTaskName).configure { linkTask ->
// We propagate compilation free args to the link task for now (see KT-33717).
linkTask.toolOptions.freeCompilerArgs.addAll(
binary.compilation.compilerOptions.options.freeCompilerArgs
)
}
}
private fun Project.createRunTask(binary: Executable) {
val taskName = binary.runTaskName ?: return
registerTask<Exec>(taskName) { exec ->
@@ -236,11 +227,6 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
target.binaries.all {
project.createLinkTask(it)
}
project.runOnceAfterEvaluated("Sync language settings for NativeLinkTask") {
target.binaries.all { binary ->
project.syncLanguageSettingsToLinkTask(binary)
}
}
target.binaries.withType(Executable::class.java).all {
project.createRunTask(it)