mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-01-02 05:53:11 +00:00
feat: remain windows support (#3162)
Refine process so now it's look cleaner and simple
This commit is contained in:
parent
dcf09dd365
commit
5f1a3406d1
16
Makefile
16
Makefile
@ -34,14 +34,14 @@ ifneq (,$(findstring MINGW,$(detected_OS)))
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(detected_OS),Windows)
|
ifeq ($(detected_OS),Windows)
|
||||||
# Define a new temporary directory for Windows
|
# Update MINGW_PATH to standard MinGW location
|
||||||
TMP_DIR := $(CURDIR)/tmp
|
MINGW_PATH = /mingw64
|
||||||
$(shell mkdir -p $(TMP_DIR))
|
NIM_PARAMS += --passC:"-I$(MINGW_PATH)/include"
|
||||||
export TMP := $(TMP_DIR)
|
NIM_PARAMS += --passL:"-L$(MINGW_PATH)/lib"
|
||||||
export TEMP := $(TMP_DIR)
|
NIM_PARAMS += --passL:"-Lvendor/nim-nat-traversal/vendor/miniupnp/miniupnpc"
|
||||||
|
NIM_PARAMS += --passL:"-Lvendor/nim-nat-traversal/vendor/libnatpmp-upstream"
|
||||||
# Add the necessary libraries to the linker flags
|
|
||||||
LIBS = -static -lws2_32 -lbcrypt -luserenv -lntdll -lminiupnpc
|
LIBS = -static -lws2_32 -lbcrypt -liphlpapi -luserenv -lntdll -lminiupnpc -lnatpmp -lpq
|
||||||
NIM_PARAMS += $(foreach lib,$(LIBS),--passL:"$(lib)")
|
NIM_PARAMS += $(foreach lib,$(LIBS),--passL:"$(lib)")
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|||||||
40
README.md
40
README.md
@ -52,14 +52,42 @@ If you encounter difficulties building the project on WSL, consider placing the
|
|||||||
|
|
||||||
### How to Build & Run ( Windows )
|
### How to Build & Run ( Windows )
|
||||||
|
|
||||||
Note: This is a work in progress. The current setup procedure is as follows:
|
### Windows Build Instructions
|
||||||
Goal: Get rid of windows specific procedures and make the build process the same as linux/macos.
|
|
||||||
|
|
||||||
The current setup procedure is as follows:
|
#### 1. Install Required Tools
|
||||||
|
- **Git Bash Terminal**: Download and install from https://git-scm.com/download/win
|
||||||
|
- **MSYS2**:
|
||||||
|
a. Download installer from https://www.msys2.org
|
||||||
|
b. Install at "C:\" (default location). Remove/rename the msys folder in case of previous installation.
|
||||||
|
c. Use the mingw64 terminal from msys64 directory for package installation.
|
||||||
|
|
||||||
1. Clone the repository and checkout master branch
|
#### 2. Install Dependencies
|
||||||
2. Ensure prerequisites are installed (Make, GCC, MSYS2/MinGW)
|
Open MSYS2 mingw64 terminal and run the following one-by-one :
|
||||||
3. Run scripts/windows_setup.sh
|
```bash
|
||||||
|
pacman -Syu --noconfirm
|
||||||
|
pacman -S --noconfirm --needed mingw-w64-x86_64-toolchain
|
||||||
|
pacman -S --noconfirm --needed base-devel make cmake upx
|
||||||
|
pacman -S --noconfirm --needed mingw-w64-x86_64-rust
|
||||||
|
pacman -S --noconfirm --needed mingw-w64-x86_64-postgresql
|
||||||
|
pacman -S --noconfirm --needed mingw-w64-x86_64-gcc
|
||||||
|
pacman -S --noconfirm --needed mingw-w64-x86_64-gcc-libs
|
||||||
|
pacman -S --noconfirm --needed mingw-w64-x86_64-libwinpthread-git
|
||||||
|
pacman -S --noconfirm --needed mingw-w64-x86_64-zlib
|
||||||
|
pacman -S --noconfirm --needed mingw-w64-x86_64-openssl
|
||||||
|
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`
|
||||||
|
|
||||||
|
#### 4. Troubleshooting
|
||||||
|
If `wakunode2.exe` isn't generated:
|
||||||
|
- **Missing Dependencies**: Verify with:
|
||||||
|
`which make cmake gcc g++ rustc cargo python3 upx`
|
||||||
|
If missing, revisit Step 2 or ensure MSYS2 is at `C:\`
|
||||||
|
- **Installation Conflicts**: Remove existing MinGW/MSYS2/Git Bash installations and perform fresh install
|
||||||
|
|
||||||
### Developing
|
### Developing
|
||||||
|
|
||||||
|
|||||||
@ -7,6 +7,7 @@ else:
|
|||||||
|
|
||||||
if defined(windows):
|
if defined(windows):
|
||||||
switch("passL", "rln.lib")
|
switch("passL", "rln.lib")
|
||||||
|
switch("define", "postgres=false")
|
||||||
|
|
||||||
# Automatically add all vendor subdirectories
|
# Automatically add all vendor subdirectories
|
||||||
for dir in walkDir("./vendor"):
|
for dir in walkDir("./vendor"):
|
||||||
|
|||||||
@ -43,12 +43,13 @@ else
|
|||||||
# first, check if submodule version = version in Makefile
|
# first, check if submodule version = version in Makefile
|
||||||
cargo metadata --format-version=1 --no-deps --manifest-path "${build_dir}/rln/Cargo.toml"
|
cargo metadata --format-version=1 --no-deps --manifest-path "${build_dir}/rln/Cargo.toml"
|
||||||
|
|
||||||
if [[ "$OSTYPE" == "msys" || "$OSTYPE" == "win32" ]]; then
|
detected_OS=$(uname -s)
|
||||||
|
if [[ "$detected_OS" == MINGW* || "$detected_OS" == MSYS* ]]; then
|
||||||
submodule_version=$(cargo metadata --format-version=1 --no-deps --manifest-path "${build_dir}/rln/Cargo.toml" | sed -n 's/.*"name":"rln","version":"\([^"]*\)".*/\1/p')
|
submodule_version=$(cargo metadata --format-version=1 --no-deps --manifest-path "${build_dir}/rln/Cargo.toml" | sed -n 's/.*"name":"rln","version":"\([^"]*\)".*/\1/p')
|
||||||
else
|
else
|
||||||
submodule_version=$(cargo metadata --format-version=1 --no-deps --manifest-path "${build_dir}/rln/Cargo.toml" | jq -r '.packages[] | select(.name == "rln") | .version')
|
submodule_version=$(cargo metadata --format-version=1 --no-deps --manifest-path "${build_dir}/rln/Cargo.toml" | jq -r '.packages[] | select(.name == "rln") | .version')
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "v${submodule_version}" != "${rln_version}" ]]; then
|
if [[ "v${submodule_version}" != "${rln_version}" ]]; then
|
||||||
echo "Submodule version (v${submodule_version}) does not match version in Makefile (${rln_version})"
|
echo "Submodule version (v${submodule_version}) does not match version in Makefile (${rln_version})"
|
||||||
echo "Please update the submodule to ${rln_version}"
|
echo "Please update the submodule to ${rln_version}"
|
||||||
|
|||||||
60
scripts/build_wakunode_windows.sh
Executable file
60
scripts/build_wakunode_windows.sh
Executable file
@ -0,0 +1,60 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
echo "- - - - - - - - - - Windows Setup Script - - - - - - - - - -"
|
||||||
|
|
||||||
|
success_count=0
|
||||||
|
failure_count=0
|
||||||
|
|
||||||
|
# Function to execute a command and check its status
|
||||||
|
execute_command() {
|
||||||
|
echo "Executing: $1"
|
||||||
|
if eval "$1"; then
|
||||||
|
echo -e "✓ Command succeeded \n"
|
||||||
|
((success_count++))
|
||||||
|
else
|
||||||
|
echo -e "✗ Command failed \n"
|
||||||
|
((failure_count++))
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "1. -.-.-.-- Set PATH -.-.-.-"
|
||||||
|
export PATH="/c/msys64/usr/bin:/c/msys64/mingw64/bin:/c/msys64/usr/lib:/c/msys64/mingw64/lib:$PATH"
|
||||||
|
|
||||||
|
echo "2. -.-.-.- Verify dependencies -.-.-.-"
|
||||||
|
execute_command "which gcc g++ make cmake cargo upx rustc python"
|
||||||
|
|
||||||
|
echo "3. -.-.-.- Updating submodules -.-.-.-"
|
||||||
|
execute_command "git submodule update --init --recursive"
|
||||||
|
|
||||||
|
echo "4. -.-.-.- Creating tmp directory -.-.-.-"
|
||||||
|
execute_command "mkdir -p tmp"
|
||||||
|
|
||||||
|
echo "5. -.-.-.- Building Nim -.-.-.-"
|
||||||
|
cd vendor/nimbus-build-system/vendor/Nim
|
||||||
|
execute_command "./build_all.bat"
|
||||||
|
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"
|
||||||
|
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"
|
||||||
|
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
|
||||||
|
cd ../../../../
|
||||||
|
|
||||||
|
echo "9. -.-.-.- Building wakunode2 -.-.-.- "
|
||||||
|
execute_command "make wakunode2 LOG_LEVEL=DEBUG V=1 -j8"
|
||||||
|
|
||||||
|
echo "Windows setup completed successfully!"
|
||||||
|
echo "✓ Successful commands: $success_count"
|
||||||
|
echo "✗ Failed commands: $failure_count"
|
||||||
@ -1,68 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -e # Exit immediately if a command exits with a non-zero status
|
|
||||||
|
|
||||||
echo "Windows Setup Script"
|
|
||||||
echo "===================="
|
|
||||||
|
|
||||||
# Function to execute a command and check its status
|
|
||||||
execute_command() {
|
|
||||||
echo "Executing: $1"
|
|
||||||
if eval "$1"; then
|
|
||||||
echo "✓ Command succeeded"
|
|
||||||
else
|
|
||||||
echo "✗ Command failed"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to change directory safely
|
|
||||||
change_directory() {
|
|
||||||
echo "Changing to directory: $1"
|
|
||||||
if cd "$1"; then
|
|
||||||
echo "✓ Changed directory successfully"
|
|
||||||
else
|
|
||||||
echo "✗ Failed to change directory"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to build a component
|
|
||||||
build_component() {
|
|
||||||
local dir="$1"
|
|
||||||
local command="$2"
|
|
||||||
local name="$3"
|
|
||||||
|
|
||||||
echo "Building $name"
|
|
||||||
if [ -d "$dir" ]; then
|
|
||||||
change_directory "$dir"
|
|
||||||
execute_command "$command"
|
|
||||||
change_directory - > /dev/null
|
|
||||||
else
|
|
||||||
echo "✗ $name directory not found: $dir"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
echo "1. Updating submodules"
|
|
||||||
execute_command "git submodule update --init --recursive"
|
|
||||||
|
|
||||||
echo "2. Creating tmp directory"
|
|
||||||
execute_command "mkdir -p tmp"
|
|
||||||
|
|
||||||
echo "3. Building Nim"
|
|
||||||
build_component "vendor/nimbus-build-system/vendor/Nim" "./build_all.bat" "Nim"
|
|
||||||
|
|
||||||
echo "4. Building miniupnpc"
|
|
||||||
build_component "vendor/nim-nat-traversal/vendor/miniupnp/miniupnpc" "./mingw32make.bat" "miniupnpc"
|
|
||||||
|
|
||||||
echo "5. Building libnatpmp"
|
|
||||||
build_component "vendor/nim-nat-traversal/vendor/libnatpmp-upstream" "./build.bat" "libnatpmp"
|
|
||||||
|
|
||||||
echo "6. Building libunwind"
|
|
||||||
build_component "vendor/nim-libbacktrace" "make install/usr/lib/libunwind.a" "libunwind"
|
|
||||||
|
|
||||||
echo "7. Building wakunode2"
|
|
||||||
execute_command "make wakunode2 V=1 NIMFLAGS="-d:disableMarchNative -d:postgres -d:chronicles_colors:none" "
|
|
||||||
|
|
||||||
echo "Windows setup completed successfully!"
|
|
||||||
@ -182,12 +182,15 @@ proc waitQueryToFinish(
|
|||||||
|
|
||||||
let asyncFd = cast[asyncengine.AsyncFD](pqsocket(dbConnWrapper.dbConn))
|
let asyncFd = cast[asyncengine.AsyncFD](pqsocket(dbConnWrapper.dbConn))
|
||||||
|
|
||||||
asyncengine.addReader2(asyncFd, onDataAvailable).isOkOr:
|
when not defined(windows):
|
||||||
dbConnWrapper.futBecomeFree.fail(newException(ValueError, $error))
|
asyncengine.addReader2(asyncFd, onDataAvailable).isOkOr:
|
||||||
return err("failed to add event reader in waitQueryToFinish: " & $error)
|
dbConnWrapper.futBecomeFree.fail(newException(ValueError, $error))
|
||||||
defer:
|
return err("failed to add event reader in waitQueryToFinish: " & $error)
|
||||||
asyncengine.removeReader2(asyncFd).isOkOr:
|
defer:
|
||||||
return err("failed to remove event reader in waitQueryToFinish: " & $error)
|
asyncengine.removeReader2(asyncFd).isOkOr:
|
||||||
|
return err("failed to remove event reader in waitQueryToFinish: " & $error)
|
||||||
|
else:
|
||||||
|
return err("Postgres not supported on Windows")
|
||||||
|
|
||||||
await futDataAvailable
|
await futDataAvailable
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user