@@ -44,6 +44,9 @@ GIT_ROOT ?= $(shell git rev-parse --show-toplevel 2>/dev/null || echo .)
4444 run-statusq-sanity-checker \
4545 statusq-tests \
4646 run-statusq-tests \
47+ statusq-import-lib \
48+ nim-sds \
49+ copy-windows-dlls \
4750 storybook-build \
4851 run-storybook \
4952 run-storybook-tests \
@@ -249,6 +252,56 @@ NIMSDS_LIBFILE := $(NIMSDS_LIBDIR)/libsds.$(LIB_EXT)
249252NIM_EXTRA_PARAMS += --passL:"-L$(NIMSDS_LIBDIR ) " --passL:"-lsds"
250253STATUSGO_MAKE_PARAMS += NIM_SDS_SOURCE_DIR="$(NIM_SDS_SOURCE_DIR ) "
251254
255+ # Common nim-sds build recipe (used by both Windows and non-Windows)
256+ define BUILD_NIMSDS
257+ @echo -e "\033[92mBuilding:\033[39m nim-sds"
258+ @if [ ! -d "$(NIM_SDS_SOURCE_DIR ) " ]; then \
259+ echo "Error: nim-sds directory not found at $(NIM_SDS_SOURCE_DIR ) "; \
260+ echo "Please clone it or set NIM_SDS_SOURCE_DIR environment variable"; \
261+ exit 1; \
262+ fi
263+ @$(MAKE ) -C $(NIM_SDS_SOURCE_DIR ) libsds USE_SYSTEM_NIM=1 SHELL=/bin/bash $(HANDLE_OUTPUT )
264+ endef
265+
266+ ifeq ($(mkspecs ) ,win32)
267+ # On Windows with MinGW, create import library for nim-sds
268+ NIMSDS_DLL := $(NIMSDS_LIBDIR ) /libsds.dll
269+ NIMSDS_DEF := $(NIMSDS_LIBDIR ) /libsds.def
270+ NIMSDS_IMPORT_LIB := $(NIMSDS_LIBDIR ) /libsds.dll.a
271+
272+ $(NIMSDS_DEF ) : $(NIMSDS_DLL )
273+ @echo -e " \033[92mCreating:\033[39m libsds.def"
274+ @mkdir -p $(NIMSDS_LIBDIR )
275+ @ (echo " EXPORTS" ; \
276+ echo " SdsCleanupReliabilityManager" ; \
277+ echo " SdsMarkDependenciesMet" ; \
278+ echo " SdsNewReliabilityManager" ; \
279+ echo " SdsResetReliabilityManager" ; \
280+ echo " SdsSetEventCallback" ; \
281+ echo " SdsStartPeriodicTasks" ; \
282+ echo " SdsUnwrapReceivedMessage" ; \
283+ echo " SdsWrapOutgoingMessage" ; \
284+ echo " libsdsNimDestroyGlobals" ; \
285+ echo " libsdsNimMain" ) > $(NIMSDS_DEF )
286+
287+ $(NIMSDS_IMPORT_LIB ) : $(NIMSDS_DLL ) $(NIMSDS_DEF )
288+ @echo -e " \033[92mCreating:\033[39m libsds.dll.a"
289+ @rm -f $(NIMSDS_IMPORT_LIB )
290+ @cd $(NIMSDS_LIBDIR ) && dlltool --dllname libsds.dll --def libsds.def --output-lib libsds.dll.a || \
291+ (echo " Warning: Failed to create import library. Ensure dlltool is in PATH." && exit 0)
292+
293+ $(NIMSDS_LIBFILE ) : | deps
294+ $(BUILD_NIMSDS )
295+ @$(MAKE ) $(NIMSDS_IMPORT_LIB ) || true
296+
297+ nim-sds : $(NIMSDS_LIBFILE ) $(NIMSDS_IMPORT_LIB )
298+ else
299+ $(NIMSDS_LIBFILE ) : | deps
300+ $(BUILD_NIMSDS )
301+
302+ nim-sds : $(NIMSDS_LIBFILE )
303+ endif
304+
252305INCLUDE_DEBUG_SYMBOLS ?= false
253306ifeq ($(INCLUDE_DEBUG_SYMBOLS ) ,true)
254307 # We need `-d:debug` to get Nim's default stack traces
@@ -326,10 +379,35 @@ statusq-build: | statusq-configure
326379
327380statusq-install : | statusq-build
328381 echo -e " \033[92mInstalling:\033[39m StatusQ"
382+ @mkdir -p $(STATUSQ_INSTALL_PATH ) /StatusQ || true
329383 cmake --install $(STATUSQ_BUILD_PATH ) \
330384 $(HANDLE_OUTPUT )
331385
386+ ifeq ($(mkspecs ) ,win32)
387+ # On Windows with MinGW, create import libraries (.dll.a) from DLLs
388+ STATUSQ_DLL := $(STATUSQ_INSTALL_PATH ) /StatusQ/StatusQ.dll
389+ STATUSQ_DEF := $(STATUSQ_INSTALL_PATH ) /StatusQ/StatusQ.def
390+ STATUSQ_IMPORT_LIB := $(STATUSQ_INSTALL_PATH ) /StatusQ/libStatusQ.dll.a
391+
392+ $(STATUSQ_DEF ) : $(STATUSQ_DLL )
393+ @echo -e " \033[92mCreating:\033[39m StatusQ.def"
394+ @mkdir -p $(STATUSQ_INSTALL_PATH ) /StatusQ || true
395+ @ (echo " EXPORTS" ; \
396+ echo " statusq_getMobileUIScaleFactor" ; \
397+ echo " statusq_registerQmlTypes" ) > $(STATUSQ_DEF )
398+
399+ $(STATUSQ_IMPORT_LIB ) : $(STATUSQ_DLL ) $(STATUSQ_DEF )
400+ @echo -e " \033[92mCreating:\033[39m libStatusQ.dll.a"
401+ @mkdir -p $(STATUSQ_INSTALL_PATH ) /StatusQ
402+ @cd $(STATUSQ_INSTALL_PATH ) /StatusQ && dlltool --dllname StatusQ.dll --def StatusQ.def --output-lib libStatusQ.dll.a || \
403+ (echo " Warning: Failed to create import library. Ensure dlltool is in PATH." && exit 0)
404+
405+ statusq-import-lib : $(STATUSQ_IMPORT_LIB )
406+
407+ statusq : | statusq-install statusq-import-lib
408+ else
332409statusq : | statusq-install
410+ endif
333411
334412statusq-clean :
335413 echo -e " \033[92mCleaning:\033[39m StatusQ"
@@ -474,13 +552,25 @@ STATUSGO := vendor/status-go/build/bin/libstatus.$(LIB_EXT)
474552STATUSGO_LIBDIR := $(shell pwd) /$(shell dirname "$(STATUSGO ) ")
475553export STATUSGO_LIBDIR
476554
555+ ifeq ($(mkspecs ) ,win32)
477556$(STATUSGO ) : | deps status-go-deps
478557 echo -e $(BUILD_MSG ) " status-go"
479558 # FIXME: Nix shell usage breaks builds due to Glibc mismatch.
480559 $(STATUSGO_MAKE_PARAMS ) $(MAKE ) -C vendor/status-go statusgo-shared-library SHELL=/bin/sh \
481560 SENTRY_CONTEXT_NAME=" status-desktop" \
482561 SENTRY_CONTEXT_VERSION=" $( DESKTOP_VERSION) " \
483562 $(HANDLE_OUTPUT )
563+ # On Windows, ensure import library exists after status-go build
564+ @if [ -f " $( NIMSDS_LIBFILE) " ]; then $(MAKE ) $(NIMSDS_IMPORT_LIB ) || true ; fi
565+ else
566+ $(STATUSGO ) : | deps status-go-deps
567+ echo -e $(BUILD_MSG ) " status-go"
568+ # FIXME: Nix shell usage breaks builds due to Glibc mismatch.
569+ $(STATUSGO_MAKE_PARAMS ) $(MAKE ) -C vendor/status-go statusgo-shared-library SHELL=/bin/sh \
570+ SENTRY_CONTEXT_NAME=" status-desktop" \
571+ SENTRY_CONTEXT_VERSION=" $( DESKTOP_VERSION) " \
572+ $(HANDLE_OUTPUT )
573+ endif
484574
485575status-go : $(STATUSGO )
486576
@@ -611,7 +701,33 @@ $(NIM_STATUS_CLIENT): update-qmake-previous
611701endif
612702
613703$(NIM_STATUS_CLIENT ) : NIM_PARAMS += $(RESOURCES_LAYOUT )
614- $(NIM_STATUS_CLIENT ) : $(NIM_SOURCES ) | statusq dotherside check-qt-dir $(STATUSGO ) $(STATUSKEYCARDGO ) $(QRCODEGEN ) rcc deps
704+ ifeq ($(mkspecs ) ,win32)
705+ # Copy DLLs to bin directory for Windows runtime
706+ copy-windows-dlls : | statusq dotherside $(STATUSGO ) $(STATUSKEYCARDGO ) $(NIMSDS_LIBFILE )
707+ @echo -e " \033[92mCopying:\033[39m Windows DLLs to bin directory"
708+ @mkdir -p $(STATUSQ_INSTALL_PATH )
709+ @mkdir -p $(STATUSQ_INSTALL_PATH ) /StatusQ
710+ @if [ -f " $( STATUSQ_INSTALL_PATH) /StatusQ/StatusQ.dll" ]; then \
711+ echo " StatusQ.dll already in $( STATUSQ_INSTALL_PATH) /StatusQ/" ; \
712+ elif [ -f " $( STATUSQ_BUILD_PATH) /bin/$( COMMON_CMAKE_BUILD_TYPE) /StatusQ.dll" ]; then \
713+ cp " $( STATUSQ_BUILD_PATH) /bin/$( COMMON_CMAKE_BUILD_TYPE) /StatusQ.dll" " $( STATUSQ_INSTALL_PATH) /StatusQ/" 2> /dev/null || true ; \
714+ fi
715+ @rm -f " $( STATUSQ_INSTALL_PATH) /StatusQ.dll" 2> /dev/null || true
716+ @if [ -f " $( DOTHERSIDE_LIBFILE) " ]; then \
717+ cp " $( DOTHERSIDE_LIBFILE) " " $( STATUSQ_INSTALL_PATH) /" 2> /dev/null || true ; \
718+ fi
719+ @if [ -f " $( STATUSGO) " ]; then \
720+ cp " $( STATUSGO) " " $( STATUSQ_INSTALL_PATH) /" 2> /dev/null || true ; \
721+ fi
722+ @if [ -f " $( STATUSKEYCARDGO) " ]; then \
723+ cp " $( STATUSKEYCARDGO) " " $( STATUSQ_INSTALL_PATH) /" 2> /dev/null || true ; \
724+ fi
725+ @if [ -f " $( NIMSDS_LIBFILE) " ]; then \
726+ cp " $( NIMSDS_LIBFILE) " " $( STATUSQ_INSTALL_PATH) /" 2> /dev/null || true ; \
727+ fi
728+ endif
729+
730+ $(NIM_STATUS_CLIENT ) : $(NIM_SOURCES ) | statusq dotherside check-qt-dir $(STATUSGO ) $(STATUSKEYCARDGO ) $(QRCODEGEN ) rcc deps $(if $(filter win32,$(mkspecs ) ) ,copy-windows-dlls)
615731 echo -e $(BUILD_MSG ) " $@ "
616732 $(ENV_SCRIPT ) nim c $(NIM_PARAMS ) \
617733 --mm:refc \
@@ -887,9 +1003,9 @@ run-macos: nim_status_client
8871003 ./bin/StatusDev.app/Contents/MacOS/nim_status_client $(ARGS )
8881004
8891005run-windows : STATUS_RC_FILE = status-dev.rc
890- run-windows : compile_windows_resources nim_status_client
1006+ run-windows : compile_windows_resources nim_status_client $( if $( filter win32, $( mkspecs ) ) ,copy-windows-dlls)
8911007 echo -e " \033[92mRunning:\033[39m bin/nim_status_client.exe"
892- PATH=" $( DOTHERSIDE_LIBDIR) " :" $( STATUSGO_LIBDIR) " :" $( STATUSKEYCARDGO_LIBDIR) " :" $( STATUSQ_INSTALL_PATH) /StatusQ" :" $( PATH) " \
1008+ PATH=" $( DOTHERSIDE_LIBDIR) " :" $( STATUSGO_LIBDIR) " :" $( STATUSKEYCARDGO_LIBDIR) " :" $( STATUSQ_INSTALL_PATH) /StatusQ" :" $( STATUSQ_INSTALL_PATH ) " : " $( PATH) " \
8931009 ./bin/nim_status_client.exe $(ARGS )
8941010
8951011NIM_TEST_FILES := $(wildcard test/nim/* .nim)
0 commit comments