Skip to content

Commit acdea42

Browse files
committed
Turso support
Properly build binaries compilation fix for turso Fixes bump android target to 31 Update to sync build
1 parent 38d2d6d commit acdea42

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+3843
-376
lines changed

.github/workflows/ci.yml

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,3 +412,103 @@ jobs:
412412
name: android-logcat-${{ github.job }}
413413
path: example/android-logcat.txt
414414
if-no-files-found: ignore
415+
416+
ios-turso:
417+
runs-on: macos-latest
418+
steps:
419+
- name: Checkout
420+
uses: actions/checkout@v4
421+
422+
- name: Xcode Select
423+
run: sudo xcode-select -s /Applications/Xcode_16.4.app
424+
425+
- name: Turn on Turso
426+
run: |
427+
node ./scripts/turnOnTurso.js
428+
429+
- name: Setup
430+
uses: ./.github/actions/setup
431+
432+
- name: install bundler dependencies
433+
run: |
434+
cd example
435+
bundle install
436+
437+
- name: Cache cocoapods
438+
id: cocoapods-cache
439+
uses: actions/cache@v4
440+
with:
441+
path: |
442+
**/ios/Pods
443+
key: ${{ runner.os }}-cocoapods-${{ hashFiles('example/ios/Podfile.lock') }}
444+
restore-keys: |
445+
${{ runner.os }}-cocoapods-
446+
447+
- name: Install cocoapods
448+
run: |
449+
cd example/ios
450+
bundle exec pod install
451+
env:
452+
NO_FLIPPER: 1
453+
454+
- name: run tests
455+
run: |
456+
./scripts/test-ios.sh
457+
458+
android-turso:
459+
runs-on: ubuntu-latest
460+
timeout-minutes: 40
461+
steps:
462+
- uses: actions/checkout@v4
463+
464+
- run: node ./scripts/turnOnTurso.js
465+
466+
- name: Setup
467+
uses: ./.github/actions/setup
468+
469+
- name: Install JDK
470+
uses: actions/setup-java@v3
471+
with:
472+
distribution: "zulu"
473+
java-version: "17"
474+
475+
- name: Finalize Android SDK
476+
run: |
477+
/bin/bash -c "yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses > /dev/null"
478+
479+
- name: Cache Gradle
480+
uses: actions/cache@v4
481+
with:
482+
path: |
483+
~/.gradle/wrapper
484+
~/.gradle/caches
485+
key: ${{ runner.os }}-gradle-${{ hashFiles('example/android/gradle/wrapper/gradle-wrapper.properties') }}
486+
restore-keys: |
487+
${{ runner.os }}-gradle-
488+
489+
- name: Enable KVM
490+
run: |
491+
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
492+
sudo udevadm control --reload-rules
493+
sudo udevadm trigger --name-match=kvm
494+
495+
- name: Give execute permissions to script
496+
run: chmod +x ./scripts/test-android.sh
497+
498+
- name: run tests
499+
uses: reactivecircus/android-emulator-runner@v2
500+
with:
501+
api-level: 29
502+
emulator-options: -no-window -no-boot-anim -no-audio -no-snapshot-load
503+
script: |
504+
adb wait-for-device
505+
adb shell input keyevent 82
506+
./scripts/test-android.sh
507+
508+
- name: Upload Android diagnostics
509+
if: failure()
510+
uses: actions/upload-artifact@v4
511+
with:
512+
name: android-logcat-${{ github.job }}
513+
path: example/android-logcat.txt
514+
if-no-files-found: ignore

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,5 @@ android/c_sources
8989
# c_sources/
9090

9191
scripts/sqlite-vec-*
92+
turso/
93+
.tmp/

android/CMakeLists.txt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ if (USE_LIBSQL)
1515
include_directories(src/main/jniLibs/include)
1616
endif()
1717

18+
if (USE_TURSO)
19+
include_directories(src/main/tursoLibs/include)
20+
endif()
21+
1822
separate_arguments(SQLITE_FLAGS_LIST UNIX_COMMAND "${SQLITE_FLAGS}")
1923

2024
add_definitions(
@@ -52,6 +56,12 @@ elseif (USE_LIBSQL)
5256
add_definitions(
5357
-DOP_SQLITE_USE_LIBSQL=1
5458
)
59+
elseif (USE_TURSO)
60+
target_sources(${PACKAGE_NAME} PRIVATE ../cpp/turso_bridge.cpp)
61+
62+
add_definitions(
63+
-DOP_SQLITE_USE_TURSO=1
64+
)
5565
else()
5666
target_sources(${PACKAGE_NAME} PRIVATE ../cpp/sqlite3.c ../cpp/bridge.cpp)
5767
endif()
@@ -104,6 +114,22 @@ elseif (USE_LIBSQL)
104114
ReactAndroid::jsi
105115
fbjni::fbjni
106116
)
117+
elseif (USE_TURSO)
118+
cmake_path(SET TURSO_PATH ${CMAKE_CURRENT_SOURCE_DIR}/src/main/tursoLibs/${ANDROID_ABI}/libturso_sdk_kit.so NORMALIZE)
119+
add_library(turso_sdk_kit SHARED IMPORTED)
120+
set_target_properties(turso_sdk_kit PROPERTIES
121+
IMPORTED_LOCATION ${TURSO_PATH}
122+
IMPORTED_NO_SONAME TRUE
123+
)
124+
125+
target_link_libraries(
126+
${PACKAGE_NAME}
127+
turso_sdk_kit
128+
${LOG_LIB}
129+
ReactAndroid::reactnative
130+
ReactAndroid::jsi
131+
fbjni::fbjni
132+
)
107133
else ()
108134
target_link_libraries(
109135
${PACKAGE_NAME}

android/build.gradle

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ def reactNativeArchitectures() {
3434

3535
def useSQLCipher = false
3636
def useLibsql = false
37+
def useTurso = false
3738
def useCRSQLite = false
3839
def performanceMode = false
3940
def sqliteFlags = ""
@@ -79,12 +80,19 @@ if(opsqliteConfig) {
7980
sqliteFlags = opsqliteConfig["sqliteFlags"] ? opsqliteConfig["sqliteFlags"] : ""
8081
enableFTS5 = !!opsqliteConfig["fts5"]
8182
useLibsql = !!opsqliteConfig["libsql"]
83+
useTurso = !!opsqliteConfig["turso"]
8284
enableRtree = !!opsqliteConfig["rtree"]
8385
tokenizers = opsqliteConfig["tokenizers"] ? opsqliteConfig["tokenizers"] : []
8486
}
8587

88+
if(useLibsql && useTurso) {
89+
throw new GradleException("[OP-SQLITE] Error: libsql and turso backends are mutually exclusive.")
90+
}
91+
8692
if(useSQLCipher) {
8793
println "[OP-SQLITE] using sqlcipher."
94+
} else if(useTurso) {
95+
println "[OP-SQLITE] using turso backend."
8896
} else if(useLibsql) {
8997
println "[OP-SQLITE] using libsql. Report any issues to Turso"
9098
}
@@ -114,6 +122,10 @@ if(!tokenizers.isEmpty()) {
114122
throw new GradleException("[OP-SQLITE] Error: libsql does not support tokenizers. Please disable tokenizers or do not enable libsql.")
115123
}
116124

125+
if(useTurso) {
126+
throw new GradleException("[OP-SQLITE] Error: turso backend does not support tokenizers. Please disable tokenizers or do not enable turso.")
127+
}
128+
117129
println "[OP-SQLITE] Tokenizers enabled. Detected tokenizers: " + tokenizers
118130
}
119131

@@ -127,6 +139,7 @@ android {
127139
targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
128140

129141
buildConfigField "boolean", "USE_LIBSQL", "${useLibsql}"
142+
buildConfigField "boolean", "USE_TURSO", "${useTurso}"
130143

131144
externalNativeBuild {
132145
cmake {
@@ -138,6 +151,10 @@ android {
138151
cFlags += "-DOP_SQLITE_USE_LIBSQL=1"
139152
cppFlags += "-DOP_SQLITE_USE_LIBSQL=1"
140153
}
154+
if(useTurso) {
155+
cFlags += "-DOP_SQLITE_USE_TURSO=1"
156+
cppFlags += "-DOP_SQLITE_USE_TURSO=1"
157+
}
141158
if(useCRSQLite) {
142159
cFlags += "-DOP_SQLITE_USE_CRSQLITE=1"
143160
cppFlags += "-DOP_SQLITE_USE_CRSQLITE=1"
@@ -179,6 +196,7 @@ android {
179196
"-DUSE_SQLCIPHER=${useSQLCipher ? 1 : 0}",
180197
"-DUSE_CRSQLITE=${useCRSQLite ? 1 : 0}",
181198
"-DUSE_LIBSQL=${useLibsql ? 1 : 0}",
199+
"-DUSE_TURSO=${useTurso ? 1 : 0}",
182200
"-DUSE_SQLITE_VEC=${useSqliteVec ? 1 : 0}",
183201
"-DUSER_DEFINED_SOURCE_FILES=${sourceFiles}",
184202
"-DUSER_DEFINED_TOKENIZERS_HEADER_PATH='${tokenizersHeaderPath}'",
@@ -244,6 +262,9 @@ android {
244262
if (useLibsql) {
245263
srcDirs += 'src/main/jniLibs'
246264
}
265+
if (useTurso) {
266+
srcDirs += 'src/main/tursoLibs'
267+
}
247268
if (useCRSQLite) {
248269
srcDirs += 'src/main/libcrsqlite'
249270
}
60.1 MB
Binary file not shown.
45.5 MB
Binary file not shown.

0 commit comments

Comments
 (0)