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 defFile gradle.startParameter.projectProperties.defFile
pkg gradle.startParameter.projectProperties.name pkg gradle.startParameter.projectProperties.name
target gradle.startParameter.projectProperties.target target gradle.startParameter.projectProperties.target
noDefaultLibs true
} }
} }
@@ -87,6 +87,8 @@ open class KonanCompileTask: KonanTargetableTask() {
internal set internal set
@Input var enableAssertions = false @Input var enableAssertions = false
internal set internal set
@Input var noDefaultLibs = false
internal set
@Console var measureTime = false @Console var measureTime = false
internal set internal set
@@ -122,6 +124,7 @@ open class KonanCompileTask: KonanTargetableTask() {
addKey("-nomain", noMain) addKey("-nomain", noMain)
addKey("-opt", enableOptimization) addKey("-opt", enableOptimization)
addKey("-ea", enableAssertions) addKey("-ea", enableAssertions)
addKey("-nodefaultlibs", noDefaultLibs)
addKey("--time", measureTime) addKey("--time", measureTime)
addAll(extraOpts) addAll(extraOpts)
@@ -284,6 +287,10 @@ open class KonanCompileConfig(
enableAssertions = true enableAssertions = true
} }
fun noDefaultLibs(flag: Boolean) = with(compilationTask) {
noDefaultLibs = flag
}
fun measureTime(value: Boolean) = with(compilationTask) { fun measureTime(value: Boolean) = with(compilationTask) {
measureTime = value measureTime = value
} }
@@ -56,6 +56,8 @@ open class KonanInteropTask: KonanTargetableTask() {
@Input var dumpParameters = false @Input var dumpParameters = false
internal set internal set
@Input var noDefaultLibs = false
internal set
@Input val compilerOpts = mutableListOf<String>() @Input val compilerOpts = mutableListOf<String>()
@Input val linkerOpts = mutableListOf<String>() @Input val linkerOpts = mutableListOf<String>()
@@ -88,6 +90,8 @@ open class KonanInteropTask: KonanTargetableTask() {
addFileArgs("-h", headers) addFileArgs("-h", headers)
addKey("-nodefaultlibs", noDefaultLibs)
compilerOpts.forEach { compilerOpts.forEach {
addArg("-copt", it) addArg("-copt", it)
} }
@@ -193,6 +197,10 @@ open class KonanInteropConfig(
dumpParameters = value dumpParameters = value
} }
fun noDefaultLibs(flag: Boolean) = with(interopProcessingTask) {
noDefaultLibs = flag
}
fun dependsOn(dependency: Any) = interopProcessingTask.dependsOn(dependency) fun dependsOn(dependency: Any) = interopProcessingTask.dependsOn(dependency)
fun extraOpts(vararg values: Any) = extraOpts(values.asList()) 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 import org.jetbrains.kotlin.cli.klib.main as klibMain
fun invokeCinterop(args: Array<String>) { fun invokeCinterop(args: Array<String>) {
val cinteropArgFilter = listOf("-library", "-r", "-repo", "-nodefaultlibs")
var outputFileName = "nativelib" var outputFileName = "nativelib"
var target = "host" var target = "host"
val libraries = mutableListOf<String>() val libraries = mutableListOf<String>()
val repos = mutableListOf<String>() val repos = mutableListOf<String>()
var noDefaultLibs = false
for (i in args.indices) { for (i in args.indices) {
val arg = args[i] val arg = args[i]
val nextArg = args.getOrNull(i + 1) val nextArg = args.getOrNull(i + 1)
@@ -27,8 +30,11 @@ fun invokeCinterop(args: Array<String>) {
libraries.addIfNotNull(nextArg) libraries.addIfNotNull(nextArg)
if (arg == "-r" || arg == "-repo") if (arg == "-r" || arg == "-repo")
repos.addIfNotNull(nextArg) repos.addIfNotNull(nextArg)
if (arg == "-nodefaultlibs")
noDefaultLibs = true
} }
val buildDir = File("$outputFileName-build") val buildDir = File("$outputFileName-build")
val generatedDir = File(buildDir, "kotlin") val generatedDir = File(buildDir, "kotlin")
val nativesDir = File(buildDir, "natives") val nativesDir = File(buildDir, "natives")
@@ -38,7 +44,7 @@ fun invokeCinterop(args: Array<String>) {
val targetManager = TargetManager(target) val targetManager = TargetManager(target)
val resolver = defaultResolver(repos, targetManager) val resolver = defaultResolver(repos, targetManager)
val allLibraries = resolver.resolveLibrariesRecursive( val allLibraries = resolver.resolveLibrariesRecursive(
libraries, targetManager.target, noStdLib = true, noDefaultLibs = false libraries, targetManager.target, noStdLib = true, noDefaultLibs = noDefaultLibs
) )
val importArgs = allLibraries.flatMap { val importArgs = allLibraries.flatMap {
@@ -61,7 +67,7 @@ fun invokeCinterop(args: Array<String>) {
"-flavor", "native" "-flavor", "native"
) + importArgs ) + importArgs
val cinteropArgs = (additionalArgs + args.toList()).toTypedArray() val cinteropArgs = (additionalArgs + args.filter { it !in cinteropArgFilter }).toTypedArray()
val cinteropArgsToCompiler = mutableListOf<String>() val cinteropArgsToCompiler = mutableListOf<String>()
interop(cinteropArgs, cinteropArgsToCompiler) interop(cinteropArgs, cinteropArgsToCompiler)