Computes and stores build fingerprints for incremental compilation.
Types
Fingerprint = object sourceHash*: string ## Content hash of source inputs. configHash*: string ## Content hash of config inputs. envHash*: string ## Hash of selected environment inputs. compilerHash*: string ## Hash of compiler and platform identity. flagsHash*: string ## Hash of compiler flags. profile*: string ## Build profile name. platform*: string ## Platform identifier. toolchain*: string ## Toolchain identifier. mtimeHash*: string ## Hash of source modification times.
- Hash record used to decide whether a target is fresh.
FingerprintInputs = object sourcePaths*: seq[string] ## Source files and dependency files to hash. compilerFlags*: seq[string] ## Compiler flags included in the cache key. profile*: string ## Build profile name. configInputs*: seq[string] ## Config files included in the cache key. envInputs*: seq[string] ## Environment entries included in the cache key. platform*: string ## Platform identifier, usually `os-cpu`. toolchain*: string ## Toolchain identifier, usually `nim-<version>`.
- Inputs that determine a target build fingerprint.
Procs
proc `==`(a, b: Fingerprint): bool {....raises: [], tags: [], forbids: [].}
-
Compare all fingerprint fields for freshness checks.
Source mtimes are recorded for diagnostics, but content hashes decide freshness. This avoids recompiling after a checkout, formatter, generator, or archive extraction touches files without changing their contents.
proc cleanFingerprints(fpDir: string) {....raises: [OSError, IOError], tags: [ReadDirEffect, WriteDirEffect], forbids: [].}
- Remove and recreate the fingerprint directory.
proc computeFingerprint(inputs: FingerprintInputs): Fingerprint {. ...raises: [IOError, OSError], tags: [ReadDirEffect, ReadIOEffect], forbids: [].}
- Compute a fingerprint by hashing source, config, env, compiler, and flags.
proc computeFingerprint(sourcePaths: openArray[string]; compilerFlags: openArray[string]; profile: string; configInputs: openArray[string] = []; envInputs: openArray[string] = []): Fingerprint {. ...raises: [IOError, OSError], tags: [ReadDirEffect, ReadIOEffect], forbids: [].}
- Compute a fingerprint from raw input sequences.
proc fromJson(data: string): Fingerprint {. ...raises: [IOError, OSError, JsonParsingError, ValueError, KeyError], tags: [ReadIOEffect, WriteIOEffect], forbids: [].}
-
Parse fingerprint JSON text.
Missing fields become empty strings for compatibility with older files.
proc initFingerprintInputs(sourcePaths: openArray[string]; compilerFlags: openArray[string]; profile: string; configInputs: openArray[string] = []; envInputs: openArray[string] = []): FingerprintInputs {. ...raises: [], tags: [], forbids: [].}
- Build fingerprint input metadata from explicit source, flag, and config inputs.
proc loadFingerprint(fpDir: string; targetName: string; unitName: string): Option[ Fingerprint] {....raises: [], tags: [ReadDirEffect, ReadIOEffect, WriteIOEffect], forbids: [].}
- Load a saved fingerprint, returning none when absent or unreadable.
proc removeFingerprint(fpDir: string; targetName: string; unitName: string) {. ...raises: [OSError], tags: [ReadDirEffect, WriteDirEffect], forbids: [].}
- Remove a saved fingerprint if it exists.
proc saveFingerprint(fpDir: string; targetName: string; unitName: string; fp: Fingerprint) {....raises: [OSError, IOError], tags: [ WriteDirEffect, ReadDirEffect, WriteIOEffect], forbids: [].}
- Persist a fingerprint for a target build unit.
proc toJson(fp: Fingerprint): string {....raises: [], tags: [], forbids: [].}
- Serialize a fingerprint to JSON text.