nip/config.nims

75 lines
2.2 KiB
Nim

# Nimble build configuration script
# ================================
import strutils, os
# Set the source directory
switch("path", "src")
# --- Memory Management ---
# Use the ORC (Optimized Reference Counting) memory manager for better
# performance and deterministic behavior.
switch("mm", "orc")
# --- Threading Support ---
# Enable multithreading capabilities.
switch("threads", "on")
# --- Feature Flags ---
# Enable SSL support for secure connections.
switch("define", "ssl")
# --- Static Linking Configuration ---
# Check for static build flag
when defined(static):
echo "🔗 Configuring static linking for minimal binary..."
# Core static linking flags
switch("passL", "-static")
switch("passL", "-static-libgcc")
# Link against musl libc if available (smaller, cleaner static builds)
when defined(linux):
if fileExists("/usr/lib/x86_64-linux-musl/libc.a") or
fileExists("/usr/lib/musl/lib/libc.a"):
echo " Using musl libc for static linking"
switch("gcc.exe", "musl-gcc")
switch("gcc.linkerexe", "musl-gcc")
# Strip symbols for smaller binary
switch("passL", "-s")
# Link Time Optimization for better code generation
switch("passC", "-flto")
switch("passL", "-flto")
# Additional optimization flags
switch("passC", "-ffunction-sections")
switch("passC", "-fdata-sections")
switch("passL", "-Wl,--gc-sections")
# Disable dynamic linking
switch("dynlibOverride", "ssl")
switch("dynlibOverride", "crypto")
# --- Build Profiles ---
# The following section defines different build profiles for development
# and release builds. You can select a profile by passing the
# appropriate flags to the Nim compiler (e.g., -d:release).
when isMainModule:
# Default to a debug build if no profile is specified
let build_profile = strip(gorge("echo $build_profile"))
if build_profile == "release":
# --- Release Build ---
# Optimized for speed and performance.
switch("opt", "speed")
switch("define", "release")
switch("define", "danger") # Turns off all runtime checks
switch("warning[ProveInit]", "off")
else:
# --- Development Build (default) ---
# Includes debugging information and enables all runtime checks.
switch("opt", "none")
switch("debugger", "native")