[K/N][gradle][interop] Refactored ToolConfig
Added possibility to create different strategies for loading libclang
This commit is contained in:
+6
-6
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.native.interop.indexer.getHeaderPaths
|
|||||||
import org.jetbrains.kotlin.native.interop.tool.CInteropArguments
|
import org.jetbrains.kotlin.native.interop.tool.CInteropArguments
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
fun defFileDependencies(args: Array<String>) {
|
fun defFileDependencies(args: Array<String>, runFromDaemon: Boolean) {
|
||||||
val defFiles = mutableListOf<File>()
|
val defFiles = mutableListOf<File>()
|
||||||
val targets = mutableListOf<String>()
|
val targets = mutableListOf<String>()
|
||||||
|
|
||||||
@@ -30,14 +30,14 @@ fun defFileDependencies(args: Array<String>) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
defFileDependencies(makeDependencyAssigner(targets, defFiles))
|
defFileDependencies(makeDependencyAssigner(targets, defFiles, runFromDaemon))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun makeDependencyAssigner(targets: List<String>, defFiles: List<File>) =
|
private fun makeDependencyAssigner(targets: List<String>, defFiles: List<File>, runFromDaemon: Boolean) =
|
||||||
CompositeDependencyAssigner(targets.map { makeDependencyAssignerForTarget(it, defFiles) })
|
CompositeDependencyAssigner(targets.map { makeDependencyAssignerForTarget(it, defFiles, runFromDaemon) })
|
||||||
|
|
||||||
private fun makeDependencyAssignerForTarget(target: String, defFiles: List<File>): SingleTargetDependencyAssigner {
|
private fun makeDependencyAssignerForTarget(target: String, defFiles: List<File>, runFromDaemon: Boolean): SingleTargetDependencyAssigner {
|
||||||
val tool = prepareTool(target, KotlinPlatform.NATIVE)
|
val tool = prepareTool(target, KotlinPlatform.NATIVE, runFromDaemon)
|
||||||
val cinteropArguments = CInteropArguments()
|
val cinteropArguments = CInteropArguments()
|
||||||
cinteropArguments.argParser.parse(arrayOf())
|
cinteropArguments.argParser.parse(arrayOf())
|
||||||
val libraries = defFiles.associateWith {
|
val libraries = defFiles.associateWith {
|
||||||
|
|||||||
+8
-24
@@ -18,44 +18,28 @@ package org.jetbrains.kotlin.native.interop.tool
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.konan.target.*
|
import org.jetbrains.kotlin.konan.target.*
|
||||||
import org.jetbrains.kotlin.konan.util.KonanHomeProvider
|
import org.jetbrains.kotlin.konan.util.KonanHomeProvider
|
||||||
import org.jetbrains.kotlin.konan.util.defaultTargetSubstitutions
|
import org.jetbrains.kotlin.konan.target.AbstractToolConfig
|
||||||
import org.jetbrains.kotlin.native.interop.gen.jvm.KotlinPlatform
|
import org.jetbrains.kotlin.native.interop.gen.jvm.KotlinPlatform
|
||||||
import org.jetbrains.kotlin.native.interop.indexer.Language
|
import org.jetbrains.kotlin.native.interop.indexer.Language
|
||||||
|
|
||||||
class ToolConfig(userProvidedTargetName: String?, private val flavor: KotlinPlatform, private val propertyOverrides: Map<String, String>) {
|
class ToolConfig(userProvidedTargetName: String?, flavor: KotlinPlatform, propertyOverrides: Map<String, String>)
|
||||||
|
: AbstractToolConfig(KonanHomeProvider.determineKonanHome(), userProvidedTargetName, propertyOverrides) {
|
||||||
private val konanHome = KonanHomeProvider.determineKonanHome()
|
|
||||||
private val distribution = Distribution(konanHome, propertyOverrides = propertyOverrides)
|
|
||||||
private val platformManager = PlatformManager(distribution)
|
|
||||||
private val targetManager = platformManager.targetManager(userProvidedTargetName)
|
|
||||||
private val host = HostManager.host
|
|
||||||
val target = targetManager.target
|
|
||||||
|
|
||||||
private val platform = platformManager.platform(target)
|
|
||||||
|
|
||||||
val clang = when (flavor) {
|
val clang = when (flavor) {
|
||||||
KotlinPlatform.JVM -> platform.clangForJni
|
KotlinPlatform.JVM -> platform.clangForJni
|
||||||
KotlinPlatform.NATIVE -> platform.clang
|
KotlinPlatform.NATIVE -> platform.clang
|
||||||
}
|
}
|
||||||
|
|
||||||
val substitutions = defaultTargetSubstitutions(target)
|
|
||||||
|
|
||||||
fun downloadDependencies() = platform.downloadDependencies()
|
|
||||||
|
|
||||||
fun getDefaultCompilerOptsForLanguage(language: Language): List<String> = when (language) {
|
fun getDefaultCompilerOptsForLanguage(language: Language): List<String> = when (language) {
|
||||||
Language.C,
|
Language.C,
|
||||||
Language.OBJECTIVE_C -> clang.libclangArgs.toList()
|
Language.OBJECTIVE_C -> clang.libclangArgs.toList()
|
||||||
Language.CPP -> clang.libclangXXArgs.toList()
|
Language.CPP -> clang.libclangXXArgs.toList()
|
||||||
}
|
}
|
||||||
|
|
||||||
val platformCompilerOpts = if (clang is ClangArgs.Jni)
|
val platformCompilerOpts =
|
||||||
clang.hostCompilerArgsForJni.toList() else emptyList()
|
if (clang is ClangArgs.Jni)
|
||||||
|
clang.hostCompilerArgsForJni.toList()
|
||||||
|
else emptyList()
|
||||||
|
|
||||||
val llvmHome = platform.absoluteLlvmHome
|
override fun loadLibclang() { System.load(libclang) }
|
||||||
val sysRoot = platform.absoluteTargetSysRoot
|
|
||||||
|
|
||||||
val libclang = when (host) {
|
|
||||||
KonanTarget.MINGW_X64 -> "$llvmHome/bin/libclang.dll"
|
|
||||||
else -> "$llvmHome/lib/${System.mapLibraryName("clang")}"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-15
@@ -64,18 +64,19 @@ fun main(args: Array<String>) {
|
|||||||
val arguments = FullCInteropArguments()
|
val arguments = FullCInteropArguments()
|
||||||
arguments.argParser.parse(args)
|
arguments.argParser.parse(args)
|
||||||
val flavorName = arguments.flavor
|
val flavorName = arguments.flavor
|
||||||
processCLibSafe(flavorName, arguments, InternalInteropOptions(arguments.generated, arguments.natives))
|
processCLibSafe(flavorName, arguments, InternalInteropOptions(arguments.generated, arguments.natives), runFromDaemon = false)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun interop(
|
fun interop(
|
||||||
flavor: String, args: Array<String>,
|
flavor: String, args: Array<String>,
|
||||||
additionalArgs: InternalInteropOptions
|
additionalArgs: InternalInteropOptions,
|
||||||
|
runFromDaemon: Boolean
|
||||||
): Array<String>? = when (flavor) {
|
): Array<String>? = when (flavor) {
|
||||||
"jvm", "native" -> {
|
"jvm", "native" -> {
|
||||||
val cinteropArguments = CInteropArguments()
|
val cinteropArguments = CInteropArguments()
|
||||||
cinteropArguments.argParser.parse(args)
|
cinteropArguments.argParser.parse(args)
|
||||||
val platform = KotlinPlatform.values().single { it.name.equals(flavor, ignoreCase = true) }
|
val platform = KotlinPlatform.values().single { it.name.equals(flavor, ignoreCase = true) }
|
||||||
processCLibSafe(platform, cinteropArguments, additionalArgs)
|
processCLibSafe(platform, cinteropArguments, additionalArgs, runFromDaemon)
|
||||||
}
|
}
|
||||||
"wasm" -> processIdlLib(args, additionalArgs)
|
"wasm" -> processIdlLib(args, additionalArgs)
|
||||||
else -> error("Unexpected flavor")
|
else -> error("Unexpected flavor")
|
||||||
@@ -206,15 +207,15 @@ private fun findFilesByGlobs(roots: List<Path>, globs: List<String>): Map<Path,
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun processCLibSafe(flavor: KotlinPlatform, cinteropArguments: CInteropArguments,
|
private fun processCLibSafe(flavor: KotlinPlatform, cinteropArguments: CInteropArguments,
|
||||||
additionalArgs: InternalInteropOptions) =
|
additionalArgs: InternalInteropOptions, runFromDaemon: Boolean) =
|
||||||
usingNativeMemoryAllocator {
|
usingNativeMemoryAllocator {
|
||||||
usingJvmCInteropCallbacks {
|
usingJvmCInteropCallbacks {
|
||||||
processCLib(flavor, cinteropArguments, additionalArgs)
|
processCLib(flavor, cinteropArguments, additionalArgs, runFromDaemon)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processCLib(flavor: KotlinPlatform, cinteropArguments: CInteropArguments,
|
private fun processCLib(flavor: KotlinPlatform, cinteropArguments: CInteropArguments,
|
||||||
additionalArgs: InternalInteropOptions): Array<String>? {
|
additionalArgs: InternalInteropOptions, runFromDaemon: Boolean): Array<String>? {
|
||||||
val ktGenRoot = additionalArgs.generated
|
val ktGenRoot = additionalArgs.generated
|
||||||
val nativeLibsDir = additionalArgs.natives
|
val nativeLibsDir = additionalArgs.natives
|
||||||
val defFile = cinteropArguments.def?.let { File(it) }
|
val defFile = cinteropArguments.def?.let { File(it) }
|
||||||
@@ -224,7 +225,7 @@ private fun processCLib(flavor: KotlinPlatform, cinteropArguments: CInteropArgum
|
|||||||
cinteropArguments.argParser.printError("-def or -pkg should be provided!")
|
cinteropArguments.argParser.printError("-def or -pkg should be provided!")
|
||||||
}
|
}
|
||||||
|
|
||||||
val tool = prepareTool(cinteropArguments.target, flavor, parseKeyValuePairs(cinteropArguments.overrideKonanProperties))
|
val tool = prepareTool(cinteropArguments.target, flavor, runFromDaemon, parseKeyValuePairs(cinteropArguments.overrideKonanProperties))
|
||||||
|
|
||||||
val def = DefFile(defFile, tool.substitutions)
|
val def = DefFile(defFile, tool.substitutions)
|
||||||
val isLinkerOptsSetByUser = (cinteropArguments.linkerOpts.valueOrigin == ArgParser.ValueOrigin.SET_BY_USER) ||
|
val isLinkerOptsSetByUser = (cinteropArguments.linkerOpts.valueOrigin == ArgParser.ValueOrigin.SET_BY_USER) ||
|
||||||
@@ -463,14 +464,10 @@ private fun resolveDependencies(
|
|||||||
).getFullList(TopologicalLibraryOrder)
|
).getFullList(TopologicalLibraryOrder)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun prepareTool(target: String?, flavor: KotlinPlatform, propertyOverrides: Map<String, String> = emptyMap()): ToolConfig {
|
internal fun prepareTool(target: String?, flavor: KotlinPlatform, runFromDaemon: Boolean, propertyOverrides: Map<String, String> = emptyMap()) =
|
||||||
val tool = ToolConfig(target, flavor, propertyOverrides)
|
ToolConfig(target, flavor, propertyOverrides).also {
|
||||||
tool.downloadDependencies()
|
if (!runFromDaemon) it.prepare() // Daemon prepares the tool himself. (See KonanToolRunner.kt)
|
||||||
|
}
|
||||||
System.load(tool.libclang)
|
|
||||||
|
|
||||||
return tool
|
|
||||||
}
|
|
||||||
|
|
||||||
internal fun buildNativeLibrary(
|
internal fun buildNativeLibrary(
|
||||||
tool: ToolConfig,
|
tool: ToolConfig,
|
||||||
|
|||||||
+38
@@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.konan.target
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.konan.util.defaultTargetSubstitutions
|
||||||
|
|
||||||
|
abstract class AbstractToolConfig(konanHome: String, userProvidedTargetName: String?, propertyOverrides: Map<String, String>) {
|
||||||
|
private val distribution = Distribution(konanHome, propertyOverrides = propertyOverrides)
|
||||||
|
private val platformManager = PlatformManager(distribution)
|
||||||
|
private val targetManager = platformManager.targetManager(userProvidedTargetName)
|
||||||
|
private val host = HostManager.host
|
||||||
|
val target = targetManager.target
|
||||||
|
|
||||||
|
protected val platform = platformManager.platform(target)
|
||||||
|
|
||||||
|
val substitutions = defaultTargetSubstitutions(target)
|
||||||
|
|
||||||
|
fun downloadDependencies() = platform.downloadDependencies()
|
||||||
|
|
||||||
|
val llvmHome = platform.absoluteLlvmHome
|
||||||
|
val sysRoot = platform.absoluteTargetSysRoot
|
||||||
|
|
||||||
|
val libclang = when (host) {
|
||||||
|
KonanTarget.MINGW_X64 -> "$llvmHome/bin/libclang.dll"
|
||||||
|
else -> "$llvmHome/lib/${System.mapLibraryName("clang")}"
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract fun loadLibclang()
|
||||||
|
|
||||||
|
fun prepare() {
|
||||||
|
downloadDependencies()
|
||||||
|
|
||||||
|
loadLibclang()
|
||||||
|
}
|
||||||
|
}
|
||||||
+17
-2
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.konan.util.DependencyDirectories
|
|||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.Properties
|
import java.util.Properties
|
||||||
import org.jetbrains.kotlin.compilerRunner.KotlinToolRunner
|
import org.jetbrains.kotlin.compilerRunner.KotlinToolRunner
|
||||||
|
import org.jetbrains.kotlin.konan.target.AbstractToolConfig
|
||||||
|
|
||||||
internal interface KonanToolRunner {
|
internal interface KonanToolRunner {
|
||||||
fun run(args: List<String>)
|
fun run(args: List<String>)
|
||||||
@@ -67,10 +68,10 @@ internal abstract class KonanCliRunner(
|
|||||||
""".trimIndent()
|
""".trimIndent()
|
||||||
}
|
}
|
||||||
|
|
||||||
data class IsolatedClassLoaderCacheKey(val classpath: Set<java.io.File>)
|
data class IsolatedClassLoaderCacheKey(val classpath: Set<java.io.File>, val project: Project)
|
||||||
|
|
||||||
// TODO: can't we use this for other implementations too?
|
// TODO: can't we use this for other implementations too?
|
||||||
final override val isolatedClassLoaderCacheKey get() = IsolatedClassLoaderCacheKey(classpath)
|
final override val isolatedClassLoaderCacheKey get() = IsolatedClassLoaderCacheKey(classpath, project)
|
||||||
|
|
||||||
override fun transformArgs(args: List<String>) = listOf(toolName) + args
|
override fun transformArgs(args: List<String>) = listOf(toolName) + args
|
||||||
|
|
||||||
@@ -103,6 +104,16 @@ internal class KonanCliCompilerRunner(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val load0 = Runtime::class.java.getDeclaredMethod("load0", Class::class.java, String::class.java).also {
|
||||||
|
it.isAccessible = true
|
||||||
|
}
|
||||||
|
|
||||||
|
internal class CliToolConfig(konanHome: String, target: String) : AbstractToolConfig(konanHome, target, emptyMap()) {
|
||||||
|
override fun loadLibclang() {
|
||||||
|
load0.invoke(Runtime.getRuntime(), String::class.java, libclang)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** Kotlin/Native C-interop tool runner */
|
/** Kotlin/Native C-interop tool runner */
|
||||||
internal class KonanCliInteropRunner(
|
internal class KonanCliInteropRunner(
|
||||||
project: Project,
|
project: Project,
|
||||||
@@ -121,6 +132,10 @@ internal class KonanCliInteropRunner(
|
|||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun init(target: String) {
|
||||||
|
CliToolConfig(konanHome, target).prepare()
|
||||||
|
}
|
||||||
|
|
||||||
private val llvmExecutablesPath: String? by lazy {
|
private val llvmExecutablesPath: String? by lazy {
|
||||||
if (HostManager.host == KonanTarget.MINGW_X64) {
|
if (HostManager.host == KonanTarget.MINGW_X64) {
|
||||||
// TODO: Read it from Platform properties when it is accessible.
|
// TODO: Read it from Platform properties when it is accessible.
|
||||||
|
|||||||
+5
-1
@@ -36,8 +36,10 @@ import javax.inject.Inject
|
|||||||
|
|
||||||
open class KonanInteropTask @Inject constructor(@Internal val workerExecutor: WorkerExecutor) : KonanBuildingTask(), KonanInteropSpec {
|
open class KonanInteropTask @Inject constructor(@Internal val workerExecutor: WorkerExecutor) : KonanBuildingTask(), KonanInteropSpec {
|
||||||
|
|
||||||
|
private val interopRunner = KonanCliInteropRunner(project, project.konanExtension.jvmArgs)
|
||||||
|
|
||||||
@get:Internal
|
@get:Internal
|
||||||
override val toolRunner: KonanToolRunner = KonanCliInteropRunner(project, project.konanExtension.jvmArgs)
|
override val toolRunner: KonanToolRunner = interopRunner
|
||||||
|
|
||||||
override fun init(config: KonanBuildingConfig<*>, destinationDir: File, artifactName: String, target: KonanTarget) {
|
override fun init(config: KonanBuildingConfig<*>, destinationDir: File, artifactName: String, target: KonanTarget) {
|
||||||
super.init(config, destinationDir, artifactName, target)
|
super.init(config, destinationDir, artifactName, target)
|
||||||
@@ -174,6 +176,8 @@ open class KonanInteropTask @Inject constructor(@Internal val workerExecutor: Wo
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun run() {
|
override fun run() {
|
||||||
|
interopRunner.init(target)
|
||||||
|
|
||||||
destinationDir.mkdirs()
|
destinationDir.mkdirs()
|
||||||
if (dumpParameters) {
|
if (dumpParameters) {
|
||||||
dumpProperties(this)
|
dumpProperties(this)
|
||||||
|
|||||||
+1
-1
@@ -250,7 +250,7 @@ private fun generateLibrary(
|
|||||||
*def.depends.flatMap { listOf("-l", "$outputDirectory/${it.libraryName}") }.toTypedArray()
|
*def.depends.flatMap { listOf("-l", "$outputDirectory/${it.libraryName}") }.toTypedArray()
|
||||||
)
|
)
|
||||||
logger.verbose("Run cinterop with args: ${cinteropArgs.joinToString(separator = " ")}")
|
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) {
|
if (rebuild) {
|
||||||
outKlib.deleteAtomicallyIfPossible(tmpDirectory)
|
outKlib.deleteAtomicallyIfPossible(tmpDirectory)
|
||||||
|
|||||||
+3
-2
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.native.interop.tool.*
|
|||||||
* @return null if there is no need in compiler invocation.
|
* @return null if there is no need in compiler invocation.
|
||||||
* Otherwise returns array of compiler args.
|
* 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()
|
val arguments = if (flavor == "native") CInteropArguments() else JSInteropArguments()
|
||||||
arguments.argParser.parse(args)
|
arguments.argParser.parse(args)
|
||||||
val outputFileName = arguments.output
|
val outputFileName = arguments.output
|
||||||
@@ -46,7 +46,8 @@ fun invokeInterop(flavor: String, args: Array<String>): Array<String>? {
|
|||||||
InternalInteropOptions(generatedDir.absolutePath,
|
InternalInteropOptions(generatedDir.absolutePath,
|
||||||
nativesDir.absolutePath,manifest.path,
|
nativesDir.absolutePath,manifest.path,
|
||||||
cstubsName.takeIf { flavor == "native" }
|
cstubsName.takeIf { flavor == "native" }
|
||||||
)
|
),
|
||||||
|
runFromDaemon
|
||||||
) ?: return null // There is no need in compiler invocation if we're generating only metadata.
|
) ?: return null // There is no need in compiler invocation if we're generating only metadata.
|
||||||
|
|
||||||
val nativeStubs =
|
val nativeStubs =
|
||||||
|
|||||||
+6
-6
@@ -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.backend.konan.env.setEnv
|
||||||
import org.jetbrains.kotlin.konan.util.usingNativeMemoryAllocator
|
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 utilityName = args[0]
|
||||||
val utilityArgs = args.drop(1).toTypedArray()
|
val utilityArgs = args.drop(1).toTypedArray()
|
||||||
when (utilityName) {
|
when (utilityName) {
|
||||||
@@ -37,17 +37,17 @@ private fun mainImpl(args: Array<String>, konancMain: (Array<String>) -> Unit) {
|
|||||||
konancMain(utilityArgs)
|
konancMain(utilityArgs)
|
||||||
}
|
}
|
||||||
"cinterop" -> {
|
"cinterop" -> {
|
||||||
val konancArgs = invokeInterop("native", utilityArgs)
|
val konancArgs = invokeInterop("native", utilityArgs, runFromDaemon)
|
||||||
konancArgs?.let { konancMain(it) }
|
konancArgs?.let { konancMain(it) }
|
||||||
}
|
}
|
||||||
"jsinterop" -> {
|
"jsinterop" -> {
|
||||||
val konancArgs = invokeInterop("wasm", utilityArgs)
|
val konancArgs = invokeInterop("wasm", utilityArgs, runFromDaemon)
|
||||||
konancArgs?.let { konancMain(it) }
|
konancArgs?.let { konancMain(it) }
|
||||||
}
|
}
|
||||||
"klib" ->
|
"klib" ->
|
||||||
klibMain(utilityArgs)
|
klibMain(utilityArgs)
|
||||||
"defFileDependencies" ->
|
"defFileDependencies" ->
|
||||||
defFileDependencies(utilityArgs)
|
defFileDependencies(utilityArgs, runFromDaemon)
|
||||||
"generatePlatformLibraries" ->
|
"generatePlatformLibraries" ->
|
||||||
generatePlatformLibraries(utilityArgs)
|
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() {
|
private fun setupClangEnv() {
|
||||||
setEnv("LIBCLANG_DISABLE_CRASH_RECOVERY", "1")
|
setEnv("LIBCLANG_DISABLE_CRASH_RECOVERY", "1")
|
||||||
@@ -67,5 +67,5 @@ private fun setupClangEnv() {
|
|||||||
|
|
||||||
fun daemonMain(args: Array<String>) = usingNativeMemoryAllocator {
|
fun daemonMain(args: Array<String>) = usingNativeMemoryAllocator {
|
||||||
setupClangEnv() // For in-process invocation have to setup proper environment manually.
|
setupClangEnv() // For in-process invocation have to setup proper environment manually.
|
||||||
mainImpl(args, ::konancMainForGradle)
|
mainImpl(args, true, ::konancMainForGradle)
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user