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 xcfName = "quartz-kmpKit"
val libsodiumPath = project.file("src/nativeInterop/libsodium") val libsodiumPath = project.file("src/nativeInterop/libsodium")
val libsodiumHeaderFilesPath = project.file("$libsodiumPath/include/sodium") 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). // This generates the Libsodium definition file, necessary for creating native bindings(a Kotlin API) for libsodium(for iOS).
val libsodiumDefFileGeneration = val libsodiumDefFileGeneration =
tasks.register("GenerateSodiumCinteropFile") { tasks.register("GenerateSodiumCinteropFile") {
outputs.file(libsodiumDefFile) outputs.files(libsodiumDeviceDefFile, libsodiumSimulatorDefFile)
doLast { doLast {
if (!libsodiumDefFile.exists()) { libsodiumDeviceDefFile.parentFile.mkdirs()
libsodiumDefFile.parentFile.mkdirs() libsodiumDeviceDefFile.writeText(
libsodiumDefFile.writeText("package = Clibsodium\n") "package = Clibsodium\n" +
libsodiumDefFile.appendText("staticLibraries = libsodium.a libsodium-simulator.a\n") "staticLibraries = libsodium.a\n" +
libsodiumDefFile.appendText("libraryPaths = ${libsodiumPath.absolutePath}/ios/lib ${libsodiumPath.absolutePath}/ios-simulators/lib\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(), iosArm64(),
iosSimulatorArm64(), iosSimulatorArm64(),
).forEach { target -> ).forEach { target ->
val isSimulator = target.name != "iosArm64"
val defFile = if (isSimulator) libsodiumSimulatorDefFile else libsodiumDeviceDefFile
target.compilations.getByName("main") { target.compilations.getByName("main") {
val clibsodium by cinterops.creating { val clibsodium by cinterops.creating {
definitionFile = libsodiumDefFile definitionFile = defFile
packageName = "Clibsodium" packageName = "Clibsodium"
headers( headers(
@@ -120,6 +139,9 @@ kotlin {
} }
iosArm64 { iosArm64 {
binaries.all {
linkerOpts("-L${libsodiumPath.absolutePath}/ios/lib", "-lsodium")
}
binaries.framework { binaries.framework {
baseName = xcfName baseName = xcfName
binaryOption("bundleId", "com.vitorpamplona.quartz") binaryOption("bundleId", "com.vitorpamplona.quartz")
@@ -127,6 +149,9 @@ kotlin {
} }
iosSimulatorArm64 { iosSimulatorArm64 {
binaries.all {
linkerOpts("-L${libsodiumPath.absolutePath}/ios-simulators/lib", "-lsodium-simulator")
}
binaries.framework { binaries.framework {
baseName = xcfName baseName = xcfName
binaryOption("bundleId", "com.vitorpamplona.quartz") 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