-
Notifications
You must be signed in to change notification settings - Fork 82
Expand file tree
/
Copy pathconfig.nims
More file actions
145 lines (130 loc) · 5.85 KB
/
Copy pathconfig.nims
File metadata and controls
145 lines (130 loc) · 5.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
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")
--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