From eb8b0aec95e7e15a141f559c2d6216c08b0b4014 Mon Sep 17 00:00:00 2001 From: Igor Sirotin Date: Wed, 24 Sep 2025 22:34:00 +0100 Subject: [PATCH 1/3] chore: provide custom nwaku --- waku/Makefile | 7 +++++-- waku/nwaku.go | 6 ++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/waku/Makefile b/waku/Makefile index b3b3ebc..2a06919 100644 --- a/waku/Makefile +++ b/waku/Makefile @@ -1,7 +1,7 @@ # Makefile for Waku Go Bindings # Directories -THIRD_PARTY_DIR := ../third_party +THIRD_PARTY_DIR := $(shell pwd)/../third_party NWAKU_REPO := https://github.com/waku-org/nwaku NWAKU_DIR := $(THIRD_PARTY_DIR)/nwaku @@ -31,7 +31,10 @@ build-libwaku: prepare @cd $(NWAKU_DIR) && make libwaku # Build Waku Go Bindings -build: build-libwaku + +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: @echo "Building Waku Go Bindings..." go build ./... diff --git a/waku/nwaku.go b/waku/nwaku.go index fbeb0f0..9f97131 100644 --- a/waku/nwaku.go +++ b/waku/nwaku.go @@ -1,10 +1,7 @@ package waku /* - #cgo LDFLAGS: -L../third_party/nwaku/build/ -lwaku - #cgo LDFLAGS: -L../third_party/nwaku -Wl,-rpath,../third_party/nwaku/build/ - - #include "../third_party/nwaku/library/libwaku.h" + #include "libwaku.h" #include #include @@ -348,6 +345,7 @@ import ( "github.com/multiformats/go-multiaddr" "github.com/waku-org/go-waku/waku/v2/protocol/pb" "github.com/waku-org/go-waku/waku/v2/utils" + "github.com/waku-org/waku-go-bindings/waku/common" ) From f78f4286cb37ec0851181da8bb6ed7d329f14e7b Mon Sep 17 00:00:00 2001 From: Igor Sirotin Date: Thu, 25 Sep 2025 09:10:15 +0100 Subject: [PATCH 2/3] chore: gitignore .idea --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 0dc817b..b714513 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,6 @@ waku/store.sqlite3-wal waku/test_repeated_start_stop.log third_party/ + +# JetBrains IDEs +.idea/ \ No newline at end of file From 6a9b9ab2317da60fb05aca8215187dbb9484ccdb Mon Sep 17 00:00:00 2001 From: Igor Sirotin Date: Fri, 26 Sep 2025 14:58:18 +0100 Subject: [PATCH 3/3] docs: new library integration --- README.md | 87 ++++++++++++++++++++++++++------------------------- waku/Makefile | 19 ++--------- 2 files changed, 46 insertions(+), 60 deletions(-) diff --git a/README.md b/README.md index 206f5b7..77b812d 100644 --- a/README.md +++ b/README.md @@ -1,51 +1,52 @@ # Waku Go Bindings -This repository provides Go bindings for the Waku library, enabling seamless integration with Go projects. +Go bindings for the Waku library. -## Installation - -To build the required dependencies for this module, the `make` command needs to be executed. If you are integrating this module into another project via `go get`, ensure that you navigate to the `waku-go-bindings` module directory and run `make`. - -### Steps to Install - -Follow these steps to install and set up the module: - -1. Make sure your system has the [prerequisites](https://docs.waku.org/guides/nwaku/build-source#prerequisites) to run a local nwaku node - -2. Retrieve the module using `go get`: - ``` - go get -u github.com/waku-org/waku-go-bindings - ``` -3. Navigate to the module's directory: - ``` - cd $(go list -m -f '{{.Dir}}' github.com/waku-org/waku-go-bindings) - ``` -4. Prepare third_party directory and clone nwaku - ``` - sudo mkdir third_party - sudo chown $USER third_party - ``` -5. Build the dependencies: - ``` - make -C waku - ``` - -Now the module is ready for use in your project. - -### Note - -In order to easily build the libwaku library on demand, it is recommended to add the following target in your project's Makefile: +## Install ``` -LIBWAKU_DEP_PATH=$(shell go list -m -f '{{.Dir}}' github.com/waku-org/waku-go-bindings) - -buildlib: - cd $(LIBWAKU_DEP_PATH) &&\ - sudo mkdir -p third_party &&\ - sudo chown $(USER) third_party &&\ - make -C waku +go get -u github.com/waku-org/waku-go-bindings ``` -## Example Usage +## Dependencies -For an example on how to use this package, please take a look at our [example-go-bindings](https://github.com/gabrielmer/example-waku-go-bindings) repo +This repository doesn't download or build `nwaku`. You must provide `libwaku` and its headers. + +To do so, you can: +- Build `libwaku` from https://github.com/waku-org/nwaku. +- Point `cgo` to the headers and compiled library when building your project. + +Example environment setup (adjust paths to your nwaku checkout): +``` +export NWAKU_DIR=/path/to/nwaku +export CGO_CFLAGS="-I${NWAKU_DIR}/library" +export CGO_LDFLAGS="-L${NWAKU_DIR}/build -lwaku -Wl,-rpath,${NWAKU_DIR}/build" +``` + +Such setup would look like this in a `Makefile`: +```Makefile +NWAKU_DIR ?= /path/to/nwaku +CGO_CFLAGS = -I$(NWAKU_DIR)/library +CGO_LDFLAGS = -L$(NWAKU_DIR)/build -lwaku -Wl,-rpath,$(NWAKU_DIR)/build + +build: ## Your project build command + go build ./... +``` + +For a reference integration, see how `status-go` wires `CGO_CFLAGS` and `CGO_LDFLAGS` in its build setup. + +NOTE: If your project is itself used as a Go dependency, all its clients will have to follow the same nwaku setup. + +## Development + +When working on this repository itself, `nwaku` is included as a git submodule for convenience. + +- Initialize and update the submodule, then build `libwaku` + ```sh + git submodule update --init --recursive + make -C waku build-libwaku + ``` +- Build the project. Submodule paths are used by default to find `libwaku`. + ```shell + make -C waku build + ``` diff --git a/waku/Makefile b/waku/Makefile index 2a06919..b0f68a9 100644 --- a/waku/Makefile +++ b/waku/Makefile @@ -5,28 +5,13 @@ THIRD_PARTY_DIR := $(shell pwd)/../third_party NWAKU_REPO := https://github.com/waku-org/nwaku NWAKU_DIR := $(THIRD_PARTY_DIR)/nwaku -.PHONY: all clean prepare build-libwaku build +.PHONY: all clean build-libwaku build # Default target all: build -# Prepare third_party directory and clone nwaku -prepare: - @echo "Creating third_party directory..." - @mkdir -p $(THIRD_PARTY_DIR) - - @echo "Cloning nwaku repository..." - @if [ ! -d "$(NWAKU_DIR)" ]; then \ - cd $(THIRD_PARTY_DIR) && \ - git clone $(NWAKU_REPO) && \ - cd $(NWAKU_DIR) && \ - make update; \ - else \ - echo "nwaku repository already exists."; \ - fi - # Build libwaku -build-libwaku: prepare +build-libwaku: @echo "Building libwaku..." @cd $(NWAKU_DIR) && make libwaku