Support -nodefaultlibs flag in the interop tool

This commit is contained in:
Ilya Matveev
2017-10-05 17:29:05 +03:00
committed by ilmat192
parent e245a23c34
commit 43a88dbcb6
4 changed files with 24 additions and 2 deletions
+1
View File
@@ -15,6 +15,7 @@ konanInterop {
defFile gradle.startParameter.projectProperties.defFile
pkg gradle.startParameter.projectProperties.name
target gradle.startParameter.projectProperties.target
noDefaultLibs true
}
}
@@ -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
}
@@ -56,6 +56,8 @@ open class KonanInteropTask: KonanTargetableTask() {
@Input var dumpParameters = false
internal set
@Input var noDefaultLibs = false
internal set
@Input val compilerOpts = mutableListOf<String>()
@Input val linkerOpts = mutableListOf<String>()
@@ -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())
@@ -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<String>) {
val cinteropArgFilter = listOf("-library", "-r", "-repo", "-nodefaultlibs")
var outputFileName = "nativelib"
var target = "host"
val libraries = mutableListOf<String>()
val repos = mutableListOf<String>()
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<String>) {
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<String>) {
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<String>) {
"-flavor", "native"
) + importArgs
val cinteropArgs = (additionalArgs + args.toList()).toTypedArray()
val cinteropArgs = (additionalArgs + args.filter { it !in cinteropArgFilter }).toTypedArray()
val cinteropArgsToCompiler = mutableListOf<String>()
interop(cinteropArgs, cinteropArgsToCompiler)