From 9f277e38421f6cac8da1a30efe4a0f1591425cff Mon Sep 17 00:00:00 2001 From: Igor Sirotin Date: Tue, 30 Sep 2025 12:40:26 +0100 Subject: [PATCH] Revert "chore: use externally provided nwaku" --- .gitignore | 3 -- README.md | 87 +++++++++++++++++++++++++-------------------------- waku/Makefile | 26 ++++++++++----- waku/nwaku.go | 6 ++-- 4 files changed, 66 insertions(+), 56 deletions(-) diff --git a/.gitignore b/.gitignore index b714513..0dc817b 100644 --- a/.gitignore +++ b/.gitignore @@ -32,6 +32,3 @@ waku/store.sqlite3-wal waku/test_repeated_start_stop.log third_party/ - -# JetBrains IDEs -.idea/ \ No newline at end of file diff --git a/README.md b/README.md index 77b812d..206f5b7 100644 --- a/README.md +++ b/README.md @@ -1,52 +1,51 @@ # Waku Go Bindings -Go bindings for the Waku library. +This repository provides Go bindings for the Waku library, enabling seamless integration with Go projects. -## Install +## 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: ``` -go get -u github.com/waku-org/waku-go-bindings +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 ``` -## Dependencies +## Example Usage -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 - ``` +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 diff --git a/waku/Makefile b/waku/Makefile index b0f68a9..b3b3ebc 100644 --- a/waku/Makefile +++ b/waku/Makefile @@ -1,25 +1,37 @@ # Makefile for Waku Go Bindings # Directories -THIRD_PARTY_DIR := $(shell pwd)/../third_party +THIRD_PARTY_DIR := ../third_party NWAKU_REPO := https://github.com/waku-org/nwaku NWAKU_DIR := $(THIRD_PARTY_DIR)/nwaku -.PHONY: all clean build-libwaku build +.PHONY: all clean prepare 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: +build-libwaku: prepare @echo "Building libwaku..." @cd $(NWAKU_DIR) && make 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: build-libwaku @echo "Building Waku Go Bindings..." go build ./... diff --git a/waku/nwaku.go b/waku/nwaku.go index 9f97131..fbeb0f0 100644 --- a/waku/nwaku.go +++ b/waku/nwaku.go @@ -1,7 +1,10 @@ package waku /* - #include "libwaku.h" + #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 #include @@ -345,7 +348,6 @@ 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" )