Skip to content

Commit 6111bf9

Browse files
committed
Resolve llvm path lazily to fix the konan file not found issue on the first time downloading Kotlin Native compiler.
(cherry picked from commit ddc941c)
1 parent ad25931 commit 6111bf9

File tree

3 files changed

+23
-14
lines changed

3 files changed

+23
-14
lines changed

ir-printer-gradle-plugin/src/main/java/com/bennyhuo/kotlin/ir/printer/gradle/IrPrinterGradlePlugin.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,16 @@ class IrPrinterGradlePlugin : KotlinCompilerPluginSupportPlugin {
4242
) {
4343
val konanTempDir = kotlinCompilation.getOrConfigKonanTempDir()
4444
val konanConfig = KonanConfig(project)
45-
val llvmDisPath = File(konanConfig.llvmHome, "bin/llvm-dis").absolutePath
45+
// lazily resolve this path after Kotlin Native compiler setup.
46+
val llvmDisPathLazy = lazy {
47+
File(konanConfig.llvmHome, "bin/llvm-dis").absolutePath
48+
}
4649

4750
target.binaries.forEach { binary ->
4851
val taskName = "disassemble${binary.name.capitalized()}${target.targetName.capitalized()}Bitcode"
4952
project.tasks.register(taskName, LlvmDisTask::class.java) {
5053
it.dependsOn(binary.linkTaskName)
51-
it.llvmDisPath.set(llvmDisPath)
54+
it.llvmDisPath.set(llvmDisPathLazy)
5255
it.konanTempDir.set(konanTempDir)
5356
it.outputPath.set(project.output(target, "llvm-ir"))
5457
}

ir-printer-gradle-plugin/src/main/java/com/bennyhuo/kotlin/ir/printer/gradle/KonanConfig.kt

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,28 @@ val Project.konanDataDir: String?
1414
val Project.nativeHome: String?
1515
get() = findProperty("kotlin.native.home")?.toString()
1616

17-
class KonanConfig(val project: Project) {
18-
val konanHome: File = (project.konanDataDir?.let { NativeCompilerDownloader(project).compilerDirectory }
17+
class KonanConfig(project: Project) {
18+
val konanDataDir = project.konanDataDir
19+
20+
val konanHome: File = (konanDataDir?.let { NativeCompilerDownloader(project).compilerDirectory }
1921
?: project.nativeHome?.let { project.file(it) }
2022
?: NativeCompilerDownloader(project).compilerDirectory).absoluteFile
2123

22-
val konanProperties = Properties().apply {
23-
project.file("${konanHome}/konan/konan.properties").inputStream().use(::load)
24+
val konanProperties by lazy {
25+
Properties().apply {
26+
File("${konanHome}/konan/konan.properties").inputStream().use(::load)
27+
}
2428
}
2529

26-
val dependenciesRoot: File = DependencyDirectories.getDependenciesRoot(project.konanDataDir)
30+
val dependenciesRoot = DependencyDirectories.getDependenciesRoot(konanDataDir)
2731

28-
val llvmHome: File = File(
29-
dependenciesRoot,
30-
konanProperties.getProperty("llvm.${HostManager.host.name}.dev")
31-
?: throw Exception("Cannot find llvm home for current target: ${HostManager.host}")
32-
)
32+
val llvmHome: File by lazy {
33+
File(
34+
dependenciesRoot,
35+
konanProperties.getProperty("llvm.${HostManager.host.name}.dev")
36+
?: throw Exception("Cannot find llvm home for current target: ${HostManager.host}")
37+
)
38+
}
3339
}
3440

3541
fun KotlinCompilation<*>.getOrConfigKonanTempDir(): String {

ir-printer-gradle-plugin/src/main/java/com/bennyhuo/kotlin/ir/printer/gradle/LlvmDisTask.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ abstract class LlvmDisTask : DefaultTask() {
2323
}
2424

2525
@get:Input
26-
abstract val llvmDisPath: Property<String>
26+
abstract val llvmDisPath: Property<Lazy<String>>
2727

2828
@get:InputDirectory
2929
@get:PathSensitive(PathSensitivity.RELATIVE)
@@ -36,7 +36,7 @@ abstract class LlvmDisTask : DefaultTask() {
3636
fun run() {
3737
val inputDir = File(konanTempDir.get())
3838
inputDir.list()?.filter { it.endsWith(".bc") }?.forEach {
39-
val result = executeCommand("${llvmDisPath.get()} $it", inputDir, logger)
39+
val result = executeCommand("${llvmDisPath.get().value} $it", inputDir, logger)
4040
if(!result.isOk) {
4141
throw GradleException("Failed to disassemble $it.")
4242
}

0 commit comments

Comments
 (0)