[K/N] Fix handling custom llvm and libffi distributions ^KT-63220

This commit is contained in:
Alexander Shabalin
2023-11-07 12:49:34 +01:00
committed by Space Team
parent eba1fdec1d
commit fe94876d9a
2 changed files with 30 additions and 3 deletions
@@ -19,7 +19,9 @@ import org.jetbrains.kotlin.konan.target.TargetDomainObjectContainer
import org.jetbrains.kotlin.konan.target.TargetWithSanitizer import org.jetbrains.kotlin.konan.target.TargetWithSanitizer
import org.jetbrains.kotlin.konan.util.DependencyProcessor import org.jetbrains.kotlin.konan.util.DependencyProcessor
import org.jetbrains.kotlin.utils.capitalized import org.jetbrains.kotlin.utils.capitalized
import java.nio.file.Paths
import javax.inject.Inject import javax.inject.Inject
import kotlin.io.path.name
/** /**
* Downloading native dependencies. * Downloading native dependencies.
@@ -109,7 +111,7 @@ abstract class NativeDependenciesDownloaderExtension @Inject constructor(private
} }
} }
val dependencies by loader::dependencies private val dependencies by loader::dependencies
val task = project.tasks.register<NativeDependenciesDownloader>("nativeDependencies${_target.name.capitalized}") { val task = project.tasks.register<NativeDependenciesDownloader>("nativeDependencies${_target.name.capitalized}") {
description = "Download dependencies for $_target" description = "Download dependencies for $_target"
@@ -132,6 +134,19 @@ abstract class NativeDependenciesDownloaderExtension @Inject constructor(private
builtBy(task) builtBy(task)
} }
} }
// Check for overridden distributions. They'll be absent from `depedencies` and
// so should be added manually.
listOf(loader.llvmHome!!, loader.libffiDir!!).forEach { dependency ->
val dependencyPath = Paths.get(dependency)
// If dependency is an absolute path - it's overridden.
if (dependencyPath.isAbsolute) {
artifact(dependencyPath.toFile()) {
name = dependencyPath.name
type = "directory"
extension = ""
}
}
}
} }
} }
} }
@@ -13,7 +13,19 @@ import org.gradle.api.attributes.Usage
import org.gradle.api.file.FileCollection import org.gradle.api.file.FileCollection
import org.gradle.kotlin.dsl.* import org.gradle.kotlin.dsl.*
import org.jetbrains.kotlin.konan.target.* import org.jetbrains.kotlin.konan.target.*
import java.io.File
import java.nio.file.Paths
import javax.inject.Inject import javax.inject.Inject
import kotlin.io.path.isSameFileAs
private fun File.matchesDependency(dependency: String): Boolean {
val path = Paths.get(dependency)
return if (path.isAbsolute) {
path.isSameFileAs(this.toPath())
} else {
this.name == dependency
}
}
/** /**
* Consuming native dependencies. * Consuming native dependencies.
@@ -47,11 +59,11 @@ abstract class NativeDependenciesExtension @Inject constructor(private val proje
} }
private val llvmFileCollection: FileCollection = nativeDependencies.incoming.artifacts.artifactFiles.filter { private val llvmFileCollection: FileCollection = nativeDependencies.incoming.artifacts.artifactFiles.filter {
it.name == platformManager.hostPlatform.llvmHome it.matchesDependency(platformManager.hostPlatform.llvmHome!!)
} }
private val libffiFileCollection: FileCollection = nativeDependencies.incoming.artifacts.artifactFiles.filter { private val libffiFileCollection: FileCollection = nativeDependencies.incoming.artifacts.artifactFiles.filter {
it.name == platformManager.hostPlatform.libffiDir it.matchesDependency(platformManager.hostPlatform.libffiDir!!)
} }
/** /**