# Copyright (c) 2022 Status Research & Development GmbH. Licensed under # either of: # - Apache License, version 2.0 # - MIT license # at your option. This file may not be copied, modified, or distributed except # according to those terms. # Build system configuration (no longer using nimbus-build-system) FORMAT_MSG := "\x1B[95mFormatting:\x1B[39m" BUILD_MSG := "\x1B[92mBuilding:\x1B[39m" INFO_MSG := "\x1B[94mInfo:\x1B[39m" WARN_MSG := "\x1B[93mWarning:\x1B[39m" # Nim binary detection NIM_BINARY := $(shell which nim 2>/dev/null) ifeq ($(NIM_BINARY),) $(error Nim compiler not found. Please install Nim >= 2.2.4) endif # Nimble binary detection NIMBLE_BINARY := $(shell which nimble 2>/dev/null) ifeq ($(NIMBLE_BINARY),) $(error Nimble not found. Please install Nimble) endif # Environment script (simplified - just use current env) ENV_SCRIPT := # Handle output HANDLE_OUTPUT := ifneq ($(V), 1) HANDLE_OUTPUT := &> /dev/null endif # Determine the OS detected_OS := $(shell uname -s) ifneq (,$(findstring MINGW,$(detected_OS))) detected_OS := Windows endif ifeq ($(detected_OS),Windows) # Update MINGW_PATH to standard MinGW location MINGW_PATH = /mingw64 NIM_PARAMS += --passC:"-I$(MINGW_PATH)/include" NIM_PARAMS += --passL:"-L$(MINGW_PATH)/lib" NIM_PARAMS += --passL:"-Lvendor/nim-nat-traversal/vendor/miniupnp/miniupnpc" NIM_PARAMS += --passL:"-Lvendor/nim-nat-traversal/vendor/libnatpmp-upstream" LIBS = -lws2_32 -lbcrypt -liphlpapi -luserenv -lntdll -lminiupnpc -lnatpmp -lpq NIM_PARAMS += $(foreach lib,$(LIBS),--passL:"$(lib)") export PATH := /c/msys64/usr/bin:/c/msys64/mingw64/bin:/c/msys64/usr/lib:/c/msys64/mingw64/lib:$(PATH) endif ########## ## Main ## ########## .PHONY: all test update clean # default target, because it's the first one that doesn't start with '.' all: | wakunode2 example2 chat2 chat2bridge libwaku test_file := $(word 2,$(MAKECMDGOALS)) define test_name $(shell echo '$(MAKECMDGOALS)' | cut -d' ' -f3-) endef test: ifeq ($(strip $(test_file)),) $(MAKE) testcommon $(MAKE) testwaku else $(MAKE) compile-test TEST_FILE="$(test_file)" TEST_NAME="$(call test_name)" endif # this prevents make from erroring on unknown targets like "Index" %: @true # Build directory build: mkdir -p build waku.nims: ln -s waku.nimble $@ # Update dependencies using Nimble # This is the ONLY target that should install/update Nimble packages update: | waku.nims @echo -e $(INFO_MSG) "Updating vendor submodules..." git submodule update --init --recursive @echo -e $(INFO_MSG) "Installing/updating Nimble dependencies..." nimble install --depsOnly -y @echo -e $(INFO_MSG) "Setting up Nimble paths..." nimble setup @echo -e $(INFO_MSG) "Building nph formatter..." $(MAKE) build-nph @echo -e $(INFO_MSG) "Update complete!" clean: @echo -e $(INFO_MSG) "Cleaning Nimble package cache..." rm -rf ~/.nimble/pkgs2/* rm -rf ~/.nimble/pkgcache/* @echo -e $(INFO_MSG) "Cleaning build artifacts..." rm -rf build @echo -e $(INFO_MSG) "Clean complete!" ## Possible values: prod; debug TARGET ?= prod ## Git version GIT_VERSION ?= $(shell git describe --abbrev=6 --always --tags) ## Compilation parameters. If defined in the CLI the assignments won't be executed NIM_PARAMS := $(NIM_PARAMS) -d:git_version=\"$(GIT_VERSION)\" # nim-ffi is now installed via Nimble as 'ffi' package ## Heaptracker options HEAPTRACKER ?= 0 HEAPTRACKER_INJECT ?= 0 ifeq ($(HEAPTRACKER), 1) # Assumes Nim's lib/system/alloc.nim is patched! TARGET := debug-with-heaptrack ifeq ($(HEAPTRACKER_INJECT), 1) # the Nim compiler will load 'libheaptrack_inject.so' HEAPTRACK_PARAMS := -d:heaptracker -d:heaptracker_inject NIM_PARAMS := $(NIM_PARAMS) -d:heaptracker -d:heaptracker_inject else # the Nim compiler will load 'libheaptrack_preload.so' HEAPTRACK_PARAMS := -d:heaptracker NIM_PARAMS := $(NIM_PARAMS) -d:heaptracker endif endif ## end of Heaptracker options ################## ## Dependencies ## ################## .PHONY: deps libbacktrace FOUNDRY_VERSION := 1.5.0 PNPM_VERSION := 10.23.0 rustup: ifeq (, $(shell which cargo)) # Install Rustup if it's not installed # -y: Assume "yes" for all prompts # --default-toolchain stable: Install the stable toolchain curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable endif rln-deps: rustup ./scripts/install_rln_tests_dependencies.sh $(FOUNDRY_VERSION) $(PNPM_VERSION) # Check dependencies are ready (does NOT install packages) # Run 'make update' first to install/update Nimble packages deps: | waku.nims @echo -e $(INFO_MSG) "Dependencies check passed" @echo -e $(INFO_MSG) "If you haven't run 'make update' yet, please do so to install Nimble packages" ### nim-libbacktrace # "-d:release" implies "--stacktrace:off" and it cannot be added to config.nims ifeq ($(DEBUG), 0) NIM_PARAMS := $(NIM_PARAMS) -d:release else NIM_PARAMS := $(NIM_PARAMS) -d:debug endif ifeq ($(USE_LIBBACKTRACE), 0) NIM_PARAMS := $(NIM_PARAMS) -d:disable_libbacktrace endif # enable experimental exit is dest feature in libp2p mix NIM_PARAMS := $(NIM_PARAMS) -d:libp2p_mix_experimental_exit_is_dest # Nimble packages directory NIMBLE_PKGS_DIR := $(shell nimble path 2>/dev/null | head -1 | xargs dirname 2>/dev/null || echo "$(HOME)/.nimble/pkgs2") # libbacktrace is now installed via Nimble, build native parts libbacktrace: @if [ -d "$(NIMBLE_PKGS_DIR)/nim-libbacktrace-"* ]; then \ $(MAKE) -C $$(ls -d $(NIMBLE_PKGS_DIR)/nim-libbacktrace-* | head -1) --no-print-directory BUILD_CXX_LIB=0 2>/dev/null || true; \ fi clean-libbacktrace: @echo "libbacktrace cleanup handled by nimble" # Libbacktrace is optional - disable by default with Nimble # To enable: make USE_LIBBACKTRACE=1 USE_LIBBACKTRACE ?= 0 ifneq ($(USE_LIBBACKTRACE), 0) deps: | libbacktrace endif ifeq ($(POSTGRES), 1) NIM_PARAMS := $(NIM_PARAMS) -d:postgres -d:nimDebugDlOpen endif ifeq ($(DEBUG_DISCV5), 1) NIM_PARAMS := $(NIM_PARAMS) -d:debugDiscv5 endif clean: | clean-libbacktrace ################## ## RLN ## ################## .PHONY: librln LIBRLN_BUILDDIR := $(CURDIR)/vendor/zerokit LIBRLN_VERSION := v0.9.0 ifeq ($(detected_OS),Windows) LIBRLN_FILE := rln.lib else LIBRLN_FILE := librln_$(LIBRLN_VERSION).a endif $(LIBRLN_FILE): echo -e $(BUILD_MSG) "$@" && \ ./scripts/build_rln.sh $(LIBRLN_BUILDDIR) $(LIBRLN_VERSION) $(LIBRLN_FILE) librln: | $(LIBRLN_FILE) $(eval NIM_PARAMS += --passL:$(LIBRLN_FILE) --passL:-lm) clean-librln: cargo clean --manifest-path vendor/zerokit/rln/Cargo.toml rm -f $(LIBRLN_FILE) # Extend clean target clean: | clean-librln ################# ## Waku Common ## ################# .PHONY: testcommon testcommon: | build deps echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim testcommon $(NIM_PARAMS) waku.nims ########## ## Waku ## ########## .PHONY: testwaku wakunode2 testwakunode2 example2 chat2 chat2bridge liteprotocoltester # install rln-deps only for the testwaku target testwaku: | build deps rln-deps librln echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim test -d:os=$(shell uname) $(NIM_PARAMS) waku.nims wakunode2: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ \ $(ENV_SCRIPT) nim wakunode2 $(NIM_PARAMS) waku.nims benchmarks: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim benchmarks $(NIM_PARAMS) waku.nims testwakunode2: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim testwakunode2 $(NIM_PARAMS) waku.nims example2: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim example2 $(NIM_PARAMS) waku.nims chat2: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim chat2 $(NIM_PARAMS) waku.nims chat2mix: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim chat2mix $(NIM_PARAMS) waku.nims rln-db-inspector: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim rln_db_inspector $(NIM_PARAMS) waku.nims chat2bridge: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim chat2bridge $(NIM_PARAMS) waku.nims liteprotocoltester: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim liteprotocoltester $(NIM_PARAMS) waku.nims lightpushwithmix: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim lightpushwithmix $(NIM_PARAMS) waku.nims build/%: | build deps librln echo -e $(BUILD_MSG) "build/$*" && \ $(ENV_SCRIPT) nim buildone $(NIM_PARAMS) waku.nims $* compile-test: | build deps librln echo -e $(BUILD_MSG) "$(TEST_FILE)" "\"$(TEST_NAME)\"" && \ $(ENV_SCRIPT) nim buildTest $(NIM_PARAMS) waku.nims $(TEST_FILE) && \ $(ENV_SCRIPT) nim execTest $(NIM_PARAMS) waku.nims $(TEST_FILE) "\"$(TEST_NAME)\""; \ ################ ## Waku tools ## ################ .PHONY: tools wakucanary networkmonitor tools: networkmonitor wakucanary wakucanary: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim wakucanary $(NIM_PARAMS) waku.nims networkmonitor: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim networkmonitor $(NIM_PARAMS) waku.nims ############ ## Format ## ############ .PHONY: build-nph install-nph clean-nph print-nph-path # Default location for nph binary shall be next to nim binary to make it available on the path. NPH:=$(shell dirname $(NIM_BINARY))/nph # nph is installed via Nimble, find it in nimble bin directory NIMBLE_BIN_DIR := $(shell nimble path 2>/dev/null | head -1 | xargs dirname 2>/dev/null)/../bin NPH_NIMBLE := $(NIMBLE_BIN_DIR)/nph build-nph: | build deps ifeq ("$(wildcard $(NPH))","") @echo -e $(INFO_MSG) "Installing nph via Nimble..." nimble install -y nph @# copy binary next to Nim compiler if not already there @if [ ! -f "$(NPH)" ]; then \ NPH_INSTALLED=$$(command -v nph 2>/dev/null || true); \ [ -n "$$NPH_INSTALLED" ] && cp "$$NPH_INSTALLED" "$(NPH)"; \ fi @echo "nph utility is available at $(NPH)" else @echo "nph utility already exists at $(NPH)" endif GIT_PRE_COMMIT_HOOK := .git/hooks/pre-commit install-nph: build-nph ifeq ("$(wildcard $(GIT_PRE_COMMIT_HOOK))","") cp ./scripts/git_pre_commit_format.sh $(GIT_PRE_COMMIT_HOOK) else echo "$(GIT_PRE_COMMIT_HOOK) already present, will NOT override" exit 1 endif nph/%: | build-nph echo -e $(FORMAT_MSG) "nph/$*" && \ $(NPH) $* clean-nph: rm -f $(NPH) # To avoid hardcoding nph binary location in several places print-nph-path: echo "$(NPH)" clean: | clean-nph ################### ## Documentation ## ################### .PHONY: docs coverage # TODO: Remove unused target docs: | build deps echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim doc --run --index:on --project --out:.gh-pages waku/waku.nim waku.nims coverage: echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) ./scripts/run_cov.sh -y ##################### ## Container image ## ##################### # -d:insecure - Necessary to enable Prometheus HTTP endpoint for metrics # -d:chronicles_colors:none - Necessary to disable colors in logs for Docker DOCKER_IMAGE_NIMFLAGS ?= -d:chronicles_colors:none -d:insecure -d:postgres DOCKER_IMAGE_NIMFLAGS := $(DOCKER_IMAGE_NIMFLAGS) $(HEAPTRACK_PARAMS) # build a docker image for the fleet docker-image: MAKE_TARGET ?= wakunode2 docker-image: DOCKER_IMAGE_TAG ?= $(MAKE_TARGET)-$(GIT_VERSION) docker-image: DOCKER_IMAGE_NAME ?= wakuorg/nwaku:$(DOCKER_IMAGE_TAG) docker-image: docker build \ --build-arg="MAKE_TARGET=$(MAKE_TARGET)" \ --build-arg="NIMFLAGS=$(DOCKER_IMAGE_NIMFLAGS)" \ --build-arg="NIM_COMMIT=$(DOCKER_NIM_COMMIT)" \ --build-arg="LOG_LEVEL=$(LOG_LEVEL)" \ --build-arg="HEAPTRACK_BUILD=$(HEAPTRACKER)" \ --label="commit=$(shell git rev-parse HEAD)" \ --label="version=$(GIT_VERSION)" \ --target $(TARGET) \ --tag $(DOCKER_IMAGE_NAME) . docker-quick-image: MAKE_TARGET ?= wakunode2 docker-quick-image: DOCKER_IMAGE_TAG ?= $(MAKE_TARGET)-$(GIT_VERSION) docker-quick-image: DOCKER_IMAGE_NAME ?= wakuorg/nwaku:$(DOCKER_IMAGE_TAG) docker-quick-image: NIM_PARAMS := $(NIM_PARAMS) -d:chronicles_colors:none -d:insecure -d:postgres --passL:$(LIBRLN_FILE) --passL:-lm docker-quick-image: | build deps librln wakunode2 docker build \ --build-arg="MAKE_TARGET=$(MAKE_TARGET)" \ --tag $(DOCKER_IMAGE_NAME) \ --target $(TARGET) \ --file docker/binaries/Dockerfile.bn.local \ . docker-push: docker push $(DOCKER_IMAGE_NAME) #################################### ## Container lite-protocol-tester ## #################################### # -d:insecure - Necessary to enable Prometheus HTTP endpoint for metrics # -d:chronicles_colors:none - Necessary to disable colors in logs for Docker DOCKER_LPT_NIMFLAGS ?= -d:chronicles_colors:none -d:insecure # build a docker image for the fleet docker-liteprotocoltester: DOCKER_LPT_TAG ?= latest docker-liteprotocoltester: DOCKER_LPT_NAME ?= wakuorg/liteprotocoltester:$(DOCKER_LPT_TAG) # --no-cache docker-liteprotocoltester: docker build \ --build-arg="MAKE_TARGET=liteprotocoltester" \ --build-arg="NIMFLAGS=$(DOCKER_LPT_NIMFLAGS)" \ --build-arg="NIM_COMMIT=$(DOCKER_NIM_COMMIT)" \ --build-arg="LOG_LEVEL=TRACE" \ --label="commit=$(shell git rev-parse HEAD)" \ --label="version=$(GIT_VERSION)" \ --target $(if $(filter deploy,$(DOCKER_LPT_TAG)),deployment_lpt,standalone_lpt) \ --tag $(DOCKER_LPT_NAME) \ --file apps/liteprotocoltester/Dockerfile.liteprotocoltester.compile \ . docker-quick-liteprotocoltester: DOCKER_LPT_TAG ?= latest docker-quick-liteprotocoltester: DOCKER_LPT_NAME ?= wakuorg/liteprotocoltester:$(DOCKER_LPT_TAG) docker-quick-liteprotocoltester: | liteprotocoltester docker build \ --tag $(DOCKER_LPT_NAME) \ --file apps/liteprotocoltester/Dockerfile.liteprotocoltester \ . docker-liteprotocoltester-push: docker push $(DOCKER_LPT_NAME) ################ ## C Bindings ## ################ .PHONY: cbindings cwaku_example libwaku STATIC ?= 0 BUILD_COMMAND ?= libwakuDynamic ifeq ($(detected_OS),Windows) LIB_EXT_DYNAMIC = dll LIB_EXT_STATIC = lib else ifeq ($(detected_OS),Darwin) LIB_EXT_DYNAMIC = dylib LIB_EXT_STATIC = a else ifeq ($(detected_OS),Linux) LIB_EXT_DYNAMIC = so LIB_EXT_STATIC = a endif LIB_EXT := $(LIB_EXT_DYNAMIC) ifeq ($(STATIC), 1) LIB_EXT = $(LIB_EXT_STATIC) BUILD_COMMAND = libwakuStatic endif libwaku: | build deps librln echo -e $(BUILD_MSG) "build/$@.$(LIB_EXT)" && $(ENV_SCRIPT) nim $(BUILD_COMMAND) $(NIM_PARAMS) waku.nims $@.$(LIB_EXT) ##################### ## Mobile Bindings ## ##################### .PHONY: libwaku-android \ libwaku-android-precheck \ libwaku-android-arm64 \ libwaku-android-amd64 \ libwaku-android-x86 \ libwaku-android-arm \ rebuild-nat-libs \ build-libwaku-for-android-arch ANDROID_TARGET ?= 30 ifeq ($(detected_OS),Darwin) ANDROID_TOOLCHAIN_DIR := $(ANDROID_NDK_HOME)/toolchains/llvm/prebuilt/darwin-x86_64 else ANDROID_TOOLCHAIN_DIR := $(ANDROID_NDK_HOME)/toolchains/llvm/prebuilt/linux-x86_64 endif rebuild-nat-libs: | clean-cross nat-libs libwaku-android-precheck: ifndef ANDROID_NDK_HOME $(error ANDROID_NDK_HOME is not set) endif build-libwaku-for-android-arch: $(MAKE) rebuild-nat-libs CC=$(ANDROID_TOOLCHAIN_DIR)/bin/$(ANDROID_COMPILER) && \ ./scripts/build_rln_android.sh $(CURDIR)/build $(LIBRLN_BUILDDIR) $(LIBRLN_VERSION) $(CROSS_TARGET) $(ABIDIR) && \ CPU=$(CPU) ABIDIR=$(ABIDIR) ANDROID_ARCH=$(ANDROID_ARCH) ANDROID_COMPILER=$(ANDROID_COMPILER) ANDROID_TOOLCHAIN_DIR=$(ANDROID_TOOLCHAIN_DIR) $(ENV_SCRIPT) nim libWakuAndroid $(NIM_PARAMS) waku.nims libwaku-android-arm64: ANDROID_ARCH=aarch64-linux-android libwaku-android-arm64: CPU=arm64 libwaku-android-arm64: ABIDIR=arm64-v8a libwaku-android-arm64: | libwaku-android-precheck build deps $(MAKE) build-libwaku-for-android-arch ANDROID_ARCH=$(ANDROID_ARCH) CROSS_TARGET=$(ANDROID_ARCH) CPU=$(CPU) ABIDIR=$(ABIDIR) ANDROID_COMPILER=$(ANDROID_ARCH)$(ANDROID_TARGET)-clang libwaku-android-amd64: ANDROID_ARCH=x86_64-linux-android libwaku-android-amd64: CPU=amd64 libwaku-android-amd64: ABIDIR=x86_64 libwaku-android-amd64: | libwaku-android-precheck build deps $(MAKE) build-libwaku-for-android-arch ANDROID_ARCH=$(ANDROID_ARCH) CROSS_TARGET=$(ANDROID_ARCH) CPU=$(CPU) ABIDIR=$(ABIDIR) ANDROID_COMPILER=$(ANDROID_ARCH)$(ANDROID_TARGET)-clang libwaku-android-x86: ANDROID_ARCH=i686-linux-android libwaku-android-x86: CPU=i386 libwaku-android-x86: ABIDIR=x86 libwaku-android-x86: | libwaku-android-precheck build deps $(MAKE) build-libwaku-for-android-arch ANDROID_ARCH=$(ANDROID_ARCH) CROSS_TARGET=$(ANDROID_ARCH) CPU=$(CPU) ABIDIR=$(ABIDIR) ANDROID_COMPILER=$(ANDROID_ARCH)$(ANDROID_TARGET)-clang libwaku-android-arm: ANDROID_ARCH=armv7a-linux-androideabi libwaku-android-arm: CPU=arm libwaku-android-arm: ABIDIR=armeabi-v7a libwaku-android-arm: | libwaku-android-precheck build deps # cross-rs target architecture name does not match the one used in android $(MAKE) build-libwaku-for-android-arch ANDROID_ARCH=$(ANDROID_ARCH) CROSS_TARGET=armv7-linux-androideabi CPU=$(CPU) ABIDIR=$(ABIDIR) ANDROID_COMPILER=$(ANDROID_ARCH)$(ANDROID_TARGET)-clang libwaku-android: $(MAKE) libwaku-android-amd64 $(MAKE) libwaku-android-arm64 $(MAKE) libwaku-android-x86 # This target is disabled because on recent versions of cross-rs complain with the following error # relocation R_ARM_THM_ALU_PREL_11_0 cannot be used against symbol 'stack_init_trampoline_return'; recompile with -fPIC # It's likely this architecture is not used so we might just not support it. # $(MAKE) libwaku-android-arm ################# ## iOS Bindings # ################# .PHONY: libwaku-ios-precheck \ libwaku-ios-device \ libwaku-ios-simulator \ libwaku-ios IOS_DEPLOYMENT_TARGET ?= 18.0 # Get SDK paths dynamically using xcrun define get_ios_sdk_path $(shell xcrun --sdk $(1) --show-sdk-path 2>/dev/null) endef libwaku-ios-precheck: ifeq ($(detected_OS),Darwin) @command -v xcrun >/dev/null 2>&1 || { echo "Error: Xcode command line tools not installed"; exit 1; } else $(error iOS builds are only supported on macOS) endif # Build for iOS architecture build-libwaku-for-ios-arch: IOS_SDK=$(IOS_SDK) IOS_ARCH=$(IOS_ARCH) IOS_SDK_PATH=$(IOS_SDK_PATH) $(ENV_SCRIPT) nim libWakuIOS $(NIM_PARAMS) waku.nims # iOS device (arm64) libwaku-ios-device: IOS_ARCH=arm64 libwaku-ios-device: IOS_SDK=iphoneos libwaku-ios-device: IOS_SDK_PATH=$(call get_ios_sdk_path,iphoneos) libwaku-ios-device: | libwaku-ios-precheck build deps $(MAKE) build-libwaku-for-ios-arch IOS_ARCH=$(IOS_ARCH) IOS_SDK=$(IOS_SDK) IOS_SDK_PATH=$(IOS_SDK_PATH) # iOS simulator (arm64 - Apple Silicon Macs) libwaku-ios-simulator: IOS_ARCH=arm64 libwaku-ios-simulator: IOS_SDK=iphonesimulator libwaku-ios-simulator: IOS_SDK_PATH=$(call get_ios_sdk_path,iphonesimulator) libwaku-ios-simulator: | libwaku-ios-precheck build deps $(MAKE) build-libwaku-for-ios-arch IOS_ARCH=$(IOS_ARCH) IOS_SDK=$(IOS_SDK) IOS_SDK_PATH=$(IOS_SDK_PATH) # Build all iOS targets libwaku-ios: $(MAKE) libwaku-ios-device $(MAKE) libwaku-ios-simulator # Helper to find Nimble package paths NAT_TRAVERSAL_PKG := $(shell ls -d $(NIMBLE_PKGS_DIR)/nim-nat-traversal-* 2>/dev/null | head -1) LIBBACKTRACE_PKG := $(shell ls -d $(NIMBLE_PKGS_DIR)/nim-libbacktrace-* 2>/dev/null | head -1) cwaku_example: | build libwaku echo -e $(BUILD_MSG) "build/$@" && \ cc -o "build/$@" \ ./examples/cbindings/waku_example.c \ ./examples/cbindings/base64.c \ -lwaku -Lbuild/ \ -pthread -ldl -lm \ $$(if [ -n "$(NAT_TRAVERSAL_PKG)" ]; then echo "-lminiupnpc -L$(NAT_TRAVERSAL_PKG)/vendor/miniupnp/miniupnpc/build/ -lnatpmp -L$(NAT_TRAVERSAL_PKG)/vendor/libnatpmp-upstream/"; fi) \ $$(if [ -n "$(LIBBACKTRACE_PKG)" ]; then echo "$(LIBBACKTRACE_PKG)/libbacktrace_wrapper.o $(LIBBACKTRACE_PKG)/install/usr/lib/libbacktrace.a"; fi) cppwaku_example: | build libwaku echo -e $(BUILD_MSG) "build/$@" && \ g++ -o "build/$@" \ ./examples/cpp/waku.cpp \ ./examples/cpp/base64.cpp \ -lwaku -Lbuild/ \ -pthread -ldl -lm \ $$(if [ -n "$(NAT_TRAVERSAL_PKG)" ]; then echo "-lminiupnpc -L$(NAT_TRAVERSAL_PKG)/vendor/miniupnp/miniupnpc/build/ -lnatpmp -L$(NAT_TRAVERSAL_PKG)/vendor/libnatpmp-upstream/"; fi) \ $$(if [ -n "$(LIBBACKTRACE_PKG)" ]; then echo "$(LIBBACKTRACE_PKG)/libbacktrace_wrapper.o $(LIBBACKTRACE_PKG)/install/usr/lib/libbacktrace.a"; fi) nodejswaku: | build deps echo -e $(BUILD_MSG) "build/$@" && \ node-gyp build --directory=examples/nodejs/ ################### # Release Targets # ################### release-notes: docker run \ -it \ --rm \ -v $${PWD}:/opt/sv4git/repo:z \ -u $(shell id -u) \ docker.io/wakuorg/sv4git:latest \ release-notes |\ sed -E 's@#([0-9]+)@[#\1](https://github.com/waku-org/nwaku/issues/\1)@g' # I could not get the tool to replace issue ids with links, so using sed for now, # asked here: https://github.com/bvieira/sv4git/discussions/101