From 97cd2b4d5fa36e274012cfb4c49d2effee1b794b Mon Sep 17 00:00:00 2001 From: Svyatoslav Scherbina Date: Fri, 3 Feb 2017 15:10:10 +0700 Subject: [PATCH] backend: implement '-nativelibrary' command line argument --- .../cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt | 3 +++ .../jetbrains/kotlin/cli/bc/K2NativeCompilerArguments.java | 4 ++++ .../src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt | 3 +++ .../jetbrains/kotlin/backend/konan/KonanConfigurationKeys.kt | 2 ++ .../src/org/jetbrains/kotlin/backend/konan/LinkStage.kt | 2 +- 5 files changed, 13 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 0b906b0c73d..539f458a5d6 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 @@ -62,6 +62,9 @@ class K2Native : CLICompiler() { put(LIBRARY_FILES, arguments.libraries.toNonNullList()) + put(NATIVE_LIBRARY_FILES, + arguments.nativeLibraries.toNonNullList()) + // TODO: Collect all the explicit file names into an object // and teach the compiler to work with temporaries and -save-temps. val bitcodeFile = if (arguments.nolink) { 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 a5904a15c8d..3f5b742207f 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 @@ -21,6 +21,10 @@ public class K2NativeCompilerArguments extends CommonCompilerArguments { @ValueDescription("") public String[] libraries; + @Argument(value = "nativelibrary", alias = "nl", description = "Link with the native library") + @ValueDescription("") + public String[] nativeLibraries; + @Argument(value = "nolink", description = "Don't link, just produce a bitcode file") public boolean nolink; diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt index 53b8fe550ea..61dfa408d34 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt @@ -29,6 +29,9 @@ class KonanConfig(val project: Project, val configuration: CompilerConfiguration private val loadedDescriptors = loadLibMetadata(libraries) + internal val librariesToLink: List + get() = libraries + configuration.getList(KonanConfigKeys.NATIVE_LIBRARY_FILES) + val moduleId: String get() = configuration.getNotNull(CommonConfigurationKeys.MODULE_NAME) 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 97af9c0eef5..0f8d7982470 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 @@ -7,6 +7,8 @@ class KonanConfigKeys { companion object { val LIBRARY_FILES: CompilerConfigurationKey> = CompilerConfigurationKey.create("library file paths") + val NATIVE_LIBRARY_FILES: CompilerConfigurationKey> + = CompilerConfigurationKey.create("native library file paths") val BITCODE_FILE: CompilerConfigurationKey = CompilerConfigurationKey.create("emitted bitcode file path") val EXECUTABLE_FILE: 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 dad44117626..e0a13aaab54 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 @@ -144,7 +144,7 @@ internal class LinkStage(val context: Context) { val optimize = config.get(KonanConfigKeys.OPTIMIZATION) ?: false val emitted = config.get(KonanConfigKeys.BITCODE_FILE)!! val nostdlib = config.get(KonanConfigKeys.NOSTDLIB) ?: false - val libraries = context.config.libraries + val libraries = context.config.librariesToLink fun llvmLto(files: List): ObjectFile { val tmpCombined = File.createTempFile("combined", ".o")