From aa64c47d2bf39b7462407b8b228d6d7cb83a5f29 Mon Sep 17 00:00:00 2001 From: Igor Sirotin Date: Thu, 30 Oct 2025 10:59:13 +0000 Subject: [PATCH] chore: use externally provided nwaku (#95) * chore: use externally provided nwaku The fundamental idea is that the nwaku repository should be provided beforehand before building waku-go-bindings * fix: include libwaku with brackets --------- Co-authored-by: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> --- .gitignore | 3 ++ README.md | 87 ++++++++++++++++++++++++++------------------------- waku/Makefile | 26 +++++---------- waku/nwaku.go | 6 ++-- 4 files changed, 56 insertions(+), 66 deletions(-) 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 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 b3b3ebc..b0f68a9 100644 --- a/waku/Makefile +++ b/waku/Makefile @@ -1,37 +1,25 @@ # 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 -.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 # 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..5fa6287 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 #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" )