@@ -9,29 +9,42 @@ if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0")
99 # We can't really ask users to use a cmake that recent, so there's this if here.
1010 FetchContent_Declare(
1111 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
1413 DOWNLOAD_EXTRACT_TIMESTAMP NEW
1514 )
1615else ()
1716 FetchContent_Declare(
1817 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
2119 )
2220endif ()
2321
2422FetchContent_MakeAvailable(sqlite3)
2523
2624set (wasm_visibility "__attribute__((visibility(\" default\" )))" )
2725
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+
2840macro (base_sqlite3_target name )
2941 add_executable (${name}
3042 "${sqlite3_SOURCE_DIR} /sqlite3.c"
3143 os_web.c
3244 helpers.c
3345 )
3446
47+ target_link_libraries (${name} ${RS_RELEASE_EXTENSION_OUT} )
3548 target_link_options (${name} PRIVATE -nostartfiles -Wl,--import-memory -Wl,--no -entry -Wl,--export-dynamic)
3649 target_include_directories (${name} PRIVATE "${PROJECT_SOURCE_DIR} /" )
3750 target_include_directories (${name} PRIVATE ${sqlite3_SOURCE_DIR} )
@@ -42,6 +55,24 @@ macro(base_sqlite3_target name)
4255 set_property (TARGET ${name} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE )
4356endmacro ()
4457
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+
4576base_sqlite3_target(sqlite3_debug)
4677file (DOWNLOAD https://raw.githubusercontent.com/sqlite/sqlite/master/src/test_vfstrace.c "${CMAKE_BINARY_DIR} /vfstrace.c" )
4778target_sources (sqlite3_debug PRIVATE "${CMAKE_BINARY_DIR} /vfstrace.c" )
@@ -58,7 +89,10 @@ add_custom_command(TARGET sqlite3_opt POST_BUILD
5889 COMMAND wasm-opt ${CMAKE_CURRENT_BINARY_DIR} /sqlite3.dce.wasm -O4 -o ${CMAKE_CURRENT_BINARY_DIR} /sqlite3.wasm
5990)
6091
92+ add_dependencies (sqlite3_opt powersync_core_bytecode)
93+ add_dependencies (sqlite3_debug powersync_core_bytecode)
94+
6195add_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 )
6397add_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