mirror of
https://github.com/status-im/status-app.git
synced 2026-08-27 07:01:14 +00:00
fix: unify nim-sds path and add platform sentinel for cross-platform builds
Use vendor/nim-sds as the default source for desktop builds. Add a platform sentinel that clears shared qrcodegen, nim-sds, and libstatus outputs when switching desktop/mobile or arch in the same tree. Replace parse-time platform cleanup with an order-only Make target. Drop ios/android branches from the root Makefile; mobile cleanup lives in mobile/Makefile. Always delegate status-go mobile builds via FORCE and copy libraries only on change.
This commit is contained in:
@@ -17,6 +17,7 @@ vendor/.nimble
|
||||
*.AppImage
|
||||
tmp
|
||||
nimcache
|
||||
.platform-target
|
||||
.DS_Store
|
||||
nim-status-client*.tgz
|
||||
/package/
|
||||
|
||||
@@ -59,7 +59,8 @@ GIT_ROOT ?= $(shell git rev-parse --show-toplevel 2>/dev/null || echo .)
|
||||
flatpak \
|
||||
flatpak-install \
|
||||
flatpak-run \
|
||||
flatpak-clean
|
||||
flatpak-clean \
|
||||
platform-cleanup
|
||||
|
||||
ifeq ($(NIM_PARAMS),)
|
||||
# "variables.mk" was not included, so we update the submodules.
|
||||
@@ -278,13 +279,26 @@ ifeq ($(mkspecs),macx)
|
||||
endif
|
||||
endif
|
||||
|
||||
NIM_SDS_SOURCE_DIR ?= $(GIT_ROOT)/../nim-sds
|
||||
NIM_SDS_SOURCE_DIR ?= $(GIT_ROOT)/vendor/nim-sds
|
||||
export NIM_SDS_SOURCE_DIR
|
||||
NIMSDS_LIBDIR := $(NIM_SDS_SOURCE_DIR)/build
|
||||
NIMSDS_LIBFILE := $(NIMSDS_LIBDIR)/libsds.$(LIB_EXT)
|
||||
NIM_EXTRA_PARAMS += --passL:"-L$(NIMSDS_LIBDIR)" --passL:"-lsds"
|
||||
STATUSGO_MAKE_PARAMS += NIM_SDS_SOURCE_DIR="$(NIM_SDS_SOURCE_DIR)"
|
||||
|
||||
# desktop only; mobile cleanup lives in mobile/Makefile
|
||||
ifneq ($(filter $(mkspecs),macx linux),)
|
||||
PLATFORM_TARGET := $(host_os)-$(or $(QT_ARCH),$(shell uname -m))
|
||||
else ifeq ($(mkspecs),win32)
|
||||
PLATFORM_TARGET := windows-$(or $(QT_ARCH),$(shell uname -m))
|
||||
endif
|
||||
|
||||
# Order-only prerequisite: delete shared vendor artifacts (qrcodegen, nim-sds, libstatus) when the build platform/arch changes.
|
||||
platform-cleanup:
|
||||
ifneq ($(PLATFORM_TARGET),)
|
||||
scripts/platform_pre_build_cleanup.sh "$(PLATFORM_TARGET)"
|
||||
endif
|
||||
|
||||
INCLUDE_DEBUG_SYMBOLS ?= false
|
||||
ifeq ($(INCLUDE_DEBUG_SYMBOLS),true)
|
||||
# We need `-d:debug` to get Nim's default stack traces
|
||||
@@ -533,7 +547,12 @@ STATUSGO := vendor/status-go/build/bin/libstatus.$(LIB_EXT)
|
||||
STATUSGO_LIBDIR := $(shell pwd)/$(shell dirname "$(STATUSGO)")
|
||||
export STATUSGO_LIBDIR
|
||||
|
||||
$(STATUSGO): | deps status-go-deps
|
||||
# Rebuild libsds independently after platform switch cleanup deletes vendor/nim-sds/build.
|
||||
$(NIMSDS_LIBFILE): | platform-cleanup
|
||||
echo -e $(BUILD_MSG) "nim-sds"
|
||||
$(STATUSGO_MAKE_PARAMS) $(MAKE) -C vendor/status-go build-libsds SHELL=/bin/sh $(HANDLE_OUTPUT)
|
||||
|
||||
$(STATUSGO): | deps status-go-deps $(NIMSDS_LIBFILE) platform-cleanup
|
||||
echo -e $(BUILD_MSG) "status-go"
|
||||
# FIXME: Nix shell usage breaks builds due to Glibc mismatch.
|
||||
$(STATUSGO_MAKE_PARAMS) $(MAKE) -C vendor/status-go statusgo-shared-library SHELL=/bin/sh \
|
||||
@@ -632,7 +651,7 @@ endif
|
||||
|
||||
QRCODEGEN := vendor/QR-Code-generator/c/libqrcodegen.a
|
||||
|
||||
$(QRCODEGEN): | deps
|
||||
$(QRCODEGEN): | deps platform-cleanup
|
||||
echo -e $(BUILD_MSG) "QR-Code-generator"
|
||||
+ cd vendor/QR-Code-generator/c && \
|
||||
$(MAKE) $(QRCODEGEN_MAKE_PARAMS) $(HANDLE_OUTPUT)
|
||||
@@ -768,7 +787,11 @@ $(NIM_STATUS_CLIENT): NIM_PARAMS += $(RESOURCES_LAYOUT)
|
||||
ifneq ($(mkspecs),win32)
|
||||
$(NIM_STATUS_CLIENT): NIM_PARAMS += --passL:"$(QT_SEAQT_EXTRA_LIBS)"
|
||||
endif
|
||||
$(NIM_STATUS_CLIENT): $(NIM_SOURCES) | statusq dotherside check-qt-dir $(STATUSGO) $(STATUSKEYCARD_QT_LIB) $(QRCODEGEN) rcc deps
|
||||
# Problem: libstatus present + libsds deleted -> make never re-entered status-go,
|
||||
# so the client linked against a missing libsds and crashed in dyld at startup.
|
||||
# Solution: depend on libsds directly (order-only) so it is restored even when
|
||||
# libstatus is untouched.
|
||||
$(NIM_STATUS_CLIENT): $(NIM_SOURCES) | statusq dotherside check-qt-dir $(STATUSGO) $(NIMSDS_LIBFILE) $(STATUSKEYCARD_QT_LIB) $(QRCODEGEN) rcc deps
|
||||
echo -e $(BUILD_MSG) "$@"
|
||||
$(ENV_SCRIPT) nim c $(NIM_PARAMS) \
|
||||
--mm:orc \
|
||||
|
||||
+17
-4
@@ -1,6 +1,8 @@
|
||||
-include ./scripts/EnvVariables.mk
|
||||
-include ./scripts/Common.mk
|
||||
|
||||
PLATFORM_TARGET := $(OS)-$(ARCH)
|
||||
|
||||
# FLAG_KEYCARD_ENABLED: Controls NFC/Keycard support
|
||||
# - iOS: Default 1 (enabled) - Build with NFC support, works with free Apple Developer account
|
||||
# - Android: Default 1 (enabled) - NFC support doesn't require paid account on Android
|
||||
@@ -29,7 +31,8 @@ status-keycard-qt: clean-status-keycard-qt $(STATUS_KEYCARD_QT_LIB)
|
||||
nim-status-client: clean-nim-status-client $(NIM_STATUS_CLIENT_LIB)
|
||||
status-desktop-rcc: clean-status-desktop-rcc $(STATUS_DESKTOP_RCC)
|
||||
|
||||
$(STATUS_GO_LIB):
|
||||
# Always delegate to status-go's PHONY sub-make (it owns incremental rebuild, see issue #18377), then copy only on change.
|
||||
$(STATUS_GO_LIB): FORCE | platform-cleanup
|
||||
@echo "Building status-go mobile library"
|
||||
@mkdir -p $(LIB_PATH)
|
||||
ifeq ($(OS),android)
|
||||
@@ -47,12 +50,13 @@ else ifeq ($(OS),ios)
|
||||
ARCH=$(ARCH) \
|
||||
IPHONE_SDK="$(IPHONE_SDK)" \
|
||||
IOS_TARGET="$(IOS_TARGET)" \
|
||||
NIM_SDS_SOURCE_DIR="$(NIM_SDS_SOURCE_DIR)" \
|
||||
USE_SYSTEM_NIM=$(USE_SYSTEM_NIM) \
|
||||
SHELL=/bin/sh
|
||||
endif
|
||||
@echo "Copying library to mobile lib directory"
|
||||
@cp $(NIM_SDS_SOURCE_DIR)/build/libsds$(LIB_EXT) $(LIB_PATH)/libsds$(LIB_EXT)
|
||||
@cp ../vendor/status-go/build/bin/libstatus$(LIB_EXT) $(LIB_PATH)/libstatus$(LIB_EXT)
|
||||
@cmp -s $(NIM_SDS_SOURCE_DIR)/build/libsds$(LIB_EXT) $(LIB_PATH)/libsds$(LIB_EXT) || cp $(NIM_SDS_SOURCE_DIR)/build/libsds$(LIB_EXT) $(LIB_PATH)/libsds$(LIB_EXT)
|
||||
@cmp -s ../vendor/status-go/build/bin/libstatus$(LIB_EXT) $(LIB_PATH)/libstatus$(LIB_EXT) || cp ../vendor/status-go/build/bin/libstatus$(LIB_EXT) $(LIB_PATH)/libstatus$(LIB_EXT)
|
||||
|
||||
$(STATUS_GO_STUB_LIB): $(STATUS_GO_LIB)
|
||||
@echo "Building status-go stub library (UI process)"
|
||||
@@ -91,7 +95,7 @@ $(OPENSSL_LIB): $(OPENSSL_FILES)
|
||||
@echo "Building OpenSSL"
|
||||
@LIB_PATH=$(LIB_PATH) LIB_EXT=$(LIB_EXT) OPENSSL=$(OPENSSL) BUILD_DIR=$(BUILD_PATH) $(OPENSSL_SCRIPT) $(HANDLE_OUTPUT)
|
||||
|
||||
$(QRCODEGEN_LIB): $(QRCODEGEN_FILES)
|
||||
$(QRCODEGEN_LIB): $(QRCODEGEN_FILES) | platform-cleanup
|
||||
@echo "Building QRCodeGen"
|
||||
@QRCODEGEN=$(QRCODEGEN) $(QRCODEGEN_SCRIPT) $(HANDLE_OUTPUT)
|
||||
@echo "QRCodeGen built $(QRCODEGEN_LIB)"
|
||||
@@ -151,6 +155,15 @@ endif
|
||||
@echo "Built $(TARGET)"
|
||||
|
||||
# phony rules
|
||||
|
||||
# Order-only prerequisite: delete shared vendor artifacts (qrcodegen, nim-sds, libstatus) when the build platform/arch changes.
|
||||
.PHONY: platform-cleanup FORCE
|
||||
platform-cleanup:
|
||||
@../scripts/platform_pre_build_cleanup.sh "$(PLATFORM_TARGET)"
|
||||
|
||||
# Empty target: anything depending on FORCE is always rebuilt.
|
||||
FORCE:
|
||||
|
||||
.PHONY: makedir
|
||||
makedir:
|
||||
@mkdir -p $(BIN_PATH) $(LIB_PATH) $(BUILD_PATH)
|
||||
|
||||
Executable
+24
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# $1 = platform target: darwin-arm64 / ios-arm64 / android-arm64
|
||||
KEY="${1:-}"
|
||||
GIT_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
STATE="$GIT_ROOT/.platform-target"
|
||||
|
||||
[ -n "$KEY" ] || { echo "platform_pre_build_cleanup: empty PLATFORM_TARGET" >&2; exit 1; }
|
||||
|
||||
PREV="$(cat "$STATE" 2>/dev/null || echo none)"
|
||||
[ "$PREV" = "$KEY" ] && exit 0
|
||||
|
||||
echo "platform changed ($PREV -> $KEY); cleaning shared artifacts" >&2
|
||||
|
||||
# 1) qrcodegen (desktop links directly, mobile builds into the same tree)
|
||||
make -C "$GIT_ROOT/vendor/QR-Code-generator/c" clean 2>/dev/null || true
|
||||
# 2) nim-sds (shared libsds.* + nimcache)
|
||||
rm -rf "$GIT_ROOT/vendor/nim-sds/build" 2>/dev/null || true
|
||||
[ -n "${HOME:-}" ] && rm -rf "$HOME"/.cache/nim/libsds_* 2>/dev/null || true
|
||||
# 3) libstatus.* (shared bin between make run and mobile-run)
|
||||
rm -f "$GIT_ROOT"/vendor/status-go/build/bin/libstatus.* 2>/dev/null || true
|
||||
|
||||
echo "$KEY" > "$STATE"
|
||||
Reference in New Issue
Block a user