magic/utils/buildinfo.c

32 lines
1.1 KiB
C
Raw Normal View History

build: isolate build-info defines into utils/buildinfo.c (ccache-friendly) MAGIC_VERSION / MAGIC_REVISION / MAGIC_COMMIT / MAGIC_BUILDDATE were on the global DFLAGS, so every object's compile command line carried them. Because the command line is part of ccache/sccache's hash key and MAGIC_BUILDDATE changes every second, that meant a cache miss on every unit on every build; it also smeared the baked-in date/commit across "whenever each file last recompiled". Move the four values into a single translation unit: * utils/magic_buildinfo.h -- extern MagicVersion/MagicRevision/MagicCommit/ MagicCompileTime (MagicCommit is new; the other three moved here from utils/magic.h, which now includes this header). * utils/buildinfo.c -- the ONLY unit compiled with the version defines (target-specific `buildinfo.o: DFLAGS += ${DFLAGS_MAGICVERSION}` in utils/Makefile.in); it defines the four globals. ${DFLAGS_MAGICVERSION} is removed from the global DFLAGS/DFLAGS_NOSTUB. Consumers updated to read the runtime symbol instead of the compile-time macro: * magicTop.c / tclmagic.c no longer define the globals (the MAGIC_WRAPPER duplicate-symbol guard is gone -- buildinfo.o owns them for every variant, including WASM, which links both mains). * Tcl_PkgProvide/PkgRequire in router/ext2spice/lef/ext2sim/plot/tclmagic now pass MagicVersion. * extflat: EFVersion (a static-initialized copy of MAGIC_VERSION) is dropped; EFread.c compares the .ext version against MagicVersion directly -- the same value ExtCell.c already *writes* into .ext files, so read and write are now consistent. Verified: only buildinfo.o carries -DMAGIC_* (hash/DBio/windCmdSZ carry none); Tcl (375 files) and --without-tcl builds rc=0, version/commit/date embedded in tclmagic.so, magicTop.o no longer defines MagicVersion; in-tree source clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 15:55:20 +02:00
/*
* buildinfo.c --
*
* The single translation unit that captures the build-information defines.
*
* This is the ONLY file compiled with -DMAGIC_VERSION / -DMAGIC_REVISION /
* -DMAGIC_COMMIT / -DMAGIC_BUILDDATE (see the buildinfo.o recipe in
* utils/Makefile.in). Isolating them here keeps those defines -- especially the
* ever-changing MAGIC_BUILDDATE -- off every other compile command line, so
* ccache/sccache keys stay stable and the version/date/commit baked into the
* binary are consistent rather than smeared across whenever each object last
* recompiled.
*
* Consumers include "utils/magic_buildinfo.h" and read these externs.
*/
#include "utils/magic_buildinfo.h"
char *MagicVersion = MAGIC_VERSION;
char *MagicRevision = MAGIC_REVISION;
char *MagicCommit = MAGIC_COMMIT;
/*
* MAGIC_BUILDDATE may be disabled at configure time (--disable-magic-builddate)
* for reproducible builds; when it is, MagicCompileTime reports the empty string.
*/
#ifdef MAGIC_NO_BUILDDATE
char *MagicCompileTime = "";
#else
char *MagicCompileTime = MAGIC_BUILDDATE;
#endif