mirror of
https://github.com/logos-messaging/logos-messaging-go-bindings.git
synced 2026-07-21 18:20:04 +00:00
* refactor: build against the single liblogosdelivery library logos-delivery#4012 unifies the node lifecycle on logosdelivery_* and ships the full API — Messaging, Reliable Channels, and the low-level Kernel (waku_*) tier — in one liblogosdelivery library, retiring the separate libwaku. Migrate the bindings onto it. - internal/ffi: collapse the two bridges into one internal/ffi/liblogosdelivery over the single library. The kernel wrappers keep calling waku_* (kernel header), the lifecycle now uses logosdelivery_create_node/start_node/ stop_node/destroy (waku_new/start/stop/destroy are gone), events use logosdelivery_set_event_callback. Include liblogosdelivery_kernel.h (which re-exports the stable header) and link -llogosdelivery. Remove internal/ffi/libwaku. - pkg/kernel: repoint at internal/ffi/liblogosdelivery; the Makefile links -llogosdelivery. - CI: build only `make liblogosdelivery`, headers from library/, single -llogosdelivery. Pinned to logos-delivery#4012 until it merges (see the TODO/LOGOS_DELIVERY_REF in pr.yml). The high-level MessagingClient (pkg/messaging) lands in a follow-up PR on top. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(kernel): drop removed config keys + add a runnable example Running against the single liblogosdelivery library surfaced a config drift: the consolidated WakuNodeConf strictly rejects unknown keys, and common.WakuConfig still emitted `legacyStore` (removed upstream, and sent unconditionally) and `host` (renamed to `listenAddress`). That failed node creation, so every kernel test that starts a node failed. Reconcile the config: - drop the LegacyStore field (and its two obsolete test references; the already-skipped TestCheckLegacyStore keeps compiling); - map Host to the `listenAddress` JSON key. Add examples/kernel: a small runnable check that drives the unified lifecycle (logosdelivery_create_node/start/stop/destroy) and a few kernel ops (version, listen addresses, is-online, relay subscribe/unsubscribe) over the single library. `go run ./examples/kernel` prints OK. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(kernel): correct RelayPublish wire format; verify send/receive RelayPublish marshalled the generated protobuf (content_topic), but the library requires the WakuMessage wire format (contentTopic) and rejected it with "Missing required field: contentTopic". Marshal the wire shape explicitly. Turn examples/kernel into an end-to-end send/receive check: two relay nodes on cluster 16 / shard 64, connected via the listen multiaddr, one publishes and the other receives it off MsgChan. Verified against a locally-built liblogosdelivery: prints "send/receive OK". Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * ci: build against logos-delivery master (unpin #4012) logos-delivery#4012 merged, so drop the LOGOS_DELIVERY_REF pin and clone the default branch; the cache key tracks master's HEAD again. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * refactor(ffi): flatten internal/ffi/liblogosdelivery into internal/ffi With a single library there is no bridge to choose between, so the extra subpackage adds nothing: move the bridge to internal/ffi (package ffi) and drop the umbrella doc. pkg/kernel now imports internal/ffi and calls ffi.*. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * test(kernel): add a two-node relay send/receive integration test TestRelaySendReceive connects two relay nodes, publishes a random payload from one and requires the other to receive it — end-to-end over the single library. Compiled by the PR gate; run under `make test` / locally against a built liblogosdelivery. (Replaces the former examples/kernel, removed alongside the ffi flatten.) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * refactor(ffi): keep two files in package ffi, one per header The single library still ships two headers — liblogosdelivery.h (stable Messaging/lifecycle) and liblogosdelivery_kernel.h (low-level waku_*). Mirror that with two files in one package instead of one merged ffi.go: keep the messaging bridge and all the shared plumbing (Handle/RetOK/lifecycle/callbacks/ call) in liblogosdelivery.go, and keep the kernel wrappers in libwaku.go, which reuses the shared call + logosGoCallback. This is the same two files we had, moved into package ffi — a much smaller diff than the merge. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Apply suggestions from code review Co-authored-by: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: Ivan FB <128452529+Ivansete-status@users.noreply.github.com>
69 lines
2.2 KiB
Makefile
69 lines
2.2 KiB
Makefile
# Makefile for Waku Go Bindings
|
|
|
|
# Path to logos-delivery submodule
|
|
export LOGOS_DELIVERY_DIR ?= $(shell pwd)/../../vendor/logos-delivery
|
|
|
|
# Debugging output
|
|
print-paths:
|
|
@echo "LOGOS_DELIVERY_DIR: $(LOGOS_DELIVERY_DIR)"
|
|
@echo "HEADER_PATH: $(LIBWAKU_HEADER_PATH)"
|
|
@echo "LIB_PATH: $(LIBWAKU_LIB_PATH)"
|
|
|
|
# Default paths for libwaku library and headers (can be overridden)
|
|
export LIBWAKU_HEADER_PATH ?= $(LOGOS_DELIVERY_DIR)/library
|
|
export LIBWAKU_LIB_PATH ?= $(LOGOS_DELIVERY_DIR)/build
|
|
|
|
export CGO_CFLAGS := -I$(LIBWAKU_HEADER_PATH)/
|
|
export CGO_LDFLAGS := -L$(LIBWAKU_LIB_PATH)/ -llogosdelivery -Wl,-rpath,$(LIBWAKU_LIB_PATH)/
|
|
|
|
# Expected files
|
|
HEADER_FILE := $(LIBWAKU_HEADER_PATH)/liblogosdelivery.h
|
|
LIB_FILES := $(wildcard $(LIBWAKU_LIB_PATH)/liblogosdelivery.*)
|
|
|
|
.PHONY: all clean prepare build test build-auto test-auto build-libwaku
|
|
|
|
# Validate necessary folders and files
|
|
check-folders:
|
|
@echo Checking libwaku header directory ...
|
|
@if [ -z "$(LIBWAKU_HEADER_PATH)" ]; then \
|
|
echo "ERROR: LIBWAKU_HEADER_PATH not set"; exit 1; \
|
|
fi
|
|
@if [ ! -d "$(LIBWAKU_HEADER_PATH)" ]; then \
|
|
echo "ERROR: Header path does not exist: $(LIBWAKU_HEADER_PATH)"; exit 1; \
|
|
fi
|
|
|
|
@echo Checking libwaku lib directory ...
|
|
@if [ -z "$(LIBWAKU_LIB_PATH)" ]; then \
|
|
echo "ERROR: LIBWAKU_LIB_PATH not set"; exit 1; \
|
|
fi
|
|
@if [ ! -d "$(LIBWAKU_LIB_PATH)" ]; then \
|
|
echo "ERROR: Library path does not exist: $(LIBWAKU_LIB_PATH)"; exit 1; \
|
|
fi
|
|
|
|
@echo Checking for liblogosdelivery.h ...
|
|
@if [ ! -f "$(HEADER_FILE)" ]; then \
|
|
echo "ERROR: liblogosdelivery.h not found at: $(HEADER_FILE)"; exit 1; \
|
|
fi
|
|
|
|
@echo Checking for libwaku library file ...
|
|
@if [ -z "$(LIB_FILES)" ]; then \
|
|
echo "ERROR: No libwaku library file found in: $(LIBWAKU_LIB_PATH)"; exit 1; \
|
|
fi
|
|
|
|
build:
|
|
@echo "Building Logos Messaging Go Bindings (manual)..."
|
|
CGO_CFLAGS="$(CGO_CFLAGS)" CGO_LDFLAGS="$(CGO_LDFLAGS)" go build -o kernel-bindings .
|
|
|
|
test: build
|
|
@echo "Running tests (manual)..."
|
|
@if [ -z "$(TEST)" ]; then \
|
|
CGO_CFLAGS="$(CGO_CFLAGS)" CGO_LDFLAGS="$(CGO_LDFLAGS)" go test .; \
|
|
else \
|
|
CGO_CFLAGS="$(CGO_CFLAGS)" CGO_LDFLAGS="$(CGO_LDFLAGS)" go test . -count=1 -run $(TEST) -v; \
|
|
fi
|
|
|
|
# Clean up generated files
|
|
clean:
|
|
@echo "Cleaning up..."
|
|
@rm -f kernel-bindings
|