mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-06-26 11:29:28 +00:00
Squash of 13 commits from feat/mix-dos-protection-libp2p-v2.0.0 onto the logos_delivery/ folder-restructure base from #3935 (build-messaging-folder). Original commit history (squashed): - d8e6dcef feat(mix): integrate mix protocol with extended kademlia + RLN spam protection - fb72f18d refactor(mix): split DoS-protection self-registration into background retry - d8bbef0c feat(mix): bump libp2p stack to v2.0.0 + adopt stateless RLN spam protection - 2f24448a fix(tests): use HmacDrbgContext.new() instead of crypto.newRng() - 5a21455c fix(ci): regen nimble.lock for v2.0.0 + disambiguate rng in wakucore - 03ef02a2 fix(tests): wrap HmacDrbgContext via newBearSslRng for libp2p v2.0.0 - 167ab1df fix(nix): regenerate deps.nix from updated nimble.lock - 97a27222 fix(tests): wrap or pass Rng correctly for 3-arg PrivateKey.random - 5561fcb5 fix(tests): replace removed newStandardSwitch with SwitchBuilder - ba39ee4a fix(tests): libp2p v2.0.0 API migrations across test suite - 328e11df fix: gitignore test binaries + remove accidentally-committed binary - cc712444 fix(tests): more v2.0.0 API migrations (rng template, PeerId.random, etc.) - 412d97a9 fix(tests): unblock CI — nph, excise orphan waku_noise, complete v2.0.0 Rng migration Conflict resolutions (#3935 → ours): - 11 import-path migrations: waku/X → logos_delivery/waku/X - waku_node/waku_node/relay.nim: dropped our `registerRelayHandler` proc (relocated to subscription_manager.nim by #3935; see cascade fix below) - factory/builder.nim: combined both sides' new imports (net_config + waku_switch) - factory/conf_builder/mix_conf_builder.nim: libp2p_mix package (not libp2p/protocols/mix) - waku_mix/protocol.nim: combined paths + our mix_rln_spam_protection/relay/nimchronos imports - 3 test files: dropped noise_utils import (replicates noise excision from original PR) - 2 UA file moves: option_shims.nim and waku_mix_coordination.nim added at new paths Cascade fixes (#3935 lost our work, restored): - subscription_manager.nim: added `mixHandler` to #3935's `registerRelayHandler`, and added `waku_mix` to its imports. Without this, mix messages were silently dropped from the relay handler chain. - config.nims: option_shims auto-import path migrated to logos_delivery/... Validation: - nph check on all 82 staged .nim files: clean (0 reformats needed) - wakunode2 build: exit 0, 38 MB binary - (sim PASS confirmed in earlier identical-state run: 5/5 mix init, 5 RLN proofs gen/verify, 0 errors) Backup tag at original tip: backup/3931-pre-3935-rebase (412d97a9).
148 lines
5.9 KiB
Nim
148 lines
5.9 KiB
Nim
import os
|
|
|
|
if defined(release):
|
|
switch("nimcache", "nimcache/release/$projectName")
|
|
else:
|
|
switch("nimcache", "nimcache/debug/$projectName")
|
|
|
|
if defined(windows):
|
|
switch("passL", "rln.lib")
|
|
switch("define", "postgres=false")
|
|
|
|
# disable timestamps in Windows PE headers - https://wiki.debian.org/ReproducibleBuilds/TimestampsInPEBinaries
|
|
switch("passL", "-Wl,--no-insert-timestamp")
|
|
# increase stack size
|
|
switch("passL", "-Wl,--stack,8388608")
|
|
# https://github.com/nim-lang/Nim/issues/4057
|
|
--tlsEmulation:
|
|
off
|
|
if defined(i386):
|
|
# set the IMAGE_FILE_LARGE_ADDRESS_AWARE flag so we can use PAE, if enabled, and access more than 2 GiB of RAM
|
|
switch("passL", "-Wl,--large-address-aware")
|
|
|
|
# https://github.com/status-im/nimbus-eth2/blob/stable/docs/cpu_features.md#ssse3-supplemental-sse3
|
|
# suggests that SHA256 hashing with SSSE3 is 20% faster than without SSSE3, so
|
|
# given its near-ubiquity in the x86 installed base, it renders a distribution
|
|
# build more viable on an overall broader range of hardware.
|
|
#
|
|
if defined(disableMarchNative):
|
|
if defined(i386) or defined(amd64):
|
|
if defined(macosx):
|
|
# macOS Catalina is EOL as of 2022-09
|
|
# https://support.apple.com/kb/sp833
|
|
# "macOS Big Sur - Technical Specifications" lists current oldest
|
|
# supported models: MacBook (2015 or later), MacBook Air (2013 or later),
|
|
# MacBook Pro (Late 2013 or later), Mac mini (2014 or later), iMac (2014
|
|
# or later), iMac Pro (2017 or later), Mac Pro (2013 or later).
|
|
#
|
|
# These all have Haswell or newer CPUs.
|
|
#
|
|
# This ensures AVX2, AES-NI, PCLMUL, BMI1, and BMI2 instruction set support.
|
|
switch("passC", "-march=haswell -mtune=generic")
|
|
switch("passL", "-march=haswell -mtune=generic")
|
|
else:
|
|
if defined(marchOptimized):
|
|
# -march=broadwell: https://github.com/status-im/nimbus-eth2/blob/stable/docs/cpu_features.md#bmi2--adx
|
|
# Changed to x86-64-v2 for broader support
|
|
switch("passC", "-march=x86-64-v2 -mtune=generic")
|
|
switch("passL", "-march=x86-64-v2 -mtune=generic")
|
|
else:
|
|
switch("passC", "-mssse3")
|
|
switch("passL", "-mssse3")
|
|
elif defined(macosx) and defined(arm64):
|
|
# Apple's Clang can't handle "-march=native" on M1: https://github.com/status-im/nimbus-eth2/issues/2758
|
|
switch("passC", "-mcpu=apple-m1")
|
|
switch("passL", "-mcpu=apple-m1")
|
|
else:
|
|
if not defined(android):
|
|
switch("passC", "-march=native")
|
|
switch("passL", "-march=native")
|
|
if defined(windows):
|
|
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65782
|
|
# ("-fno-asynchronous-unwind-tables" breaks Nim's exception raising, sometimes)
|
|
switch("passC", "-mno-avx512f")
|
|
switch("passL", "-mno-avx512f")
|
|
|
|
when defined(macosx):
|
|
# TEMPORARY (added 2026-06-19) — remove once nim-chronos is fixed/bumped upstream.
|
|
#
|
|
# macOS / Apple Clang 16+ promotes -Wincompatible-function-pointer-types to a
|
|
# DEFAULT error (not gated behind -Werror). It fires on a dependency↔dependency
|
|
# call in nim-chronos — none of our code is involved:
|
|
# chronos/streams/tlsstream.nim:718 ctx.setdest(itemAppend, ...)
|
|
# chronos declares the PEM callback `itemAppend(ctx, pbytes: pointer, nbytes)`
|
|
# while bearssl's `br_pem_decoder_setdest` expects `pbytes: const void*`. The
|
|
# callback only READS the buffer (copyMem from pbytes), so the missing `const`
|
|
# is benign — we demote the diagnostic back to a warning instead of failing.
|
|
#
|
|
# Why it appeared now (not a change on our side): the `const` was introduced in
|
|
# nim-bearssl v0.2.9, published 2026-06-19 11:22 UTC. CI does not honor the
|
|
# locked bearssl (nimble.lock pins 0.2.8) and fresh-resolves to latest, so any
|
|
# run after 11:22 UTC picks up 0.2.9 and hits this. Earlier-running PRs that
|
|
# resolved 0.2.8 are green only by timing; re-running them now reproduces it.
|
|
#
|
|
# Proper fix: chronos should declare `itemAppend`'s `pbytes` as `const pointer`.
|
|
switch("passC", "-Wno-error=incompatible-function-pointer-types")
|
|
|
|
--threads:
|
|
on
|
|
--opt:
|
|
speed
|
|
|
|
--excessiveStackTrace:
|
|
on
|
|
# enable metric collection
|
|
--define:
|
|
metrics
|
|
# for heap-usage-by-instance-type metrics and object base-type strings
|
|
--define:
|
|
nimTypeNames
|
|
|
|
# the default open files limit is too low on macOS (512), breaking the
|
|
# "--debugger:native" build. It can be increased with `ulimit -n 1024`.
|
|
if not defined(macosx) and not defined(android):
|
|
# add debugging symbols and original files and line numbers
|
|
--debugger:
|
|
native
|
|
when defined(enable_libbacktrace):
|
|
# light-weight stack traces using libbacktrace and libunwind
|
|
# opt-in: pass -d:enable_libbacktrace (requires libbacktrace in project deps)
|
|
--define:
|
|
nimStackTraceOverride
|
|
switch("import", "libbacktrace")
|
|
|
|
switch("import", "logos_delivery/waku/compat/option_valueor")
|
|
|
|
--define:
|
|
nimOldCaseObjects
|
|
# https://github.com/status-im/nim-confutils/issues/9
|
|
|
|
# `switch("warning[CaseTransition]", "off")` fails with "Error: invalid command line option: '--warning[CaseTransition]'"
|
|
switch("warning", "CaseTransition:off")
|
|
|
|
# The compiler doth protest too much, methinks, about all these cases where it can't
|
|
# do its (N)RVO pass: https://github.com/nim-lang/RFCs/issues/230
|
|
switch("warning", "ObservableStores:off")
|
|
|
|
# Too many false positives for "Warning: method has lock level <unknown>, but another method has 0 [LockLevel]"
|
|
switch("warning", "LockLevel:off")
|
|
|
|
if defined(android):
|
|
var clang = getEnv("ANDROID_COMPILER")
|
|
var ndk_home = getEnv("ANDROID_TOOLCHAIN_DIR")
|
|
var sysroot = ndk_home & "/sysroot"
|
|
var cincludes = sysroot & "/usr/include/" & getEnv("ANDROID_ARCH")
|
|
|
|
switch("clang.path", ndk_home & "/bin")
|
|
switch("clang.exe", clang)
|
|
switch("clang.linkerexe", clang)
|
|
switch("passC", "--sysroot=" & sysRoot)
|
|
switch("passL", "--sysroot=" & sysRoot)
|
|
switch("cincludes", sysRoot & "/usr/include/")
|
|
|
|
# begin Nimble config (version 2)
|
|
--noNimblePath
|
|
when withDir(thisDir(), system.fileExists("nimble.paths")):
|
|
include "nimble.paths"
|
|
# end Nimble config
|