75 lines
2.2 KiB
Nim
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")
|