Skip to content

Commit ee99cd6

Browse files
committed
Defer reflection stuff till execution time (after konan downloaded)
1 parent cb763a5 commit ee99cd6

File tree

5 files changed

+18
-9
lines changed

5 files changed

+18
-9
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ android.useAndroidX=true
1414
org.gradle.jvmargs=-Xmx2g
1515

1616
GROUP=co.touchlab
17-
CKLIB_VERSION=0.3.2
17+
CKLIB_VERSION=0.3.3
1818

1919
POM_NAME=CKlib
2020
POM_DESCRIPTION=C/C++ Bitcode Into Klib

plugin/src/main/kotlin/co/touchlab/cklib/gradle/CKlibGradleExtension.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ package co.touchlab.cklib.gradle
1313
import co.touchlab.cklib.gradle.reflection.PlatformManager
1414
import org.gradle.api.GradleException
1515
import org.gradle.api.Project
16+
import org.jetbrains.kotlin.konan.target.Distribution
1617
import org.jetbrains.kotlin.konan.target.HostManager
1718
import org.jetbrains.kotlin.konan.target.TargetSupportException
1819
import javax.inject.Inject
@@ -50,7 +51,7 @@ get() = "${System.getProperty("user.home")}/.cklib"
5051
internal val Project.platformManager: PlatformManager
5152
get() {
5253
val cklibExtension = extensions.getByType(CompileToBitcodeExtension::class.java)
53-
return PlatformManager(cklibExtension.config.konanHome)
54+
return PlatformManager(Distribution(cklibExtension.config.konanHome), cklibExtension.config.konanHome)
5455
}
5556

5657
internal val Project.llvmHome: String

plugin/src/main/kotlin/co/touchlab/cklib/gradle/CompileToBitcode.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ import javax.inject.Inject
2020
open class CompileToBitcode @Inject constructor(
2121
srcRoot: File,
2222
@Input val compileName: String,
23-
@Input val target: String
23+
@Input val target: String,
24+
val enabled: ()->Boolean
2425
) : DefaultTask() {
2526

2627
enum class Language {
@@ -179,6 +180,9 @@ open class CompileToBitcode @Inject constructor(
179180

180181
@TaskAction
181182
fun compile() {
183+
if(!enabled()){
184+
return
185+
}
182186
objDir.mkdirs()
183187

184188
val plugin = ExecClang(project)

plugin/src/main/kotlin/co/touchlab/cklib/gradle/CompileToBitcodeExtension.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,21 @@ open class CompileToBitcodeExtension @Inject constructor(val project: Project) {
3232
it.description = "Compiles '$name' to bitcode for all targets"
3333
}.get()
3434

35-
val allTaskProviders = kmpExt.kotlinNativeTargets.filter { project.platformManager.isEnabled(it.konanTarget) }.map { knTarget ->
35+
val allTaskProviders = kmpExt.kotlinNativeTargets.map { knTarget ->
36+
37+
val compileKotlinTask = project.tasks.getByPath("compileKotlin${knTarget.name.capitalize()}")
3638

3739
val taskName = "${knTarget.name}${name.snakeCaseToCamelCase().capitalize()}"
3840

3941
val taskProvider = project.tasks.register(
4042
taskName,
4143
CompileToBitcode::class.java,
42-
srcDir, name, knTarget.konanTarget.name
44+
srcDir, name, knTarget.konanTarget.name, { project.platformManager.isEnabled(knTarget.konanTarget) }
4345
)
4446

4547
//tasks.getByName("compileKotlin${targetName.capitalize()}").dependsOn("${it.second}Quickjs")
46-
project.tasks.getByPath("compileKotlin${knTarget.name.capitalize()}")
48+
49+
compileKotlinTask
4750
.dependsOn(taskName)
4851

4952
taskProvider.configure { compileToBitcodeTask ->

plugin/src/main/kotlin/co/touchlab/cklib/gradle/reflection/PlatformManager.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,15 @@
1010

1111
package co.touchlab.cklib.gradle.reflection
1212

13+
import org.jetbrains.kotlin.konan.target.Distribution
1314
import org.jetbrains.kotlin.konan.target.KonanTarget
1415
import java.io.File
1516
import java.net.URLClassLoader
1617

1718
/**
1819
* Use reflection to grab what we want from the konan distribution
1920
*/
20-
class PlatformManager(konanHome: String) {
21+
class PlatformManager(dist: Distribution, konanHome:String) {
2122
private val kotlinNativeJar = "${konanHome}/konan/lib/kotlin-native.jar"
2223
private val pmClass:Class<*>
2324
private val blindDelegate:Any
@@ -26,8 +27,8 @@ class PlatformManager(konanHome: String) {
2627
val child = URLClassLoader(arrayOf(File(kotlinNativeJar).toURL()), this.javaClass.classLoader)
2728
pmClass = Class.forName("org.jetbrains.kotlin.konan.target.PlatformManager", true, child)
2829
blindDelegate = pmClass.declaredConstructors.find {
29-
it.parameters.size == 2 && it.parameters[1].type == String::class.java
30-
}!!.newInstance(konanHome, null)
30+
it.parameters.size == 2 && it.parameters[0].type == Distribution::class.java
31+
}!!.newInstance(dist, false)
3132
}
3233

3334
//targetManager(targetName).target

0 commit comments

Comments
 (0)