From c03874e35a635b2e91098cb5df38fca440e0c1d1 Mon Sep 17 00:00:00 2001 From: Igor Sirotin Date: Mon, 29 Sep 2025 21:45:23 +0100 Subject: [PATCH] feat: nwaku download script --- scripts/download_nwaku.sh | 37 +++++++++++++++++++++++++++++++++++++ waku/Makefile | 33 +++++++++++++++++++++++++++------ 2 files changed, 64 insertions(+), 6 deletions(-) create mode 100755 scripts/download_nwaku.sh diff --git a/scripts/download_nwaku.sh b/scripts/download_nwaku.sh new file mode 100755 index 0000000..a1b7a35 --- /dev/null +++ b/scripts/download_nwaku.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +set -euo pipefail + +VERSION="${VERSION:-v0.36.0}" +NWAKU_DIR="../third_party/nwaku" +OS="$(uname | tr '[:upper:]' '[:lower:]')" +ARCH="$(uname -m)" +EXT="so" + +if [ ! -d "$NWAKU_DIR" ]; then + echo "Error: Directory $NWAKU_DIR does not exist. Please create it first." + exit 1 +fi + +case "$OS" in + darwin) OS="darwin" ;; + linux) OS="linux" ;; + *) echo "Unsupported OS: $OS"; exit 1 ;; +esac + +case "$ARCH" in + x86_64|amd64) ARCH="x86_64" ;; + arm64|aarch64) ARCH="arm64" ;; + *) echo "Unsupported ARCH: $ARCH"; exit 1 ;; +esac + +URL_BASE="https://github.com/waku-org/nwaku/releases/download" +URL="${URL_BASE}/${VERSION}/libwaku-${VERSION}-${OS}-${ARCH}.${EXT}" +HEADER_URL="${URL_BASE}/${VERSION}/libwaku.h" + +echo "Downloading nwaku $VERSION for $OS-$ARCH..." + +echo "Downloading library header from $HEADER_URL" +curl -sfL -o "$NWAKU_DIR/libwaku.h" "$HEADER_URL" + +echo "Downloading library binary from $URL" +curl -sfL -o "$NWAKU_DIR/libwaku.${EXT}" "$URL" \ No newline at end of file diff --git a/waku/Makefile b/waku/Makefile index b0f68a9..569adfe 100644 --- a/waku/Makefile +++ b/waku/Makefile @@ -1,15 +1,36 @@ # Makefile for Waku Go Bindings -# Directories +# Determine OS and set library extension +UNAME_S := $(shell uname -s) +ifeq ($(UNAME_S),Linux) + EXT := so +else ifeq ($(UNAME_S),Darwin) + EXT := so +else ifeq ($(OS),Windows_NT) + EXT := dll +else + $(error Unsupported OS: $(UNAME_S)) +endif + THIRD_PARTY_DIR := $(shell pwd)/../third_party NWAKU_REPO := https://github.com/waku-org/nwaku NWAKU_DIR := $(THIRD_PARTY_DIR)/nwaku +LIBWAKU_HEADER := $(NWAKU_DIR)/libwaku.h +LIBWAKU := $(NWAKU_DIR)/libwaku.${EXT} -.PHONY: all clean build-libwaku build +.PHONY: all clean build libwaku # Default target all: build +# Prepare third_party directory and clone nwaku +# NOTE: Currently we download a library release. +# In the future we should get nwaku from Nimble package manager. +$(LIBWAKU) $(LIBWAKU_HEADER): + @../scripts/download_nwaku.sh + +libwaku: $(LIBWAKU) $(LIBWAKU_HEADER) + # Build libwaku build-libwaku: @echo "Building libwaku..." @@ -17,14 +38,14 @@ build-libwaku: # Build Waku Go Bindings -build: export CGO_CFLAGS = "-I${NWAKU_DIR}/library/" -build: export CGO_LDFLAGS = "-L${NWAKU_DIR}/build/ -lwaku -L${NWAKU_DIR} -Wl,-rpath,${NWAKU_DIR}/build/" -build: +build: export CGO_CFLAGS = "-I${NWAKU_DIR}" +build: export CGO_LDFLAGS = "-L${NWAKU_DIR} -lwaku -L${NWAKU_DIR} -Wl,-rpath,${NWAKU_DIR}" +build: libwaku @echo "Building Waku Go Bindings..." go build ./... # Clean up generated files clean: @echo "Cleaning up..." - @rm -rf $(THIRD_PARTY_DIR) + @rm -f $(LIBWAKU_HEADER) $(LIBWAKU) @rm -f waku-go-bindings \ No newline at end of file