@@ -34,7 +34,8 @@ MAKEFLAGS += -j$(CPUS)
3434CC = gcc
3535CARGO_ENV = CARGO_TARGET_DIR=$(RUST_TARGET_DIR )
3636ifeq ($(PLATFORM ) ,android)
37- CARGO_ENV += OPENSSL_DIR=$(BIN)/../sysroot/usr
37+ OPENSSL_INSTALL_DIR = $(BUILD_DIR)/openssl/$(PLATFORM)/$(ARCH)
38+ CARGO_ENV += OPENSSL_DIR=$(CURDIR)/$(OPENSSL_INSTALL_DIR)
3839endif
3940CARGO = $(CARGO_ENV ) cargo
4041CFLAGS = -Wall -Wextra -Wno-unused-parameter -I$(SRC_DIR ) -I$(LIBS_DIR )
@@ -47,10 +48,6 @@ RUST_TARGET_DIR = $(BUILD_DIR)/rust-target
4748LIBS_DIR = libs
4849VPATH = $(SRC_DIR )
4950
50- # Files
51- SRC_FILES = $(wildcard $(SRC_DIR ) /* .c)
52- OBJ_FILES = $(patsubst % .c, $(BUILD_DIR ) /% .o, $(notdir $(SRC_FILES ) ) )
53-
5451# Rust FFI library
5552MCP_FFI_LIB = $(RUST_TARGET_DIR ) /release/libmcp_ffi.a
5653LDFLAGS = -L$(RUST_TARGET_DIR ) /release
@@ -62,7 +59,7 @@ ifeq ($(PLATFORM),windows)
6259 DEF_FILE := $(BUILD_DIR)/mcp.def
6360 STRIP = strip --strip-unneeded $@
6461 LIBS = -lmcp_ffi -lws2_32 -luserenv -lbcrypt -lntdll -lgcc -lgcc_eh -lpthread
65- TEST_LIBS = -lm
62+ T_LIBS = -lm
6663else ifeq ($(PLATFORM),macos)
6764 TARGET := $(DIST_DIR)/mcp.dylib
6865 MACOS_MIN_VERSION = 11.0
@@ -79,7 +76,7 @@ else ifeq ($(PLATFORM),macos)
7976 CARGO = $(CARGO_ENV) cargo
8077 STRIP = strip -x -S $@
8178 LIBS = -lmcp_ffi -framework CoreFoundation -framework Security -lresolv
82- TEST_LIBS = -lpthread -ldl -lm
79+ T_LIBS = -lpthread -ldl -lm
8380else ifeq ($(PLATFORM),android)
8481 ifndef ARCH
8582 $(error "Android ARCH must be set to ARCH=x86_64 or ARCH=arm64-v8a")
@@ -99,36 +96,36 @@ else ifeq ($(PLATFORM),android)
9996 ANDROID_ABI := android26
10097 endif
10198 CC = $(BIN)/$(ARCH)-linux-$(ANDROID_ABI)-clang
102- OPENSSL : = $(BIN)/../sysroot/usr/include/openssl
99+ OPENSSL = $(OPENSSL_INSTALL_DIR)/lib/libssl.a
103100 TARGET := $(DIST_DIR)/mcp.so
104- LDFLAGS += -shared
105- CFLAGS += -fPIC
101+ LDFLAGS += -shared -L$(OPENSSL_INSTALL_DIR)/lib
102+ CFLAGS += -fPIC -I$(OPENSSL_INSTALL_DIR)/include
106103 STRIP = $(BIN)/llvm-strip --strip-unneeded $@
107104 LIBS = -lmcp_ffi -ldl -lm -lssl -lcrypto
108- TEST_LIBS = -ldl -lm
105+ T_LIBS = -ldl -lm
109106else ifeq ($(PLATFORM),ios)
110107 TARGET := $(DIST_DIR)/mcp.dylib
111108 SDK := -isysroot $(shell xcrun --sdk iphoneos --show-sdk-path) -miphoneos-version-min=11.0
112109 LDFLAGS += -dynamiclib $(SDK) -headerpad_max_install_names
113110 CFLAGS += -arch arm64 $(SDK)
114111 STRIP = strip -x -S $@
115112 LIBS = -lmcp_ffi -framework CoreFoundation -framework Security -lSystem -lresolv
116- TEST_LIBS = -lpthread -ldl -lm
113+ T_LIBS = -lpthread -ldl -lm
117114else ifeq ($(PLATFORM),ios-sim)
118115 TARGET := $(DIST_DIR)/mcp.dylib
119116 SDK := -isysroot $(shell xcrun --sdk iphonesimulator --show-sdk-path) -miphonesimulator-version-min=11.0
120117 LDFLAGS += -arch x86_64 -arch arm64 -dynamiclib $(SDK) -headerpad_max_install_names
121118 CFLAGS += -arch x86_64 -arch arm64 $(SDK)
122119 STRIP = strip -x -S $@
123120 LIBS = -lmcp_ffi -framework CoreFoundation -framework Security -lSystem -lresolv
124- TEST_LIBS = -lpthread -ldl -lm
121+ T_LIBS = -lpthread -ldl -lm
125122else # linux
126123 TARGET := $(DIST_DIR)/mcp.so
127124 LDFLAGS += -shared
128125 CFLAGS += -fPIC
129126 STRIP = strip --strip-unneeded $@
130127 LIBS = -lmcp_ffi -lpthread -ldl -lm -lssl -lcrypto
131- TEST_LIBS = -lpthread -ldl -lm
128+ T_LIBS = -lpthread -ldl -lm
132129endif
133130
134131# Windows .def file generation
@@ -142,22 +139,20 @@ endif
142139$(shell mkdir -p $(BUILD_DIR) $(DIST_DIR))
143140all : extension
144141
145- OPENSSL_SRC = $( BUILD_DIR ) / openssl
146- OPENSSL_TARBALL = $(BUILD_DIR ) /openssl-3.6.0 .tar.gz
142+ OPENSSL_VERSION = openssl-3.6.0
143+ OPENSSL_TARBALL = $(BUILD_DIR ) /$( OPENSSL_VERSION ) .tar.gz
147144$(OPENSSL_TARBALL ) :
148- curl -L -o $(OPENSSL_TARBALL ) https://github.com/openssl/openssl/releases/download/openssl-3.6.0/openssl-3.6.0 .tar.gz
145+ curl -L -o $(OPENSSL_TARBALL ) https://github.com/openssl/openssl/releases/download/$( OPENSSL_VERSION ) / $( OPENSSL_VERSION ) .tar.gz
149146
150- $(OPENSSL_SRC ) : $(OPENSSL_TARBALL )
151- tar -xzf $(OPENSSL_TARBALL ) -C $(BUILD_DIR ) ; \
152- mv $(BUILD_DIR ) /openssl-3.6.0 $(OPENSSL_SRC )
153-
154- $(OPENSSL ) : $(OPENSSL_SRC )
155- cd $(BUILD_DIR ) /openssl && \
147+ $(OPENSSL ) : $(OPENSSL_TARBALL )
148+ mkdir -p $(BUILD_DIR ) /openssl
149+ tar -xzf $(OPENSSL_TARBALL ) -C $(BUILD_DIR ) /openssl
150+ cd $(BUILD_DIR ) /openssl/$(OPENSSL_VERSION ) && \
156151 ./Configure android-$(if $(filter aarch64,$(ARCH ) ) ,arm64,$(if $(filter armv7a,$(ARCH ) ) ,arm,$(ARCH ) ) ) \
157- --prefix=$(BIN ) /../sysroot/usr \
158- no-shared no-unit-test \
159- -D__ANDROID_API__=26 && \
160- $( MAKE ) clean && $( MAKE ) && $( MAKE ) install_sw
152+ --prefix=$(CURDIR ) / $( OPENSSL_INSTALL_DIR ) \
153+ no-shared no-unit-test -D__ANDROID_API__=26 && \
154+ $( MAKE ) && $( MAKE ) install_sw
155+ rm -rf $( BUILD_DIR ) /openssl/ $( OPENSSL_VERSION )
161156
162157# Build the Rust FFI static library
163158ifeq ($(PLATFORM ) ,android)
@@ -239,23 +234,24 @@ else
239234 $(CARGO) build --release
240235endif
241236
242- $(BUILD_DIR ) /% .o : % .c
243- $(CC ) $(CFLAGS ) -O3 -fPIC -c $< -o $@
244-
245- $(TARGET ) : staticlib $(OBJ_FILES ) $(DEF_FILE )
237+ $(TARGET ) : staticlib $(DEF_FILE )
246238 $(CC ) $(CFLAGS ) $(SRC_DIR ) /sqlite-mcp.c $(LDFLAGS ) $(LIBS ) -o $@
247239 $(STRIP )
248240
249241extension : $(TARGET )
250242
251- test : extension
243+ T_TARGET = $(BUILD_DIR ) /test
244+ $(T_TARGET ) : $(TARGET )
245+ $(CC ) $(CFLAGS ) -O3 test/main.c $(LIBS_DIR ) /sqlite3.c -o $@ $(T_LIBS )
246+
247+ test : $(T_TARGET )
252248 $(SQLITE3 ) " :memory:" -cmd " .bail on" " .load ./dist/mcp" " SELECT mcp_version();"
253- $(CC ) -Wall -Wextra -Wno-unused-parameter -O3 -I$(LIBS_DIR ) -c $(LIBS_DIR ) /sqlite3.c -o $(BUILD_DIR ) /sqlite3.o
254- $(CC ) -Wall -Wextra -Wno-unused-parameter -O3 -I$(LIBS_DIR ) test/main.c $(BUILD_DIR ) /sqlite3.o -o $(BUILD_DIR ) /test $(TEST_LIBS )
255249 $(BUILD_DIR ) /test
256250
251+ # clean everything except OpenSSL libs
257252clean :
258- rm -rf $(BUILD_DIR ) $(DIST_DIR )
253+ rm -rf $(DIST_DIR )
254+ find $(BUILD_DIR ) -mindepth 1 -maxdepth 1 ! -name openssl -exec rm -rf {} +
259255 $(CARGO ) clean
260256
261257# XCFramework build for Swift Package Manager
@@ -320,17 +316,12 @@ xcframework: $(DIST_DIR)/mcp.xcframework
320316AAR_ARM64 = packages/android/src/main/jniLibs/arm64-v8a/
321317AAR_ARM = packages/android/src/main/jniLibs/armeabi-v7a/
322318AAR_X86 = packages/android/src/main/jniLibs/x86_64/
323- AAR_USR = $(ANDROID_NDK ) /toolchains/llvm/prebuilt/$(HOST ) -x86_64/sysroot/usr/
324- AAR_CLEAN = rm -rf $(AAR_USR ) bin/openssl $(AAR_USR ) include/openssl $(AAR_USR ) lib/libssl.a $(AAR_USR ) lib/libcrypto.a $(AAR_USR ) lib/ossl-modules
325319aar :
326320 mkdir -p $(AAR_ARM64 ) $(AAR_ARM ) $(AAR_X86 )
327- $(AAR_CLEAN )
328321 $(MAKE ) clean && $(MAKE ) PLATFORM=android ARCH=arm64-v8a
329322 mv $(DIST_DIR ) /mcp.so $(AAR_ARM64 )
330- $(AAR_CLEAN )
331323 $(MAKE ) clean && $(MAKE ) PLATFORM=android ARCH=armeabi-v7a
332324 mv $(DIST_DIR ) /mcp.so $(AAR_ARM )
333- $(AAR_CLEAN )
334325 $(MAKE ) clean && $(MAKE ) PLATFORM=android ARCH=x86_64
335326 mv $(DIST_DIR ) /mcp.so $(AAR_X86 )
336327 cd packages/android && ./gradlew clean assembleRelease
0 commit comments