Files
status-app/mobile/Makefile
T

275 lines
8.9 KiB
Makefile

-include ./scripts/EnvVariables.mk
-include ./scripts/Common.mk
# iOS device and simulator are both arm64 but produce incompatible objects,
# so the sentinel key must include the SDK (iphoneos vs iphonesimulator).
ifeq ($(OS),ios)
PLATFORM_TARGET := $(OS)-$(ARCH)-$(IPHONE_SDK)
else
PLATFORM_TARGET := $(OS)-$(ARCH)
endif
# 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
# - Set to 1: Build with NFC support (iOS requires paid Apple Developer account)
# - Set to 0: Build without NFC support
# Usage: make build-ios FLAG_KEYCARD_ENABLED=1
FLAG_KEYCARD_ENABLED ?= 1
FLAG_DAPPS_ENABLED ?= 1
FLAG_CONNECTOR_ENABLED ?= 0
FLAG_BROWSER_ENABLED ?= 1
$(info Configuring build system for $(OS) $(ARCH) with QT $(QT_MAJOR))
# default rule
default: makedir all
iosdevice: IPHONE_SDK=iphoneos
iosdevice: default
# dependencies
statusq: clean-statusq $(STATUS_Q_LIB)
openssl: clean-openssl $(OPENSSL_LIB)
qrcodegen: clean-qrcodegen $(QRCODEGEN_LIB)
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)
# 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)
CC="$(CC)" $(MAKE) -C ../vendor/status-go statusgo-android-library \
ARCH=$(ARCH) \
ANDROID_NDK_ROOT="$(ANDROID_NDK_ROOT)" \
ANDROID_API="$(ANDROID_API)" \
HOST_OS="$(HOST_OS)" \
NIM_SDS_SOURCE_DIR="$(NIM_SDS_SOURCE_DIR)" \
USE_SYSTEM_NIM=$(USE_SYSTEM_NIM) \
GO_GENERATE_CMD="go generate" \
SHELL=/bin/sh
else ifeq ($(OS),ios)
$(MAKE) -C ../vendor/status-go statusgo-ios-library \
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"
@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)"
@mkdir -p $(LIB_PATH)
@$(MAKE) $(STATUS_GO_STUB_GEN)
@$(CXX) -shared -fPIC $(CXX_OPT_FLAGS) \
-o $(STATUS_GO_STUB_LIB) \
$(STATUS_DESKTOP)/mobile/statusgo_stub/statusgo_stub.cpp \
$(STATUS_GO_STUB_GEN) \
-llog -lc++_shared
$(STATUS_GO_SERVICE_LIB): $(STATUS_GO_LIB)
@echo "Building status-go service JNI library (service process)"
@mkdir -p $(LIB_PATH)
@$(MAKE) $(STATUS_GO_STUB_GEN)
@$(CXX) -shared -fPIC $(CXX_OPT_FLAGS) \
-o $(STATUS_GO_SERVICE_LIB) \
$(STATUS_DESKTOP)/mobile/statusgo_service/statusgo_service_jni.cpp \
$(STATUS_GO_SERVICE_GEN) \
-L$(LIB_PATH) -lstatus -llog -lc++_shared
$(STATUS_GO_STUB_GEN):
@$(MAKE) -C $(STATUS_DESKTOP)/vendor/status-go statusgo-stub-bindings
$(STATUS_Q_LIB): $(STATUS_Q_FILES) $(STATUS_Q_SCRIPT) $(STATUS_Q_UI_FILES)
@echo "Building StatusQ"
@STATUSQ=$(STATUSQ) QT_MAJOR=$(QT_MAJOR) LIB_SUFFIX=$(LIB_SUFFIX) LIB_EXT=$(LIB_EXT) $(STATUS_Q_SCRIPT) $(HANDLE_OUTPUT)
@echo "StatusQ built $(STATUS_Q_LIB)"
$(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) | platform-cleanup
@echo "Building QRCodeGen"
@QRCODEGEN=$(QRCODEGEN) $(QRCODEGEN_SCRIPT) $(HANDLE_OUTPUT)
@echo "QRCodeGen built $(QRCODEGEN_LIB)"
$(STATUS_KEYCARD_QT_LIB): $(STATUS_KEYCARD_QT_FILES) $(STATUS_KEYCARD_QT_SCRIPT) $(OPENSSL_LIB)
@echo "Building status-keycard-qt"
@STATUS_KEYCARD_QT=$(STATUS_KEYCARD_QT) KEYCARD_QT=$(KEYCARD_QT) BUILD_DIR=$(BUILD_PATH) $(STATUS_KEYCARD_QT_SCRIPT) $(HANDLE_OUTPUT)
@echo "status-keycard-qt built $(STATUS_KEYCARD_QT_LIB)"
$(STATUS_DESKTOP_RCC): $(STATUS_DESKTOP_UI_FILES) compile-translations
@echo "Building Status Desktop rcc"
@make -C $(STATUS_DESKTOP) rcc $(HANDLE_OUTPUT)
@echo "Status Desktop rcc built"
ifeq ($(OS),android)
$(NIM_STATUS_CLIENT_LIB): $(STATUS_GO_STUB_LIB) $(STATUS_GO_SERVICE_LIB)
endif
$(NIM_STATUS_CLIENT_LIB): $(STATUS_DESKTOP_NIM_FILES) $(NIM_STATUS_CLIENT_SCRIPT) $(STATUS_DESKTOP_RCC) $(OPENSSL_LIB) $(STATUS_Q_LIB) $(QRCODEGEN_LIB)
@echo "Building Status Desktop Lib"
@STATUS_DESKTOP=$(STATUS_DESKTOP) \
LIB_SUFFIX=$(LIB_SUFFIX) \
LIB_EXT=$(LIB_EXT) \
USE_QML_SERVER=$(USE_QML_SERVER) \
BUNDLE_IDENTIFIER="$(BUNDLE_IDENTIFIER)" \
DEBUG=$(DEBUG) \
PROFILE=$(PROFILE) \
QML_DEBUG_PORT=$(QML_DEBUG_PORT) \
FLAG_DAPPS_ENABLED=$(FLAG_DAPPS_ENABLED) \
FLAG_CONNECTOR_ENABLED=$(FLAG_CONNECTOR_ENABLED) \
FLAG_KEYCARD_ENABLED=$(FLAG_KEYCARD_ENABLED) \
FLAG_SINGLE_STATUS_INSTANCE_ENABLED=$(FLAG_SINGLE_STATUS_INSTANCE_ENABLED) \
FLAG_BROWSER_ENABLED=$(FLAG_BROWSER_ENABLED) \
$(NIM_STATUS_CLIENT_SCRIPT) $(HANDLE_OUTPUT)
@echo "Status Desktop Lib built $(NIM_STATUS_CLIENT_LIB)"
# non-phony targets
$(TARGET): $(APP_SCRIPT) $(STATUS_GO_LIB) $(STATUS_Q_LIB) $(OPENSSL_LIB) $(QRCODEGEN_LIB) $(STATUS_KEYCARD_QT_LIB) $(NIM_STATUS_CLIENT_LIB) $(STATUS_DESKTOP_RCC) $(WRAPPER_APP_FILES)
@echo "Building app"
ifeq ($(OS),android)
@STATUS_DESKTOP=$(STATUS_DESKTOP) \
GRADLE_TARGETS="$(GRADLE_TARGETS)" \
BUILD_TYPE=$(PACKAGE_TYPE) \
BIN_DIR=$(BIN_PATH) \
BUILD_DIR=$(BUILD_PATH) \
QT_MAJOR=$(QT_MAJOR) \
FLAG_KEYCARD_ENABLED=$(FLAG_KEYCARD_ENABLED) \
$(APP_SCRIPT) $(HANDLE_OUTPUT)
else
@STATUS_DESKTOP=$(STATUS_DESKTOP) \
BIN_DIR=$(BIN_PATH) \
BUILD_DIR=$(BUILD_PATH) \
QT_MAJOR=$(QT_MAJOR) \
FLAG_KEYCARD_ENABLED=$(FLAG_KEYCARD_ENABLED) \
$(APP_SCRIPT) $(HANDLE_OUTPUT)
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)
.PHONY: compile-translations
compile-translations:
@echo "Building translations"
ifeq ($(HOST_OS),linux)
@make -C $(STATUS_DESKTOP) compile-translations $(HANDLE_OUTPUT)
else
@CC= CXX= LDFLAGS= CGO_LDFLAGS= NIMFLAGS= make -C $(STATUS_DESKTOP) compile-translations $(HANDLE_OUTPUT)
endif
.PHONY: apk
apk:
ifeq ($(OS),android)
@$(MAKE) GRADLE_TARGETS=assembleRelease $(TARGET)
else
$(error APK target is only available for Android)
endif
.PHONY: apk-debug
apk-debug:
ifeq ($(OS),android)
@$(MAKE) GRADLE_TARGETS=assembleDebug $(TARGET)
else
$(error APK target is only available for Android)
endif
.PHONY: aab
aab:
ifeq ($(OS),android)
@$(MAKE) GRADLE_TARGETS="assembleRelease bundleRelease" $(TARGET)
else
$(error AAB target is only available for Android)
endif
.PHONY: apk-aab
apk-aab:
ifeq ($(OS),android)
@$(MAKE) GRADLE_TARGETS="assembleRelease bundleRelease" $(TARGET)
else
$(error apk-aab target is only available for Android)
endif
.PHONY: ios-app
ios-app:
ifeq ($(OS),ios)
@$(MAKE) $(TARGET)
@echo "✓ iOS app built successfully"
else
$(error iOS app target is only available for iOS)
endif
.PHONY: all
all: $(TARGET)
.PHONY: clean
clean: clean-statusq clean-openssl clean-qrcodegen clean-status-keycard-qt clean-nim-status-client clean-status-desktop-rcc
@echo "Cleaning"
@rm -rf $(ROOT_DIR)/bin $(ROOT_DIR)/build $(ROOT_DIR)/lib
.PHONY: run
run: makedir $(TARGET)
@echo "Running"
@APP=$(TARGET) QT_MAJOR=$(QT_MAJOR) USE_QML_SERVER=$(USE_QML_SERVER) QML_DEBUG_PORT=$(QML_DEBUG_PORT) $(RUN_SCRIPT)
.PHONY: clean-statusq
clean-statusq:
@rm -f $(STATUS_Q_LIB)
@rm -rf $(STATUSQ)/build
@make -C $(STATUS_DESKTOP) statusq-clean
.PHONY: clean-openssl
clean-openssl:
@rm -f $(OPENSSL_LIB)
.PHONY: clean-qrcodegen
clean-qrcodegen:
@rm -f $(QRCODEGEN_LIB)
@cd $(QRCODEGEN) && make clean
# keycard-qt is now automatically built by status-keycard-qt via CMake FetchContent
# Its build artifacts are cleaned as part of status-keycard-qt's build directory
.PHONY: clean-status-keycard-qt
clean-status-keycard-qt:
@rm -f $(STATUS_KEYCARD_QT_LIB)
@rm -rf $(STATUS_KEYCARD_QT)/build/$(OS)
.PHONY: clean-nim-status-client
clean-nim-status-client:
@rm -f $(NIM_STATUS_CLIENT_LIB)
@rm -rf $(STATUS_DESKTOP)/nimcache
.PHONY: clean-status-desktop-rcc
clean-status-desktop-rcc:
@rm -f $(STATUS_DESKTOP_RCC)
@rm -f $(STATUS_DESKTOP)/resources.rcc
@rm -f $(STATUS_DESKTOP)/ui/resources.qrc
.PHONY: apk-fdroid
apk-fdroid:
ifeq ($(OS),android)
@$(MAKE) GRADLE_TARGETS=assembleFdroid $(TARGET)
else
$(error apk-fdroid target is only available for Android)
endif