1- import app.cash.sqldelight.core.capitalize
21import com.powersync.plugins.sonatype.setupGithubRepository
32import de.undercouch.gradle.tasks.download.Download
43import org.gradle.internal.os.OperatingSystem
54import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
65import org.jetbrains.kotlin.gradle.dsl.JvmTarget
76import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
87import org.jetbrains.kotlin.gradle.targets.jvm.tasks.KotlinJvmTest
9- import java.util.*
108
119plugins {
1210 alias(libs.plugins.kotlinMultiplatform)
@@ -140,6 +138,7 @@ kotlin {
140138 api(libs.kermit)
141139 }
142140
141+ androidMain.get()
143142 androidMain.dependencies {
144143 implementation(libs.ktor.client.okhttp)
145144 }
@@ -157,6 +156,7 @@ kotlin {
157156 implementation(libs.kotlin.test)
158157 implementation(libs.test.coroutines)
159158 implementation(libs.kermit.test)
159+ implementation(libs.test.turbine)
160160 }
161161 }
162162}
@@ -218,110 +218,6 @@ if (binariesAreProvided && crossArch) {
218218 error(" powersync.binaries.provided and powersync.binaries.cross-arch must not be both defined." )
219219}
220220
221- val getBinaries = if (binariesAreProvided) {
222- // Binaries for all OS must be provided (manually or by the CI) in binaries/desktop
223-
224- val verifyPowersyncBinaries = tasks.register(" verifyPowersyncBinaries" ) {
225- val directory = projectDir.resolve(" binaries/desktop" )
226- val binaries = listOf (
227- directory.resolve(" libpowersync-sqlite_aarch64.so" ),
228- directory.resolve(" libpowersync-sqlite_x64.so" ),
229- directory.resolve(" libpowersync-sqlite_aarch64.dylib" ),
230- directory.resolve(" libpowersync-sqlite_x64.dylib" ),
231- directory.resolve(" powersync-sqlite_x64.dll" ),
232- )
233- doLast {
234- binaries.forEach {
235- if (! it.exists()) error(" File $it does not exist" )
236- if (! it.isFile) error(" File $it is not a regular file" )
237- }
238- }
239- outputs.files(* binaries.toTypedArray())
240- }
241- verifyPowersyncBinaries
242- } else {
243- // Building locally for the current OS
244-
245- val localProperties = Properties ()
246- val localPropertiesFile = rootProject.file(" local.properties" )
247- if (localPropertiesFile.exists()) {
248- localPropertiesFile.inputStream().use { localProperties.load(it) }
249- }
250- val cmakeExecutable = localProperties.getProperty(" cmake.path" ) ? : " cmake"
251-
252- fun registerCMakeTasks (
253- suffix : String ,
254- vararg defines : String ,
255- ): TaskProvider <Exec > {
256- val cmakeConfigure = tasks.register<Exec >(" cmakeJvmConfigure${suffix.capitalize()} " ) {
257- dependsOn(unzipSQLiteSources)
258- group = " cmake"
259- workingDir = layout.buildDirectory.dir(" cmake/$suffix " ).get().asFile
260- inputs.files(
261- " src/jvmMain/cpp" ,
262- " src/jvmNative/cpp" ,
263- sqliteSrcFolder,
264- )
265- outputs.dir(workingDir)
266- executable = cmakeExecutable
267- args(listOf (file(" src/jvmMain/cpp/CMakeLists.txt" ).absolutePath, " -DSUFFIX=$suffix " , " -DCMAKE_BUILD_TYPE=Release" ) + defines.map { " -D$it " })
268- doFirst {
269- workingDir.mkdirs()
270- }
271- }
272-
273- val cmakeBuild = tasks.register<Exec >(" cmakeJvmBuild${suffix.capitalize()} " ) {
274- dependsOn(cmakeConfigure)
275- group = " cmake"
276- workingDir = layout.buildDirectory.dir(" cmake/$suffix " ).get().asFile
277- inputs.files(
278- " src/jvmMain/cpp" ,
279- " src/jvmNative/cpp" ,
280- sqliteSrcFolder,
281- workingDir,
282- )
283- outputs.dir(workingDir.resolve(if (os.isWindows) " output/Release" else " output" ))
284- executable = cmakeExecutable
285- args(" --build" , " ." , " --config" , " Release" )
286- }
287-
288- return cmakeBuild
289- }
290-
291- val (aarch64, x64) = when {
292- os.isMacOsX -> {
293- val aarch64 = registerCMakeTasks(" aarch64" , " CMAKE_OSX_ARCHITECTURES=arm64" )
294- val x64 = registerCMakeTasks(" x64" , " CMAKE_OSX_ARCHITECTURES=x86_64" )
295- aarch64 to x64
296- }
297- os.isLinux -> {
298- val aarch64 = registerCMakeTasks(" aarch64" , " CMAKE_C_COMPILER=aarch64-linux-gnu-gcc" , " CMAKE_CXX_COMPILER=aarch64-linux-gnu-g++" )
299- val x64 = registerCMakeTasks(" x64" , " CMAKE_C_COMPILER=x86_64-linux-gnu-gcc" , " CMAKE_CXX_COMPILER=x86_64-linux-gnu-g++" )
300- aarch64 to x64
301- }
302- os.isWindows -> {
303- val x64 = registerCMakeTasks(" x64" )
304- null to x64
305- }
306- else -> error(" Unknown operating system: $os " )
307- }
308-
309- val arch = System .getProperty(" os.arch" )
310- val cmakeJvmBuilds = when {
311- crossArch -> listOfNotNull(aarch64, x64)
312- arch == " aarch64" -> listOfNotNull(aarch64)
313- arch == " amd64" || arch == " x86_64" -> listOfNotNull(x64)
314- else -> error(" Unsupported architecture: $arch " )
315- }
316-
317- tasks.register<Copy >(" cmakeJvmBuild" ) {
318- dependsOn(cmakeJvmBuilds)
319- group = " cmake"
320- from(cmakeJvmBuilds)
321- into(binariesFolder.map { it.dir(" sqlite" ) })
322- }
323- }
324-
325221val downloadPowersyncDesktopBinaries = tasks.register<Download >(" downloadPowersyncDesktopBinaries" ) {
326222 val coreVersion = libs.versions.powersync.core.get()
327223 val linux_aarch64 = " https://github.com/powersync-ja/powersync-sqlite-core/releases/download/v$coreVersion /libpowersync_aarch64.so"
@@ -351,7 +247,7 @@ val downloadPowersyncDesktopBinaries = tasks.register<Download>("downloadPowersy
351247}
352248
353249tasks.named<ProcessResources >(kotlin.jvm().compilations[" main" ].processResourcesTaskName) {
354- from(getBinaries, downloadPowersyncDesktopBinaries)
250+ from(downloadPowersyncDesktopBinaries)
355251}
356252
357253// We want to build with recent JDKs, but need to make sure we support Java 8. https://jakewharton.com/build-on-latest-java-test-through-lowest-java/
0 commit comments