diff --git a/.github/workflows/windows-build.yml b/.github/workflows/windows-build.yml index 0582d5fd1..52cd7f91a 100644 --- a/.github/workflows/windows-build.yml +++ b/.github/workflows/windows-build.yml @@ -81,9 +81,13 @@ jobs: make CC="gcc -fPIC -D_WIN32_WINNT=0x0600 -DNATPMP_STATICLIB" libnatpmp.a V=1 cd ../../../../ - - name: Building wakunode2 + - name: Building wakunode2.exe run: | make wakunode2 LOG_LEVEL=DEBUG V=3 -j8 + + - name: Building libwaku.dll + run: | + make libwaku STATIC=0 LOG_LEVEL=DEBUG V=1 -j - name: Check Executable run: | @@ -93,3 +97,9 @@ jobs: echo "Build failed: wakunode2.exe not found" exit 1 fi + if [ -f "./build/libwaku.dll" ]; then + echo "libwaku.dll build successful" + else + echo "Build failed: libwaku.dll not found" + exit 1 + fi diff --git a/Makefile b/Makefile index d11f50bec..555a20472 100644 --- a/Makefile +++ b/Makefile @@ -398,14 +398,16 @@ docker-liteprotocoltester-push: STATIC ?= 0 + libwaku: | build deps librln - rm -f build/libwaku* + rm -f build/libwaku* + ifeq ($(STATIC), 1) - echo -e $(BUILD_MSG) "build/$@.a" && \ - $(ENV_SCRIPT) nim libwakuStatic $(NIM_PARAMS) waku.nims + echo -e $(BUILD_MSG) "build/$@.a" && $(ENV_SCRIPT) nim libwakuStatic $(NIM_PARAMS) waku.nims +else ifeq ($(detected_OS),Windows) + echo -e $(BUILD_MSG) "build/$@.dll" && $(ENV_SCRIPT) nim libwakuDynamic $(NIM_PARAMS) waku.nims else - echo -e $(BUILD_MSG) "build/$@.so" && \ - $(ENV_SCRIPT) nim libwakuDynamic $(NIM_PARAMS) waku.nims + echo -e $(BUILD_MSG) "build/$@.so" && $(ENV_SCRIPT) nim libwakuDynamic $(NIM_PARAMS) waku.nims endif ##################### diff --git a/README.md b/README.md index 057d0b622..119c00052 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ pacman -S --noconfirm --needed mingw-w64-x86_64-python #### 3. Build Wakunode - Open Git Bash as administrator - clone nwaku and cd nwaku -- Execute: `./scripts/build_wakunode_windows.sh` +- Execute: `./scripts/build_windows.sh` #### 4. Troubleshooting If `wakunode2.exe` isn't generated: diff --git a/scripts/build_wakunode_windows.sh b/scripts/build_windows.sh similarity index 88% rename from scripts/build_wakunode_windows.sh rename to scripts/build_windows.sh index ef0881836..e56fb8871 100755 --- a/scripts/build_wakunode_windows.sh +++ b/scripts/build_windows.sh @@ -36,25 +36,28 @@ cd ../../../.. echo "6. -.-.-.- Building libunwind -.-.-.-" cd vendor/nim-libbacktrace -execute_command "make all V=1" -execute_command "make install/usr/lib/libunwind.a V=1" +execute_command "make all V=1 -j8" +execute_command "make install/usr/lib/libunwind.a V=1 -j8" cp ./vendor/libunwind/build/lib/libunwind.a install/usr/lib cd ../../ echo "7. -.-.-.- Building miniupnpc -.-.-.- " cd vendor/nim-nat-traversal/vendor/miniupnp/miniupnpc execute_command "git checkout little_chore_windows_support" -execute_command "make -f Makefile.mingw CC=gcc CXX=g++ libminiupnpc.a V=1" +execute_command "make -f Makefile.mingw CC=gcc CXX=g++ libminiupnpc.a V=1 -j8" cd ../../../../.. echo "8. -.-.-.- Building libnatpmp -.-.-.- " cd ./vendor/nim-nat-traversal/vendor/libnatpmp-upstream -make CC="gcc -fPIC -D_WIN32_WINNT=0x0600 -DNATPMP_STATICLIB" libnatpmp.a V=1 +make CC="gcc -fPIC -D_WIN32_WINNT=0x0600 -DNATPMP_STATICLIB" libnatpmp.a V=1 -j8 cd ../../../../ echo "9. -.-.-.- Building wakunode2 -.-.-.- " execute_command "make wakunode2 LOG_LEVEL=DEBUG V=1 -j8" +echo "10. -.-.-.- Building libwaku -.-.-.- " +execute_command "make libwaku STATIC=0 LOG_LEVEL=DEBUG V=1 -j8" + echo "Windows setup completed successfully!" echo "✓ Successful commands: $success_count" echo "✗ Failed commands: $failure_count" diff --git a/waku.nimble b/waku.nimble index 5be212264..2f9a73595 100644 --- a/waku.nimble +++ b/waku.nimble @@ -1,3 +1,4 @@ +import os mode = ScriptMode.Verbose ### Package @@ -69,9 +70,15 @@ proc buildLibrary(name: string, srcDir = "./", params = "", `type` = "static") = ".a --threads:on --app:staticlib --opt:size --noMain --mm:refc --header -d:metrics --nimMainPrefix:libwaku --skipParentCfg:on -d:discv5_protocol_id=d5waku " & extra_params & " " & srcDir & name & ".nim" else: - exec "nim c" & " --out:build/" & name & - ".so --threads:on --app:lib --opt:size --noMain --mm:refc --header -d:metrics --nimMainPrefix:libwaku --skipParentCfg:on -d:discv5_protocol_id=d5waku " & - extra_params & " " & srcDir & name & ".nim" + var lib_name = toDll("libwaku") + when defined(windows): + exec "nim c" & " --out:build/" & lib_name & + " --threads:on --app:lib --opt:size --noMain --mm:refc --header -d:metrics --nimMainPrefix:libwaku --skipParentCfg:off -d:discv5_protocol_id=d5waku " & + extra_params & " " & srcDir & name & ".nim" + else: + exec "nim c" & " --out:build/" & lib_name & + " --threads:on --app:lib --opt:size --noMain --mm:refc --header -d:metrics --nimMainPrefix:libwaku --skipParentCfg:on -d:discv5_protocol_id=d5waku " & + extra_params & " " & srcDir & name & ".nim" proc buildMobileAndroid(srcDir = ".", params = "") = let cpu = getEnv("CPU") @@ -160,33 +167,20 @@ task testone, "Test custom target": exec "build/" & filepath & ".bin" ### C Bindings +let chroniclesParams = + "-d:chronicles_line_numbers " & "-d:chronicles_runtime_filtering=on " & + """-d:chronicles_sinks="textlines,json" """ & + "-d:chronicles_default_output_device=Dynamic " & + """-d:chronicles_disabled_topics="eth,dnsdisc.client" """ & "--warning:Deprecated:off " & + "--warning:UnusedImport:on " & "-d:chronicles_log_level=TRACE" + task libwakuStatic, "Build the cbindings waku node library": let name = "libwaku" - buildLibrary name, - "library/", - """-d:chronicles_line_numbers \ - -d:chronicles_runtime_filtering=on \ - -d:chronicles_sinks="textlines,json" \ - -d:chronicles_default_output_device=Dynamic \ - -d:chronicles_disabled_topics="eth,dnsdisc.client" \ - --warning:Deprecated:off \ - --warning:UnusedImport:on \ - -d:chronicles_log_level=TRACE """, - "static" + buildLibrary name, "library/", chroniclesParams, "static" task libwakuDynamic, "Build the cbindings waku node library": let name = "libwaku" - buildLibrary name, - "library/", - """-d:chronicles_line_numbers \ - -d:chronicles_runtime_filtering=on \ - -d:chronicles_sinks="textlines,json" \ - -d:chronicles_default_output_device=Dynamic \ - -d:chronicles_disabled_topics="eth,dnsdisc.client" \ - --warning:Deprecated:off \ - --warning:UnusedImport:on \ - -d:chronicles_log_level=TRACE """, - "dynamic" + buildLibrary name, "library/", chroniclesParams, "dynamic" ### Mobile Android task libWakuAndroid, "Build the mobile bindings for Android":