[K/N][gradle][interop] Refactored ToolConfig
Added possibility to create different strategies for loading libclang
This commit is contained in:
+17
-2
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.konan.util.DependencyDirectories
|
||||
import java.io.File
|
||||
import java.util.Properties
|
||||
import org.jetbrains.kotlin.compilerRunner.KotlinToolRunner
|
||||
import org.jetbrains.kotlin.konan.target.AbstractToolConfig
|
||||
|
||||
internal interface KonanToolRunner {
|
||||
fun run(args: List<String>)
|
||||
@@ -67,10 +68,10 @@ internal abstract class KonanCliRunner(
|
||||
""".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?
|
||||
final override val isolatedClassLoaderCacheKey get() = IsolatedClassLoaderCacheKey(classpath)
|
||||
final override val isolatedClassLoaderCacheKey get() = IsolatedClassLoaderCacheKey(classpath, project)
|
||||
|
||||
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 */
|
||||
internal class KonanCliInteropRunner(
|
||||
project: Project,
|
||||
@@ -125,6 +136,10 @@ internal class KonanCliInteropRunner(
|
||||
result
|
||||
}
|
||||
|
||||
fun init(target: String) {
|
||||
CliToolConfig(konanHome, target).prepare()
|
||||
}
|
||||
|
||||
private val llvmExecutablesPath: String? by lazy {
|
||||
if (HostManager.host == KonanTarget.MINGW_X64) {
|
||||
// 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 {
|
||||
|
||||
private val interopRunner = KonanCliInteropRunner(project, project.konanExtension.jvmArgs)
|
||||
|
||||
@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) {
|
||||
super.init(config, destinationDir, artifactName, target)
|
||||
@@ -174,6 +176,8 @@ open class KonanInteropTask @Inject constructor(@Internal val workerExecutor: Wo
|
||||
}
|
||||
|
||||
override fun run() {
|
||||
interopRunner.init(target)
|
||||
|
||||
destinationDir.mkdirs()
|
||||
if (dumpParameters) {
|
||||
dumpProperties(this)
|
||||
|
||||
Reference in New Issue
Block a user