Compile time flags

June 8, 2026 ยท View on GitHub

Enable expensive metrics (ie, metrics with per-peer cardinality):

nim c -d:libp2p_expensive_metrics some_file.nim

Set list of known libp2p agents for metrics:

nim c -d:libp2p_agents_metrics -d:KnownLibP2PAgents=nimbus,lighthouse,lodestar,prysm,teku some_file.nim

Specify gossipsub specific topics to measure in the metrics:

nim c -d:KnownLibP2PTopics=topic1,topic2,topic3 some_file.nim

The compile-time flag libp2p_testing is used in test builds to expose code to tests without making it available to end users. It is by default added to tests/config.nims.

-d:libp2p_testing

Flags that extend MultiFormats

Multi formatCompiler flag
(path to extensions file)
Expected definition in extension file
MultiCodec-d:libp2p_multicodec_extsconst CodecExts = []
MultiHash-d:libp2p_multihash_extsconst HashExts = []
MultiAddress-d:libp2p_multiaddress_extsconst AddressExts = []
MultiBase-d:libp2p_multibase_extsconst BaseExts = []
ContentIds-d:libp2p_contentids_extsconst ContentIdsExts = []

For example, a file called multihash_exts.nim could be created and contain MultiHash extensions:

proc coder1(data: openArray[byte], output: var openArray[byte]) =
  copyMem(addr output[0], unsafeAddr data[0], len(output))

proc coder2(data: openArray[byte], output: var openArray[byte]) =
  copyMem(addr output[0], unsafeAddr data[0], len(output))

proc sha2_256_override(data: openArray[byte], output: var openArray[byte]) =
  copyMem(addr output[0], unsafeAddr data[0], len(output))

const HashExts = [
  MHash(mcodec: multiCodec("codec_mc1"), size: 0, coder: coder1),
  MHash(mcodec: multiCodec("codec_mc2"), size: 6, coder: coder2),
  MHash(mcodec: multiCodec("sha2-256"), size: 6, coder: sha2_256_override),
]

These MultiHashes will be available at compile time when the binary is compiled with -d:libp2p_multihash_exts=multihash_exts.nim.


โ† Back to README