[K/N][gradle][interop] Refactored ToolConfig

Added possibility to create different strategies for loading libclang
This commit is contained in:
Igor Chevdar
2021-11-18 19:32:05 +05:00
parent 650d4c78e9
commit bd6ea71ead
9 changed files with 96 additions and 57 deletions
@@ -250,7 +250,7 @@ private fun generateLibrary(
*def.depends.flatMap { listOf("-l", "$outputDirectory/${it.libraryName}") }.toTypedArray()
)
logger.verbose("Run cinterop with args: ${cinteropArgs.joinToString(separator = " ")}")
invokeInterop("native", cinteropArgs)?.let { K2Native.mainNoExit(it) }
invokeInterop("native", cinteropArgs, runFromDaemon = false)?.let { K2Native.mainNoExit(it) }
if (rebuild) {
outKlib.deleteAtomicallyIfPossible(tmpDirectory)
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.native.interop.tool.*
* @return null if there is no need in compiler invocation.
* Otherwise returns array of compiler args.
*/
fun invokeInterop(flavor: String, args: Array<String>): Array<String>? {
fun invokeInterop(flavor: String, args: Array<String>, runFromDaemon: Boolean): Array<String>? {
val arguments = if (flavor == "native") CInteropArguments() else JSInteropArguments()
arguments.argParser.parse(args)
val outputFileName = arguments.output
@@ -46,7 +46,8 @@ fun invokeInterop(flavor: String, args: Array<String>): Array<String>? {
InternalInteropOptions(generatedDir.absolutePath,
nativesDir.absolutePath,manifest.path,
cstubsName.takeIf { flavor == "native" }
)
),
runFromDaemon
) ?: return null // There is no need in compiler invocation if we're generating only metadata.
val nativeStubs =
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.cli.bc.mainNoExitWithGradleRenderer as konancMainFor
import org.jetbrains.kotlin.backend.konan.env.setEnv
import org.jetbrains.kotlin.konan.util.usingNativeMemoryAllocator
private fun mainImpl(args: Array<String>, konancMain: (Array<String>) -> Unit) {
private fun mainImpl(args: Array<String>, runFromDaemon: Boolean, konancMain: (Array<String>) -> Unit) {
val utilityName = args[0]
val utilityArgs = args.drop(1).toTypedArray()
when (utilityName) {
@@ -37,17 +37,17 @@ private fun mainImpl(args: Array<String>, konancMain: (Array<String>) -> Unit) {
konancMain(utilityArgs)
}
"cinterop" -> {
val konancArgs = invokeInterop("native", utilityArgs)
val konancArgs = invokeInterop("native", utilityArgs, runFromDaemon)
konancArgs?.let { konancMain(it) }
}
"jsinterop" -> {
val konancArgs = invokeInterop("wasm", utilityArgs)
val konancArgs = invokeInterop("wasm", utilityArgs, runFromDaemon)
konancArgs?.let { konancMain(it) }
}
"klib" ->
klibMain(utilityArgs)
"defFileDependencies" ->
defFileDependencies(utilityArgs)
defFileDependencies(utilityArgs, runFromDaemon)
"generatePlatformLibraries" ->
generatePlatformLibraries(utilityArgs)
@@ -59,7 +59,7 @@ private fun mainImpl(args: Array<String>, konancMain: (Array<String>) -> Unit) {
}
}
fun main(args: Array<String>) = mainImpl(args, ::konancMain)
fun main(args: Array<String>) = mainImpl(args, false, ::konancMain)
private fun setupClangEnv() {
setEnv("LIBCLANG_DISABLE_CRASH_RECOVERY", "1")
@@ -67,5 +67,5 @@ private fun setupClangEnv() {
fun daemonMain(args: Array<String>) = usingNativeMemoryAllocator {
setupClangEnv() // For in-process invocation have to setup proper environment manually.
mainImpl(args, ::konancMainForGradle)
mainImpl(args, true, ::konancMainForGradle)
}