Skip to content

Commit a753a83

Browse files
committed
fix(android/Makefile): update OpenSSL installation path to not use system one and clean up build process
1 parent 9e20ece commit a753a83

File tree

1 file changed

+31
-40
lines changed

1 file changed

+31
-40
lines changed

Makefile

Lines changed: 31 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ MAKEFLAGS += -j$(CPUS)
3434
CC = gcc
3535
CARGO_ENV = CARGO_TARGET_DIR=$(RUST_TARGET_DIR)
3636
ifeq ($(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)
3839
endif
3940
CARGO = $(CARGO_ENV) cargo
4041
CFLAGS = -Wall -Wextra -Wno-unused-parameter -I$(SRC_DIR) -I$(LIBS_DIR)
@@ -47,10 +48,6 @@ RUST_TARGET_DIR = $(BUILD_DIR)/rust-target
4748
LIBS_DIR = libs
4849
VPATH = $(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
5552
MCP_FFI_LIB = $(RUST_TARGET_DIR)/release/libmcp_ffi.a
5653
LDFLAGS = -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
6663
else 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
8380
else 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
109106
else 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
117114
else 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
125122
else # 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
132129
endif
133130

134131
# Windows .def file generation
@@ -142,22 +139,20 @@ endif
142139
$(shell mkdir -p $(BUILD_DIR) $(DIST_DIR))
143140
all: 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
163158
ifeq ($(PLATFORM),android)
@@ -239,23 +234,24 @@ else
239234
$(CARGO) build --release
240235
endif
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

249241
extension: $(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
257252
clean:
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
320316
AAR_ARM64 = packages/android/src/main/jniLibs/arm64-v8a/
321317
AAR_ARM = packages/android/src/main/jniLibs/armeabi-v7a/
322318
AAR_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
325319
aar:
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

Comments
 (0)