[K/N] Refactor :kotlin-native:dependencies

Move K/N dependencies handling logic into gradle plugins:

`NativeDependenciesDownloader` is instantiated in
`:kotlin-native:dependencies` and provides a single configuration that
contains all directories with the dependencies. The configuration has
a variant for each target.

`NativeDependencies` is instantiated by projects that require native
dependencies (i.e. previously used to depend on
`:kotlin-native:dependencies:update`). This plugin creates a configuration
that by default depends on `:kotlin-native:dependencies`. Its extension
provides `llvmDependency`, `libffiDependency`, `hostPlatformDependency`,
`targetDependency()` to depend on the parts needed for the project and
provides accessors `llvmPath`, `libffiPath`, `hostPlatform` that are
safe to use during configuration time, but which do not automatically
resolve those dependencies.

`llvmDir`, `*LibffiDir` properties on `:kotlin-native` are removed
completely, as their use is replaced by `NativeDependencies`. As a
consequence, `evaluationDependsOn(":kotlin-native:dependencies")` is
also gone.

All direct dependencies on `:kotlin-native:dependencies:update` are
replaced with dependencies on specific parts via `NativeDependencies`
This commit is contained in:
Alexander Shabalin
2023-08-28 11:55:32 +02:00
committed by Space Team
parent 9de791b9ac
commit 4922223bec
23 changed files with 519 additions and 186 deletions
@@ -25,6 +25,7 @@ buildscript {
apply plugin: 'konan'
apply plugin: 'kotlin'
apply plugin: 'kotlin.native.build-tools-conventions'
apply plugin: 'native-dependencies'
configurations {
cli_bc
@@ -258,7 +259,7 @@ Task linkTest(String name, Closure<KonanLinkTest> configureClosure) {
* Creates a task for a dynamic test. Configures runner and adds library and test build tasks.
*/
Task dynamicTest(String name, Closure<KonanDynamicTest> configureClosure) {
return KotlinNativeTestKt.createTest(project, name, KonanDynamicTest) { task ->
return KotlinNativeTestKt.createTest(project, name, KonanDynamicTest) { KonanDynamicTest task ->
task.configure(configureClosure)
if (task.enabled) {
konanArtifacts {
@@ -284,6 +285,8 @@ Task dynamicTest(String name, Closure<KonanDynamicTest> configureClosure) {
}
def buildTask = UtilsKt.findKonanBuildTask(project, name, target)
UtilsKt.dependsOnDist(buildTask)
task.dependsOn(nativeDependencies.llvmDependency)
task.dependsOn(nativeDependencies.targetDependency(target))
}
}
}
@@ -3737,6 +3740,8 @@ int customCompare(const char* str1, const char* str2) {
void createInterop(String name, Closure conf) {
konanArtifacts {
interop(name, targets: [target.name]) {
dependsOn(nativeDependencies.llvmDependency)
dependsOn(nativeDependencies.targetDependency(target))
conf(it)
noDefaultLibs(true)
noEndorsedLibs(true)
@@ -4126,7 +4131,7 @@ createInterop("exceptions_cCallback") {
* Creates a task for the interop test. Configures runner and adds library and test build tasks.
*/
Task interopTestBase(String name, boolean multiFile, boolean interop2ForMainOnly, Closure<KonanInteropTest> configureClosure) {
return KotlinNativeTestKt.createTest(project, name, KonanInteropTest) { task ->
return KotlinNativeTestKt.createTest(project, name, KonanInteropTest) { KonanInteropTest task ->
task.configure(configureClosure)
if (task.enabled) {
konanArtifacts {
@@ -4167,6 +4172,8 @@ Task interopTestBase(String name, boolean multiFile, boolean interop2ForMainOnly
extraOpts project.globalTestArgs
}
}
task.dependsOn(nativeDependencies.llvmDependency)
task.dependsOn(nativeDependencies.targetDependency(target))
}
}
}
@@ -5846,7 +5853,7 @@ pluginTest("runtime_basic_init", "nopPlugin") {
Task fileCheckTest(String name, Closure<FileCheckTest> configureClosure) {
return project.tasks.create(name, FileCheckTest) { task ->
return project.tasks.create(name, FileCheckTest) { FileCheckTest task ->
task.configure(configureClosure)
task.llvmIr = project.file("$testOutputFileCheck/$name/$target/out.${task.phaseToCheck}.ll")
@@ -5904,6 +5911,7 @@ Task fileCheckTest(String name, Closure<FileCheckTest> configureClosure) {
}
UtilsKt.dependsOnKonanBuildingTask(task, name, target)
}
task.dependsOn(nativeDependencies.llvmDependency)
}
}
}