From 43a88dbcb693337fa0d9dcda2e31830f6f98769f Mon Sep 17 00:00:00 2001 From: Ilya Matveev Date: Thu, 5 Oct 2017 17:29:05 +0300 Subject: [PATCH] Support -nodefaultlibs flag in the interop tool --- klib/platform.gradle | 1 + .../jetbrains/kotlin/gradle/plugin/KonanCompileTask.kt | 7 +++++++ .../jetbrains/kotlin/gradle/plugin/KonanInteropTask.kt | 8 ++++++++ .../kotlin/org/jetbrains/kotlin/cli/utilities/main.kt | 10 ++++++++-- 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/klib/platform.gradle b/klib/platform.gradle index b35fc25fed6..2d9a24af21c 100644 --- a/klib/platform.gradle +++ b/klib/platform.gradle @@ -15,6 +15,7 @@ konanInterop { defFile gradle.startParameter.projectProperties.defFile pkg gradle.startParameter.projectProperties.name target gradle.startParameter.projectProperties.target + noDefaultLibs true } } diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileTask.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileTask.kt index 90e56da309f..6a512842f8b 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileTask.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanCompileTask.kt @@ -87,6 +87,8 @@ open class KonanCompileTask: KonanTargetableTask() { internal set @Input var enableAssertions = false internal set + @Input var noDefaultLibs = false + internal set @Console var measureTime = false internal set @@ -122,6 +124,7 @@ open class KonanCompileTask: KonanTargetableTask() { addKey("-nomain", noMain) addKey("-opt", enableOptimization) addKey("-ea", enableAssertions) + addKey("-nodefaultlibs", noDefaultLibs) addKey("--time", measureTime) addAll(extraOpts) @@ -284,6 +287,10 @@ open class KonanCompileConfig( enableAssertions = true } + fun noDefaultLibs(flag: Boolean) = with(compilationTask) { + noDefaultLibs = flag + } + fun measureTime(value: Boolean) = with(compilationTask) { measureTime = value } diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanInteropTask.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanInteropTask.kt index 35367028e5a..d3dd69f6ca4 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanInteropTask.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanInteropTask.kt @@ -56,6 +56,8 @@ open class KonanInteropTask: KonanTargetableTask() { @Input var dumpParameters = false internal set + @Input var noDefaultLibs = false + internal set @Input val compilerOpts = mutableListOf() @Input val linkerOpts = mutableListOf() @@ -88,6 +90,8 @@ open class KonanInteropTask: KonanTargetableTask() { addFileArgs("-h", headers) + addKey("-nodefaultlibs", noDefaultLibs) + compilerOpts.forEach { addArg("-copt", it) } @@ -193,6 +197,10 @@ open class KonanInteropConfig( dumpParameters = value } + fun noDefaultLibs(flag: Boolean) = with(interopProcessingTask) { + noDefaultLibs = flag + } + fun dependsOn(dependency: Any) = interopProcessingTask.dependsOn(dependency) fun extraOpts(vararg values: Any) = extraOpts(values.asList()) diff --git a/utilities/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/main.kt b/utilities/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/main.kt index f98d5bcebf8..064eaf1c5ba 100644 --- a/utilities/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/main.kt +++ b/utilities/src/main/kotlin/org/jetbrains/kotlin/cli/utilities/main.kt @@ -12,10 +12,13 @@ import org.jetbrains.kotlin.native.interop.gen.jvm.interop import org.jetbrains.kotlin.cli.klib.main as klibMain fun invokeCinterop(args: Array) { + val cinteropArgFilter = listOf("-library", "-r", "-repo", "-nodefaultlibs") + var outputFileName = "nativelib" var target = "host" val libraries = mutableListOf() val repos = mutableListOf() + var noDefaultLibs = false for (i in args.indices) { val arg = args[i] val nextArg = args.getOrNull(i + 1) @@ -27,8 +30,11 @@ fun invokeCinterop(args: Array) { libraries.addIfNotNull(nextArg) if (arg == "-r" || arg == "-repo") repos.addIfNotNull(nextArg) + if (arg == "-nodefaultlibs") + noDefaultLibs = true } + val buildDir = File("$outputFileName-build") val generatedDir = File(buildDir, "kotlin") val nativesDir = File(buildDir, "natives") @@ -38,7 +44,7 @@ fun invokeCinterop(args: Array) { val targetManager = TargetManager(target) val resolver = defaultResolver(repos, targetManager) val allLibraries = resolver.resolveLibrariesRecursive( - libraries, targetManager.target, noStdLib = true, noDefaultLibs = false + libraries, targetManager.target, noStdLib = true, noDefaultLibs = noDefaultLibs ) val importArgs = allLibraries.flatMap { @@ -61,7 +67,7 @@ fun invokeCinterop(args: Array) { "-flavor", "native" ) + importArgs - val cinteropArgs = (additionalArgs + args.toList()).toTypedArray() + val cinteropArgs = (additionalArgs + args.filter { it !in cinteropArgFilter }).toTypedArray() val cinteropArgsToCompiler = mutableListOf() interop(cinteropArgs, cinteropArgsToCompiler)