diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/KotlinNativeToolRunner.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/KotlinNativeToolRunner.kt index 7ad4c367a94..ff536872b3a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/KotlinNativeToolRunner.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/KotlinNativeToolRunner.kt @@ -113,6 +113,8 @@ internal abstract class KonanCliRunner( this } + protected open fun transformArgs(args: List): List = args + override fun run(args: List) { project.logger.info("Run tool: $toolName with args: ${args.joinToString(separator = " ")}") if (classpath.isEmpty) { @@ -132,7 +134,7 @@ internal abstract class KonanCliRunner( .toMap() ) spec.systemProperties(additionalSystemProperties) - spec.args(listOf(toolName) + args) + spec.args(listOf(toolName) + transformArgs(args)) blacklistEnvironment.forEach { spec.environment.remove(it) } spec.environment(environment) } @@ -152,8 +154,29 @@ internal class KonanInteropRunner(project: Project, additionalJvmArgs: List = emptyList()) - : KonanCliRunner("konanc", "Kotlin/Native compiler", project, additionalJvmArgs) +internal class KonanCompilerRunner( + project: Project, + additionalJvmArgs: List = emptyList(), + val useArgFile: Boolean = true +) : KonanCliRunner("konanc", "Kotlin/Native compiler", project, additionalJvmArgs) +{ + override fun transformArgs(args: List): List { + if (!useArgFile) { + return args + } + + val argFile = createTempFile(prefix = "konancArgs", suffix = ".lst").apply { + deleteOnExit() + } + argFile.printWriter().use { writer -> + args.forEach { + writer.println(it) + } + } + + return listOf("@${argFile.absolutePath}") + } +} internal class KonanKlibRunner(project: Project, additionalJvmArgs: List = emptyList()) : KonanCliRunner("klib", "Klib management tool", project, additionalJvmArgs)