Specify which .def file is used between simulators and ios Devices

This commit is contained in:
Vitor Pamplona
2026-03-16 17:46:20 -04:00
parent 7f61b4819b
commit f708f6c265
2 changed files with 34 additions and 12 deletions
+34 -9
View File
@@ -65,19 +65,36 @@ kotlin {
val xcfName = "quartz-kmpKit"
val libsodiumPath = project.file("src/nativeInterop/libsodium")
val libsodiumHeaderFilesPath = project.file("$libsodiumPath/include/sodium")
val libsodiumDefFile = project.file("src/nativeInterop/cinterop/Clibsodium.def")
// Generate target-specific Libsodium definition files for creating native bindings.
// Device (iosArm64) uses libsodium.a, simulator targets use libsodium-simulator.a.
val libsodiumDeviceDefFile =
project.layout.buildDirectory
.file("cinterop/Clibsodium-device.def")
.get()
.asFile
val libsodiumSimulatorDefFile =
project.layout.buildDirectory
.file("cinterop/Clibsodium-simulator.def")
.get()
.asFile
// This generates the Libsodium definition file, necessary for creating native bindings(a Kotlin API) for libsodium(for iOS).
val libsodiumDefFileGeneration =
tasks.register("GenerateSodiumCinteropFile") {
outputs.file(libsodiumDefFile)
outputs.files(libsodiumDeviceDefFile, libsodiumSimulatorDefFile)
doLast {
if (!libsodiumDefFile.exists()) {
libsodiumDefFile.parentFile.mkdirs()
libsodiumDefFile.writeText("package = Clibsodium\n")
libsodiumDefFile.appendText("staticLibraries = libsodium.a libsodium-simulator.a\n")
libsodiumDefFile.appendText("libraryPaths = ${libsodiumPath.absolutePath}/ios/lib ${libsodiumPath.absolutePath}/ios-simulators/lib\n")
}
libsodiumDeviceDefFile.parentFile.mkdirs()
libsodiumDeviceDefFile.writeText(
"package = Clibsodium\n" +
"staticLibraries = libsodium.a\n" +
"libraryPaths = ${libsodiumPath.absolutePath}/ios/lib\n",
)
libsodiumSimulatorDefFile.writeText(
"package = Clibsodium\n" +
"staticLibraries = libsodium-simulator.a\n" +
"libraryPaths = ${libsodiumPath.absolutePath}/ios-simulators/lib\n",
)
}
}
@@ -85,10 +102,12 @@ kotlin {
iosArm64(),
iosSimulatorArm64(),
).forEach { target ->
val isSimulator = target.name != "iosArm64"
val defFile = if (isSimulator) libsodiumSimulatorDefFile else libsodiumDeviceDefFile
target.compilations.getByName("main") {
val clibsodium by cinterops.creating {
definitionFile = libsodiumDefFile
definitionFile = defFile
packageName = "Clibsodium"
headers(
@@ -120,6 +139,9 @@ kotlin {
}
iosArm64 {
binaries.all {
linkerOpts("-L${libsodiumPath.absolutePath}/ios/lib", "-lsodium")
}
binaries.framework {
baseName = xcfName
binaryOption("bundleId", "com.vitorpamplona.quartz")
@@ -127,6 +149,9 @@ kotlin {
}
iosSimulatorArm64 {
binaries.all {
linkerOpts("-L${libsodiumPath.absolutePath}/ios-simulators/lib", "-lsodium-simulator")
}
binaries.framework {
baseName = xcfName
binaryOption("bundleId", "com.vitorpamplona.quartz")
@@ -1,3 +0,0 @@
package = Clibsodium
staticLibraries = libsodium.a libsodium-simulator.a
libraryPaths = src/nativeInterop/libsodium/ios/lib src/nativeInterop/libsodium/ios-simulators/lib