@@ -9,29 +9,42 @@ if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0")
9
9
# We can't really ask users to use a cmake that recent, so there's this if here.
10
10
FetchContent_Declare (
11
11
sqlite3
12
- # NOTE: When changing this, also update `test/wasm/sqlite3_test.dart`
13
- URL https://sqlite.org/2024/sqlite-autoconf-3460000.tar.gz
12
+ URL https://sqlite.org/2023/sqlite-autoconf-3440000.tar.gz
14
13
DOWNLOAD_EXTRACT_TIMESTAMP NEW
15
14
)
16
15
else ()
17
16
FetchContent_Declare (
18
17
sqlite3
19
- # NOTE: When changing this, also update `test/wasm/sqlite3_test.dart`
20
- URL https://sqlite.org/2024/sqlite-autoconf-3460000.tar.gz
18
+ URL https://sqlite.org/2023/sqlite-autoconf-3440000.tar.gz
21
19
)
22
20
endif ()
23
21
24
22
FetchContent_MakeAvailable (sqlite3 )
25
23
26
24
set (wasm_visibility "__attribute__((visibility(\" default\" )))" )
27
25
26
+ get_filename_component (RS_LIB_DIR "${CMAKE_BINARY_DIR} /../../powersync-sqlite-core/" ABSOLUTE )
27
+ set (RS_LIB "powersync" )
28
+ set (RS_WASM_TGT "wasm32-wasi" )
29
+ set (RS_WASM_TGT_DIR "${RS_LIB_DIR} /target/${RS_WASM_TGT} " )
30
+
31
+ set (RS_RELEASE_OUT "${RS_WASM_TGT_DIR} /wasm/" )
32
+ set (RS_RELEASE_OUT_DEPS "${RS_WASM_TGT_DIR} /wasm/deps" )
33
+ set (RS_RELEASE_EXTENSION_OUT "${RS_RELEASE_OUT} /powersync-extension.o" )
34
+ set (RS_DEBUG_BC "${RS_WASM_TGT_DIR} /debug/deps/${RS_LIB} .bc" )
35
+ set (RS_BUILD_COMMAND "cargo build -p powersync_loadable --profile wasm --no-default-features --features \" powersync_core/static powersync_core/omit_load_extension sqlite_nostd/static sqlite_nostd/omit_load_extension\" -Z build-std=panic_abort,core,alloc --target ${RS_WASM_TGT} " )
36
+
37
+ file (GLOB BYTECODE_FILES "${RS_WASM_TGT_DIR} /wasm/deps/*.bc" )
38
+ file (GLOB OBJ_FILES "${RS_WASM_TGT_DIR} /wasm/deps/*.o" CONFIGURE_DEPENDS "*.o" )
39
+
28
40
macro (base_sqlite3_target name )
29
41
add_executable (${name}
30
42
"${sqlite3_SOURCE_DIR} /sqlite3.c"
31
43
os_web.c
32
44
helpers.c
33
45
)
34
46
47
+ target_link_libraries (${name} ${RS_RELEASE_EXTENSION_OUT} )
35
48
target_link_options (${name} PRIVATE -nostartfiles -Wl,--import-memory -Wl,--no-entry -Wl,--export-dynamic )
36
49
target_include_directories (${name} PRIVATE "${PROJECT_SOURCE_DIR} /" )
37
50
target_include_directories (${name} PRIVATE ${sqlite3_SOURCE_DIR} )
@@ -42,6 +55,24 @@ macro(base_sqlite3_target name)
42
55
set_property (TARGET ${name} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE )
43
56
endmacro ()
44
57
58
+ # Script to use llc to get object code from bytecode
59
+ set (objectcode_script "${CMAKE_CURRENT_BINARY_DIR} /loop_objectcode_script.sh" )
60
+ file (WRITE ${objectcode_script}
61
+ "cd ${RS_RELEASE_OUT_DEPS} \n "
62
+ "for filename in *.bc; do llc -march=wasm32 -filetype=obj $filename -o $filename.o; done\n "
63
+ "wasm-ld -relocatable *.o -o ../powersync-extension.o"
64
+ )
65
+
66
+ add_custom_target (
67
+ powersync_core_bytecode
68
+ COMMAND ${CMAKE_COMMAND} -E env
69
+ "RUSTFLAGS=--emit=llvm-bc -C linker=true"
70
+ cargo build -p powersync_loadable --profile wasm --no-default-features --features \"powersync_core/static powersync_core/omit_load_extension sqlite_nostd/static sqlite_nostd/omit_load_extension\" -Z build-std=panic_abort,core,alloc --target ${RS_WASM_TGT}
71
+ WORKING_DIRECTORY ${RS_LIB_DIR}
72
+ # Converts bytecode to wasm object files
73
+ COMMAND sh ${objectcode_script}
74
+ )
75
+
45
76
base_sqlite3_target(sqlite3_debug)
46
77
file(DOWNLOAD https://raw.githubusercontent.com/sqlite/sqlite/master/src/test_vfstrace.c " ${CMAKE_BINARY_DIR} /vfstrace.c ")
47
78
target_sources(sqlite3_debug PRIVATE " ${CMAKE_BINARY_DIR} /vfstrace.c ")
@@ -58,7 +89,10 @@ add_custom_command(TARGET sqlite3_opt POST_BUILD
58
89
COMMAND wasm-opt ${CMAKE_CURRENT_BINARY_DIR} /sqlite3.dce.wasm -O4 -o ${CMAKE_CURRENT_BINARY_DIR} /sqlite3.wasm
59
90
)
60
91
92
+ add_dependencies(sqlite3_opt powersync_core_bytecode)
93
+ add_dependencies(sqlite3_debug powersync_core_bytecode)
94
+
61
95
add_custom_target(output)
62
- add_custom_command (TARGET output COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR} /sqlite3.wasm ${PROJECT_SOURCE_DIR} /../../example/web/sqlite3.wasm )
96
+ add_custom_command(TARGET output COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR} /sqlite3.wasm ${PROJECT_SOURCE_DIR} /../../example/web/sqlite3.wasm DEPENDS )
63
97
add_custom_command(TARGET output COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR} /sqlite3.debug.wasm ${PROJECT_SOURCE_DIR} /../../example/web/sqlite3.debug.wasm)
64
- add_dependencies (output sqlite3_debug sqlite3_opt )
98
+ add_dependencies(output sqlite3_debug sqlite3_opt powersync_core_bytecode )
0 commit comments