mirror of
https://github.com/logos-messaging/logos-delivery.git
synced 2026-06-04 05:00:02 +00:00
The Windows build hung for 6h (until Actions cancelled it) at `nimble wakunode2`, on "Downloading nim-lang/Nim.git using git". `nimble setup` runs with --localdeps, so the locked nim is never placed in nimbledeps/. Every later `nimble <task>` re-resolves deps, finds nim missing, and clones the full Nim repo from git — a fetch that completes on Linux/macOS but blocks forever on the MSYS2 runner. --useSystemNim cannot be set from inside waku.nimble: it is a nimble CLI flag governing the dependency resolution that wraps the task, and the .nimble file is evaluated as part of that step. So fix it at the single place every task is invoked — the Makefile NIMBLE variable. NIMBLE resolves nimble via PATH rather than $(HOME)/.nimble/bin: on the MSYS2 Windows runner that absolute path does not hold the binary (it is on PATH via the workflow's GITHUB_PATH), so a hardcoded path fails with "No such file or directory". Bare `nimble` works on every platform. clean and the global nph install stay bare; they resolve no project deps. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
599 lines
17 KiB
Makefile
599 lines
17 KiB
Makefile
# 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.
|
|
|
|
include Nat.mk
|
|
include BearSSL.mk
|
|
|
|
LINK_PCRE := 0
|
|
FORMAT_MSG := "\\x1B[95mFormatting:\\x1B[39m"
|
|
BUILD_MSG := "Building:"
|
|
|
|
# Determine the OS
|
|
detected_OS := $(shell uname -s)
|
|
ifneq (,$(findstring MINGW,$(detected_OS)))
|
|
detected_OS := Windows
|
|
endif
|
|
|
|
# Ensure the nim/nimble installed by install-nim/install-nimble are found first
|
|
export PATH := $(HOME)/.nimble/bin:$(PATH)
|
|
|
|
# NIM binary location
|
|
NIM_BINARY := $(shell which nim 2>/dev/null)
|
|
NPH := $(HOME)/.nimble/bin/nph
|
|
# Resolve nimble via PATH (not an absolute path): on the MSYS2 Windows runner
|
|
# $(HOME)/.nimble/bin does not hold the binary, so a hardcoded path is "not
|
|
# found", whereas PATH is populated for every platform (see export PATH above
|
|
# and the workflow's GITHUB_PATH). --useSystemNim makes every invocation reuse
|
|
# the nim already on PATH: nimble re-resolves the locked deps before each task,
|
|
# and since setup runs with --localdeps the locked nim is never installed, so
|
|
# without this nimble re-clones nim-lang/Nim — a fetch that hangs on Windows.
|
|
NIMBLE := nimble --useSystemNim
|
|
NIMBLEDEPS_STAMP := nimbledeps/.nimble-setup
|
|
|
|
# Compilation parameters
|
|
NIM_PARAMS ?=
|
|
|
|
ifeq ($(detected_OS),Windows)
|
|
MINGW_PATH = /mingw64
|
|
NIM_PARAMS += --passC:"-I$(MINGW_PATH)/include"
|
|
NIM_PARAMS += --passL:"-L$(MINGW_PATH)/lib"
|
|
LIBS = -lws2_32 -lbcrypt -liphlpapi -luserenv -lntdll -lpq
|
|
NIM_PARAMS += $(foreach lib,$(LIBS),--passL:"$(lib)")
|
|
NIM_PARAMS += --passL:"-Wl,--allow-multiple-definition"
|
|
export PATH := /c/msys64/usr/bin:/c/msys64/mingw64/bin:/c/msys64/usr/lib:/c/msys64/mingw64/lib:$(PATH)
|
|
endif
|
|
|
|
##########
|
|
## Main ##
|
|
##########
|
|
# The Makefile automatically bootstraps dependency setup when needed for build and test targets.
|
|
.PHONY: all test clean examples deps nimble install-nim install-nimble
|
|
|
|
# default target
|
|
all: | wakunode2 libwaku liblogosdelivery
|
|
|
|
examples: | example2 chat2 chat2bridge
|
|
|
|
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
|
|
%:
|
|
@true
|
|
|
|
waku.nims:
|
|
ln -s waku.nimble $@
|
|
|
|
$(NIMBLEDEPS_STAMP): nimble.lock | install-nimble build-nph waku.nims
|
|
$(NIMBLE) setup --localdeps
|
|
touch $@
|
|
|
|
# Must be phony so the recipe always runs and the sub-make re-evaluates
|
|
# BEARSSL_NIMBLEDEPS_DIR / NAT_TRAVERSAL_NIMBLEDEPS_DIR (parse-time variables)
|
|
# after nimble setup has populated nimbledeps/.
|
|
.PHONY: build-deps
|
|
build-deps: | $(NIMBLEDEPS_STAMP)
|
|
$(MAKE) rebuild-bearssl-nimbledeps rebuild-nat-libs-nimbledeps
|
|
|
|
clean:
|
|
rm -rf build 2> /dev/null || true
|
|
rm -rf nimbledeps 2> /dev/null || true
|
|
rm -fr nimcache 2> /dev/null || true
|
|
rm nimble.paths 2> /dev/null || true
|
|
nimble clean
|
|
|
|
REQUIRED_NIM_VERSION := $(shell grep -E '^const RequiredNimVersion\s*=' waku.nimble | grep -oE '"[0-9]+\.[0-9]+\.[0-9]+"' | tr -d '"')
|
|
REQUIRED_NIMBLE_VERSION := $(shell grep -E '^const RequiredNimbleVersion\s*=' waku.nimble | grep -oE '"[0-9]+\.[0-9]+\.[0-9]+"' | tr -d '"')
|
|
|
|
install-nim:
|
|
ifneq ($(detected_OS),Windows)
|
|
scripts/install_nim.sh $(REQUIRED_NIM_VERSION)
|
|
endif
|
|
|
|
install-nimble: install-nim
|
|
ifneq ($(detected_OS),Windows)
|
|
scripts/install_nimble.sh $(REQUIRED_NIMBLE_VERSION)
|
|
endif
|
|
|
|
build:
|
|
mkdir -p build
|
|
|
|
nimble: install-nimble
|
|
|
|
## Possible values: prod; debug
|
|
TARGET ?= prod
|
|
|
|
## Git version
|
|
GIT_VERSION ?= $(shell git describe --abbrev=6 --always --tags)
|
|
NIM_PARAMS := $(NIM_PARAMS) -d:git_version=\"$(GIT_VERSION)\"
|
|
|
|
## Heaptracker options
|
|
HEAPTRACKER ?= 0
|
|
HEAPTRACKER_INJECT ?= 0
|
|
ifeq ($(HEAPTRACKER), 1)
|
|
TARGET := debug-with-heaptrack
|
|
ifeq ($(HEAPTRACKER_INJECT), 1)
|
|
HEAPTRACK_PARAMS := -d:heaptracker -d:heaptracker_inject
|
|
NIM_PARAMS := $(NIM_PARAMS) -d:heaptracker -d:heaptracker_inject
|
|
else
|
|
HEAPTRACK_PARAMS := -d:heaptracker
|
|
NIM_PARAMS := $(NIM_PARAMS) -d:heaptracker
|
|
endif
|
|
endif
|
|
|
|
# Debug/Release mode
|
|
ifeq ($(DEBUG), 0)
|
|
NIM_PARAMS := $(NIM_PARAMS) -d:release
|
|
else
|
|
NIM_PARAMS := $(NIM_PARAMS) -d:debug
|
|
endif
|
|
|
|
NIM_PARAMS := $(NIM_PARAMS) -d:disable_libbacktrace
|
|
|
|
# enable experimental exit is dest feature in libp2p mix
|
|
NIM_PARAMS := $(NIM_PARAMS) -d:libp2p_mix_experimental_exit_is_dest
|
|
|
|
ifeq ($(POSTGRES), 1)
|
|
NIM_PARAMS := $(NIM_PARAMS) -d:postgres -d:nimDebugDlOpen
|
|
endif
|
|
|
|
ifeq ($(DEBUG_DISCV5), 1)
|
|
NIM_PARAMS := $(NIM_PARAMS) -d:debugDiscv5
|
|
endif
|
|
|
|
# Export NIM_PARAMS so nimble can access it
|
|
export NIM_PARAMS
|
|
|
|
##################
|
|
## Dependencies ##
|
|
##################
|
|
.PHONY: deps
|
|
|
|
FOUNDRY_VERSION := 1.5.0
|
|
PNPM_VERSION := 10.23.0
|
|
|
|
rustup:
|
|
ifeq (, $(shell which cargo))
|
|
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)
|
|
|
|
deps: | nimble
|
|
|
|
##################
|
|
## RLN ##
|
|
##################
|
|
.PHONY: librln
|
|
|
|
LIBRLN_BUILDDIR := $(CURDIR)/vendor/zerokit
|
|
LIBRLN_VERSION := v2.0.2
|
|
|
|
ifeq ($(detected_OS),Windows)
|
|
LIBRLN_FILE ?= rln.lib
|
|
else
|
|
LIBRLN_FILE ?= librln_$(LIBRLN_VERSION).a
|
|
endif
|
|
|
|
$(LIBRLN_FILE):
|
|
git submodule update --init vendor/zerokit
|
|
echo -e $(BUILD_MSG) "$@" && \
|
|
bash 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)
|
|
|
|
clean: | clean-librln
|
|
|
|
#################
|
|
## Waku Common ##
|
|
#################
|
|
.PHONY: testcommon
|
|
|
|
testcommon: | build-deps build
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(NIMBLE) testcommon
|
|
|
|
##########
|
|
## Waku ##
|
|
##########
|
|
.PHONY: testwaku wakunode2 testwakunode2 example2 chat2 chat2bridge liteprotocoltester
|
|
|
|
testwaku: | build-deps build rln-deps librln
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(NIMBLE) test
|
|
|
|
wakunode2: | build-deps build deps librln
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(NIMBLE) wakunode2
|
|
|
|
benchmarks: | build-deps build deps librln
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(NIMBLE) benchmarks
|
|
|
|
testwakunode2: | build-deps build deps librln
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(NIMBLE) testwakunode2
|
|
|
|
example2: | build-deps build deps librln
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(NIMBLE) example2
|
|
|
|
chat2: | build-deps build deps librln
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(NIMBLE) chat2
|
|
|
|
chat2mix: | build-deps build deps librln
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(NIMBLE) chat2mix
|
|
|
|
rln-db-inspector: | build-deps build deps librln
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(NIMBLE) rln_db_inspector
|
|
|
|
chat2bridge: | build-deps build deps librln
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(NIMBLE) chat2bridge
|
|
|
|
liteprotocoltester: | build-deps build deps librln
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(NIMBLE) liteprotocoltester
|
|
|
|
lightpushwithmix: | build-deps build deps librln
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(NIMBLE) lightpushwithmix
|
|
|
|
api_example: | build-deps build deps librln
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(ENV_SCRIPT) nim api_example $(NIM_PARAMS) waku.nims
|
|
|
|
build/%: | build-deps build deps librln
|
|
echo -e $(BUILD_MSG) "build/$*" && \
|
|
$(NIMBLE) buildone $*
|
|
|
|
compile-test: | build-deps build deps librln
|
|
echo -e $(BUILD_MSG) "$(TEST_FILE)" "\"$(TEST_NAME)\"" && \
|
|
$(NIMBLE) buildTest $(TEST_FILE) && \
|
|
$(NIMBLE) execTest $(TEST_FILE) "\"$(TEST_NAME)\""
|
|
|
|
################
|
|
## Waku tools ##
|
|
################
|
|
.PHONY: tools wakucanary networkmonitor
|
|
|
|
tools: networkmonitor wakucanary
|
|
|
|
wakucanary: | build-deps build deps librln
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(NIMBLE) wakucanary
|
|
|
|
networkmonitor: | build-deps build deps librln
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(NIMBLE) networkmonitor
|
|
|
|
############
|
|
## Format ##
|
|
############
|
|
.PHONY: build-nph install-nph print-nph-path
|
|
|
|
build-nph: | build deps
|
|
ifneq ($(detected_OS),Windows)
|
|
if command -v nph > /dev/null 2>&1; then \
|
|
echo "nph already installed, skipping"; \
|
|
else \
|
|
echo "Installing nph globally"; \
|
|
(cd /tmp && nimble install nph@0.7.0 --accept -g); \
|
|
fi
|
|
command -v nph
|
|
else
|
|
echo "Skipping nph build on Windows (nph is only used on Unix-like systems)"
|
|
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) $*
|
|
|
|
print-nph-path:
|
|
@echo "$(NPH)"
|
|
|
|
clean:
|
|
|
|
###################
|
|
## Documentation ##
|
|
###################
|
|
.PHONY: docs coverage
|
|
|
|
docs: | build deps
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
$(NIMBLE) doc --run --index:on --project --out:.gh-pages waku/waku.nim waku.nims
|
|
|
|
coverage:
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
./scripts/run_cov.sh -y
|
|
|
|
#####################
|
|
## Container image ##
|
|
#####################
|
|
DOCKER_IMAGE_NIMFLAGS ?= -d:chronicles_colors:none -d:insecure -d:postgres
|
|
DOCKER_IMAGE_NIMFLAGS := $(DOCKER_IMAGE_NIMFLAGS) $(HEAPTRACK_PARAMS)
|
|
|
|
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="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 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 ##
|
|
####################################
|
|
DOCKER_LPT_NIMFLAGS ?= -d:chronicles_colors:none -d:insecure
|
|
|
|
docker-liteprotocoltester: DOCKER_LPT_TAG ?= latest
|
|
docker-liteprotocoltester: DOCKER_LPT_NAME ?= wakuorg/liteprotocoltester:$(DOCKER_LPT_TAG)
|
|
docker-liteprotocoltester:
|
|
docker build \
|
|
--build-arg="MAKE_TARGET=liteprotocoltester" \
|
|
--build-arg="NIMFLAGS=$(DOCKER_LPT_NIMFLAGS)" \
|
|
--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 liblogosdelivery liblogosdelivery_example
|
|
|
|
detected_OS ?= Linux
|
|
ifeq ($(OS),Windows_NT)
|
|
detected_OS := Windows
|
|
else
|
|
detected_OS := $(shell uname -s)
|
|
endif
|
|
|
|
BUILD_COMMAND ?= Dynamic
|
|
STATIC ?= 0
|
|
ifeq ($(STATIC), 1)
|
|
BUILD_COMMAND = Static
|
|
endif
|
|
|
|
ifeq ($(detected_OS),Windows)
|
|
BUILD_COMMAND := $(BUILD_COMMAND)Windows
|
|
else ifeq ($(detected_OS),Darwin)
|
|
BUILD_COMMAND := $(BUILD_COMMAND)Mac
|
|
export IOS_SDK_PATH := $(shell xcrun --sdk iphoneos --show-sdk-path)
|
|
else ifeq ($(detected_OS),Linux)
|
|
BUILD_COMMAND := $(BUILD_COMMAND)Linux
|
|
endif
|
|
|
|
libwaku: | build-deps librln
|
|
$(NIMBLE) --verbose libwaku$(BUILD_COMMAND) waku.nimble
|
|
|
|
liblogosdelivery: | build-deps librln
|
|
$(NIMBLE) --verbose liblogosdelivery$(BUILD_COMMAND) waku.nimble
|
|
|
|
logosdelivery_example: | build liblogosdelivery
|
|
@echo -e $(BUILD_MSG) "build/$@"
|
|
ifeq ($(detected_OS),Darwin)
|
|
gcc -o build/$@ \
|
|
liblogosdelivery/examples/logosdelivery_example.c \
|
|
liblogosdelivery/examples/json_utils.c \
|
|
-I./liblogosdelivery \
|
|
-L./build \
|
|
-llogosdelivery \
|
|
-Wl,-rpath,./build
|
|
else ifeq ($(detected_OS),Linux)
|
|
gcc -o build/$@ \
|
|
liblogosdelivery/examples/logosdelivery_example.c \
|
|
liblogosdelivery/examples/json_utils.c \
|
|
-I./liblogosdelivery \
|
|
-L./build \
|
|
-llogosdelivery \
|
|
-Wl,-rpath,'$$ORIGIN'
|
|
else ifeq ($(detected_OS),Windows)
|
|
gcc -o build/$@.exe \
|
|
liblogosdelivery/examples/logosdelivery_example.c \
|
|
liblogosdelivery/examples/json_utils.c \
|
|
-I./liblogosdelivery \
|
|
-L./build \
|
|
-llogosdelivery \
|
|
-lws2_32
|
|
endif
|
|
|
|
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
|
|
|
|
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
|
|
|
|
nodejswaku: | build deps
|
|
echo -e $(BUILD_MSG) "build/$@" && \
|
|
node-gyp build --directory=examples/nodejs/
|
|
|
|
#####################
|
|
## Mobile Bindings ##
|
|
#####################
|
|
.PHONY: libwaku-android \
|
|
libwaku-android-precheck \
|
|
libwaku-android-arm64 \
|
|
libwaku-android-amd64 \
|
|
libwaku-android-x86 \
|
|
libwaku-android-arm
|
|
|
|
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
|
|
|
|
libwaku-android-precheck:
|
|
ifndef ANDROID_NDK_HOME
|
|
$(error ANDROID_NDK_HOME is not set)
|
|
endif
|
|
|
|
build-libwaku-for-android-arch:
|
|
ifneq ($(findstring /nix/store,$(LIBRLN_FILE)),)
|
|
mkdir -p $(CURDIR)/build/android/$(ABIDIR)/
|
|
CPU=$(CPU) ABIDIR=$(ABIDIR) ANDROID_ARCH=$(ANDROID_ARCH) ANDROID_COMPILER=$(ANDROID_COMPILER) ANDROID_TOOLCHAIN_DIR=$(ANDROID_TOOLCHAIN_DIR) $(NIMBLE) libWakuAndroid
|
|
else
|
|
./scripts/build_rln_android.sh $(CURDIR)/build $(LIBRLN_BUILDDIR) $(LIBRLN_VERSION) $(CROSS_TARGET) $(ABIDIR)
|
|
endif
|
|
$(MAKE) rebuild-nat-libs-nimbledeps CC=$(ANDROID_TOOLCHAIN_DIR)/bin/$(ANDROID_COMPILER)
|
|
|
|
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
|
|
$(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
|
|
|
|
#################
|
|
## iOS Bindings #
|
|
#################
|
|
.PHONY: libwaku-ios-precheck \
|
|
libwaku-ios-device \
|
|
libwaku-ios-simulator \
|
|
libwaku-ios
|
|
|
|
IOS_DEPLOYMENT_TARGET ?= 18.0
|
|
|
|
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-libwaku-for-ios-arch:
|
|
IOS_SDK=$(IOS_SDK) IOS_ARCH=$(IOS_ARCH) IOS_SDK_PATH=$(IOS_SDK_PATH) $(NIMBLE) libWakuIOS
|
|
|
|
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)
|
|
|
|
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)
|
|
|
|
libwaku-ios:
|
|
$(MAKE) libwaku-ios-device
|
|
$(MAKE) libwaku-ios-simulator
|
|
|
|
###################
|
|
# 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'
|