Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
build_fingerprint.hpp File Reference

Strict build-compatibility fingerprint — the PRIMARY safety gate for DSP hot reload. More...

#include <cstdint>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>

Go to the source code of this file.

Classes

struct  pulp::format::reload::BuildFingerprint

Namespaces

namespace  pulp
namespace  pulp::format
 What the product grants a device: the quota table indexed by capability tier and live thermal state.
namespace  pulp::format::reload
namespace  pulp::format::reload::detail

Functions

void pulp::format::reload::detail::set_field (char *dst, std::size_t cap, const char *src)
BuildFingerprint pulp::format::reload::current_build_fingerprint ()
 Capture THIS translation unit's build fingerprint.
bool pulp::format::reload::fingerprints_match (const BuildFingerprint &a, const BuildFingerprint &b)
 Field-by-field equality (the gate).
std::vector< std::string > pulp::format::reload::fingerprint_diff (const BuildFingerprint &shell, const BuildFingerprint &logic)
 Human-readable per-field differences (diagnostics only). Empty == identical.

Variables

constexpr uint32_t pulp::format::reload::kBuildFingerprintSchema = 1
 Bump when the fingerprint layout/semantics change.

Detailed Description

Strict build-compatibility fingerprint — the PRIMARY safety gate for DSP hot reload.

The shell and the hot-loaded logic dylib must be built with a byte-identical toolchain + ABI configuration, because the seam carries full C++ traffic (vtable dispatch, std:: containers, exceptions, RTTI). A sizeof/layout probe cannot prove that; this fingerprint does, by rejecting any logic binary whose compiler/stdlib/flags differ.

CRITICAL: BuildFingerprint is a fixed-size POD (no std::string). It is the ONE struct that crosses the shell↔logic boundary before compatibility is established, so it must not itself depend on the STL ABI it exists to check. current_build_fingerprint() is header-inline + macro-driven so each binary captures its OWN compiler's settings at its own compile time.