@@ -8,6 +8,9 @@ SQLITE3 ?= sqlite3
88# set curl version to download and build
99CURL_VERSION ?= 8.12.1
1010
11+ # set sqlite version for WASM static build
12+ SQLITE_VERSION ?= 3.50.1
13+
1114# Set default platform if not specified
1215ifeq ($(OS ) ,Windows_NT)
1316 PLATFORM := windows
@@ -47,6 +50,7 @@ CURL_DIR = curl
4750CURL_SRC = $(CURL_DIR ) /src/curl-$(CURL_VERSION )
4851COV_DIR = coverage
4952CUSTOM_CSS = $(TEST_DIR ) /sqliteai.css
53+ BUILD_WASM = build/wasm
5054
5155SRC_FILES = $(wildcard $(SRC_DIR ) /* .c)
5256TEST_SRC = $(wildcard $(TEST_DIR ) /* .c)
@@ -110,6 +114,8 @@ else ifeq ($(PLATFORM),isim)
110114 T_LDFLAGS = -framework Security
111115 CFLAGS += -arch x86_64 -arch arm64 $(SDK )
112116 CURL_CONFIG = --host=arm64-apple-darwin --with-secure-transport CFLAGS="-arch x86_64 -arch arm64 -isysroot $$(xcrun --sdk iphonesimulator --show-sdk-path ) -miphonesimulator-version-min=11.0"
117+ else ifeq ($(PLATFORM),wasm)
118+ TARGET := $(DIST_DIR ) /sqlite-wasm.zip
113119else # linux
114120 TARGET := $(DIST_DIR ) /cloudsync.so
115121 LDFLAGS += -shared -lssl -lcrypto
@@ -127,7 +133,7 @@ endif
127133# Windows .def file generation
128134$(DEF_FILE ) :
129135ifeq ($(PLATFORM ) ,windows)
130- @echo "LIBRARY js .dll" > $@
136+ @echo "LIBRARY cloudsync .dll" > $@
131137 @echo "EXPORTS" >> $@
132138 @echo " sqlite3_cloudsync_init" >> $@
133139endif
@@ -139,12 +145,29 @@ $(shell mkdir -p $(BUILD_DIRS) $(DIST_DIR))
139145extension : $(TARGET )
140146all : $(TARGET )
141147
148+ ifneq ($(PLATFORM ) ,wasm)
142149# Loadable library
143150$(TARGET ) : $(RELEASE_OBJ ) $(DEF_FILE ) $(CURL_LIB )
144151 $(CC ) $(RELEASE_OBJ ) $(DEF_FILE ) -o $@ $(LDFLAGS )
145152ifeq ($(PLATFORM ) ,windows)
146153 # Generate import library for Windows
147- dlltool -D $@ -d $(DEF_FILE) -l $(DIST_DIR)/js.lib
154+ dlltool -D $@ -d $(DEF_FILE) -l $(DIST_DIR)/cloudsync.lib
155+ endif
156+ else
157+ # WASM build
158+ EMSDK := $(BUILD_WASM ) /emsdk
159+ $(EMSDK ) :
160+ git clone https://github.com/emscripten-core/emsdk.git $(EMSDK )
161+ cd $(EMSDK ) && ./emsdk install latest && ./emsdk activate latest && source ./emsdk_env.sh
162+
163+ SQLITE_SRC := $(BUILD_WASM ) /sqlite
164+ $(SQLITE_SRC ) : $(EMSDK )
165+ git clone --branch version-$(SQLITE_VERSION ) --depth 1 https://github.com/sqlite/sqlite.git $(SQLITE_SRC )
166+ source ./$(EMSDK ) /emsdk_env.sh && cd $(SQLITE_SRC ) && ./configure --enable-all
167+
168+ $(TARGET ) : $(SQLITE_SRC ) $(SRC_FILES )
169+ cd $(SQLITE_SRC ) /ext/wasm && $(MAKE ) dist sqlite3_wasm_extra_init.c=../../../../../src/wasm.c
170+ mv $(SQLITE_SRC ) /ext/wasm/sqlite-wasm-* .zip $(TARGET )
148171endif
149172
150173# Test executable
@@ -268,7 +291,7 @@ endif
268291
269292# Clean up generated files
270293clean :
271- rm -rf $(BUILD_DIRS ) $(DIST_DIR ) /* $(COV_DIR ) * .gcda * .gcno * .gcov $(CURL_DIR ) /src * .sqlite
294+ rm -rf $(BUILD_DIRS ) $(DIST_DIR ) /* $(COV_DIR ) * .gcda * .gcno * .gcov $(CURL_DIR ) /src * .sqlite $( BUILD_WASM )
272295
273296# Help message
274297help :
@@ -283,6 +306,7 @@ help:
283306 @echo " android (needs ARCH to be set to x86_64 or arm64-v8a and ANDROID_NDK to be set)"
284307 @echo " ios (only on macOS)"
285308 @echo " isim (only on macOS)"
309+ @echo " wasm (needs wabt[brew install wabt/apt install wabt])"
286310 @echo " "
287311 @echo " Targets:"
288312 @echo " all - Build the extension (default)"
0 commit comments