From 7ad36ac0358ef8278ed097f5b1202906fd3fcd49 Mon Sep 17 00:00:00 2001 From: Svyatoslav Scherbina Date: Thu, 9 Mar 2017 15:45:45 +0700 Subject: [PATCH] backend: implement '-linkerArg' to pass arguments to the linker --- .../cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt | 2 ++ .../jetbrains/kotlin/cli/bc/K2NativeCompilerArguments.java | 4 ++++ .../jetbrains/kotlin/backend/konan/KonanConfigurationKeys.kt | 2 ++ .../src/org/jetbrains/kotlin/backend/konan/LinkStage.kt | 4 +++- 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt b/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt index 0f468046d81..7d773b150dd 100644 --- a/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt +++ b/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt @@ -60,6 +60,8 @@ class K2Native : CLICompiler() { put(LIBRARY_FILES, arguments.libraries.toNonNullList()) + put(LINKER_ARGS, arguments.linkerArguments.toNonNullList()) + put(NATIVE_LIBRARY_FILES, arguments.nativeLibraries.toNonNullList()) diff --git a/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2NativeCompilerArguments.java b/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2NativeCompilerArguments.java index 88cd8ff082c..b42122c2a13 100644 --- a/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2NativeCompilerArguments.java +++ b/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2NativeCompilerArguments.java @@ -28,6 +28,10 @@ public class K2NativeCompilerArguments extends CommonCompilerArguments { @Argument(value = "nolink", description = "Don't link, just produce a bitcode file") public boolean nolink; + @Argument(value = "linkerArg", description = "Add argument to linker") + @ValueDescription("") + public String[] linkerArguments; + @Argument(value = "nostdlib", description = "Don't link with stdlib") public boolean nostdlib; diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfigurationKeys.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfigurationKeys.kt index 69702c6fc83..2ceb403cd23 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfigurationKeys.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfigurationKeys.kt @@ -27,6 +27,8 @@ class KonanConfigKeys { = CompilerConfigurationKey.create("compile the module as stdlib") val NOLINK: CompilerConfigurationKey = CompilerConfigurationKey.create("don't link, only produce a bitcode file ") + val LINKER_ARGS: CompilerConfigurationKey> + = CompilerConfigurationKey.create("additional linker arguments") val TARGET: CompilerConfigurationKey = CompilerConfigurationKey.create("target we compile for") val LIST_TARGETS: CompilerConfigurationKey diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/LinkStage.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/LinkStage.kt index 494abc7943c..0e444b41e81 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/LinkStage.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/LinkStage.kt @@ -178,7 +178,9 @@ internal class LinkStage(val context: Context) { fun link(objectFiles: List): ExecutableFile { val executable = config.get(KonanConfigKeys.EXECUTABLE_FILE)!! - val linkCommand = platform.linkCommand(objectFiles, executable, optimize) + val linkCommand = platform.linkCommand(objectFiles, executable, optimize) + + config.getNotNull(KonanConfigKeys.LINKER_ARGS) + runTool(*linkCommand.toTypedArray()) return executable