-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Description
This is my project layout:
$ tree -L 1
.
├── Cargo.lock
├── Cargo.toml
├── desktop
│ ├── build.gradle.kts
│ ├── composeApp
│ ├── gradle
│ ├── gradle.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── local.properties
│ ├── README.md
│ ├── settings.gradle.kts
│ └── uniffi-kotlin-multiplatform-bindings
├── target
├── ugl-core
The crate that uses the uniffi proc macros is ugl-core. I added the uniffi gradle plugin as a git submodule. These are the gradle files:
// settings.gradle.kts
rootProject.name = "UnifiedGameLauncher"
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
pluginManagement {
includeBuild("uniffi-kotlin-multiplatform-bindings/build-logic")
repositories {
google {
mavenContent {
includeGroupAndSubgroups("androidx")
includeGroupAndSubgroups("com.android")
includeGroupAndSubgroups("com.google")
}
}
mavenCentral()
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositories {
google {
mavenContent {
includeGroupAndSubgroups("androidx")
includeGroupAndSubgroups("com.android")
includeGroupAndSubgroups("com.google")
}
}
mavenCentral()
}
}
plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0"
}
include(":composeApp")
// build.gradle.kts
plugins {
// this is necessary to avoid the plugins to be loaded multiple times
// in each subproject's classloader
alias(libs.plugins.composeMultiplatform) apply false
alias(libs.plugins.composeCompiler) apply false
alias(libs.plugins.kotlinMultiplatform) apply false
}
// composeApp/settings.gradle.kts
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.composeMultiplatform)
alias(libs.plugins.composeCompiler)
alias(libs.plugins.composeHotReload)
// Required for FFI bindings.
id("org.jetbrains.kotlin.plugin.atomicfu") version "2.1.21"
id("io.gitlab.trixnity.cargo.kotlin.multiplatform") version "0.6.0"
id("io.gitlab.trixnity.uniffi.kotlin.multiplatform") version "0.6.0"
}
// Configures the linking process between Rust and Kotlin.
cargo {
// The Cargo package is located in a `rust` subdirectory.
packageDirectory = layout.projectDirectory.dir("..")
}
uniffi {
formatCode = true
generateFromLibrary {
namespace = "ugl-core"
}
}
kotlin {
jvm("desktop")
sourceSets {
val desktopMain by getting
commonMain.dependencies {
implementation(compose.runtime)
implementation(compose.foundation)
implementation(compose.material3)
implementation(compose.ui)
implementation(compose.components.resources)
implementation(compose.components.uiToolingPreview)
implementation(libs.androidx.lifecycle.viewmodel)
implementation(libs.androidx.lifecycle.runtimeCompose)
}
commonTest.dependencies {
implementation(libs.kotlin.test)
}
desktopMain.dependencies {
implementation(compose.desktop.currentOs)
implementation(libs.kotlinx.coroutinesSwing)
}
}
}
compose.desktop {
application {
mainClass = "io.MainKt"
nativeDistributions {
targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
packageName = "io"
packageVersion = "1.0.0"
}
}
}I get this error:
* Exception is:
org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ':composeApp'.
[...]
Caused by: java.util.NoSuchElementException: Collection contains no element matching the predicate.
at io.gitlab.trixnity.gradle.cargo.CargoPackage.<init>(CargoPackage.kt:162)
at io.gitlab.trixnity.gradle.cargo.dsl.CargoExtension.cargoPackage$lambda$1(CargoExtension.kt:47)
at io.gitlab.trixnity.gradle.cargo.dsl.CargoExtension.cargoPackage$lambda$2(CargoExtension.kt:46)
at org.gradle.api.internal.provider.BiProvider.calculateOwnValue(BiProvider.java:79)
at org.gradle.api.internal.provider.AbstractMinimalProvider.calculateValue(AbstractMinimalProvider.java:115)
at org.gradle.api.internal.provider.TransformBackedProvider.calculateOwnValue(TransformBackedProvider.java:81)
at org.gradle.api.internal.provider.AbstractMinimalProvider.calculateValue(AbstractMinimalProvider.java:115)
at org.gradle.api.internal.provider.AbstractMinimalProvider.withFinalValue(AbstractMinimalProvider.java:168)
at org.gradle.api.internal.provider.DefaultProperty.finalValue(DefaultProperty.java:162)
at org.gradle.api.internal.provider.DefaultProperty.finalValue(DefaultProperty.java:33)
at org.gradle.api.internal.provider.AbstractProperty.finalizeNow(AbstractProperty.java:281)
at org.gradle.api.internal.provider.AbstractProperty.lambda$beforeRead$0(AbstractProperty.java:276)
at org.gradle.api.internal.provider.ValueState.finalizeOnReadIfNeeded(ValueState.java:139)
at org.gradle.api.internal.provider.AbstractProperty.beforeRead(AbstractProperty.java:276)
at org.gradle.api.internal.provider.AbstractProperty.beforeRead(AbstractProperty.java:268)
at org.gradle.api.internal.provider.AbstractProperty.calculateOwnValue(AbstractProperty.java:162)
at org.gradle.api.internal.provider.AbstractMinimalProvider.calculateOwnPresentValue(AbstractMinimalProvider.java:80)
at org.gradle.api.internal.provider.AbstractMinimalProvider.get(AbstractMinimalProvider.java:100)
at io.gitlab.trixnity.gradle.cargo.CargoPlugin.checkRequiredCrateTypes(CargoPlugin.kt:176)
at io.gitlab.trixnity.gradle.cargo.CargoPlugin.applyAfterEvaluate(CargoPlugin.kt:86)
at io.gitlab.trixnity.gradle.cargo.CargoPlugin.apply$lambda$6(CargoPlugin.kt:81)
at io.gitlab.trixnity.gradle.cargo.CargoPlugin.apply$lambda$7(CargoPlugin.kt:78)
It looks like the plugin cannot resolve: 1) the cargo workspace properly 2) the fact that the workspace is in the parent folder. I tried symlinking the workspace itself into desktop, but that did also through errno=2 file not found errors.
Any idea what is going wrong here?
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels