Skip to content

Adopt the Evergine.Bindings toolbox - #5

Merged
jcant0n merged 1 commit into
mainfrom
feature/evergine-bindings-toolbox
Aug 11, 2026
Merged

Adopt the Evergine.Bindings toolbox#5
jcant0n merged 1 commit into
mainfrom
feature/evergine-bindings-toolbox

Conversation

@jcant0n

@jcant0n jcant0n commented Aug 11, 2026

Copy link
Copy Markdown
Member

Moves this repository onto the fleet's current infrastructure. It was built following
C2CSharpBinding.agent.md, which points at evergine-standards@v2 — the previous location.
Meshoptimizer and the other tracked bindings already consume
Evergine.Bindings@v1.

binding.yml

The manifest both the deterministic and the agentic workflows read. Validates against
binding.schema.json. kind: git-tree, tracking stable releases of RenderKit/embree, with
current: v4.4.1 — the one place the version lives, rewritten by binding-fetch-upstream when
a newer release arrives.

Its NOTE comments record the two hazards specific to this repository, because the
binding-updater agent reads and obeys them:

  1. rtcore_config.h is not an upstream source. Embree's CMake generates it, and it decides
    the layout of several public structs — RTC_MAX_INSTANCE_LEVEL_COUNT sizes the instID
    arrays, RTC_GEOMETRY_INSTANCE_ARRAY adds the instPrimID ones, RTC_MIN_WIDTH adds a
    field to RTCIntersectArguments. It comes from embree-cmake.yml alongside the binaries.
    Refreshing the header tree leaves it alone: the git-tree adapter only writes what it
    fetched.
  2. Headers and native binaries cannot move independently. P/Invoke binds late, so a
    mismatched package compiles, passes CI, publishes, and only then throws.

CD becomes three jobs

resolvenativescd, matching Meshoptimizer:

  • binding-resolve-upstream settles on one release and nothing else decides it.
  • embree-cmake.yml builds the natives at that release. It gains workflow_call for this,
    and its artifacts now carry their final repository paths so the CD unpacks them over the
    tree.
  • binding-tracked-cd regenerates, packs and publishes, taking the natives by artifact
    pattern — but only when the natives job actually ran, since asking for artifacts that were
    never produced fails the download.

natives is gated on ref_moved: four platform builds, the x64 legs alone about an hour, is
not something to spend on a maybe.

One detail worth a look: rtcore_config.h is collected from the linux-x64 leg only. Every
leg generates a byte-identical file, but the Windows one is written with CRLF, so letting all
four contribute would flip the committed header's line endings depending on unpack order.

Generation stays on Linux

MeshOptimizer, RenderDoc and KTX all generate on windows-latest because the libclang in the
CppAst package carries no system include paths and none of its own builtin headers, so
<stddef.h> does not resolve on Linux. This generator parses against the stubs in
EmbreeGen/Headers/stubs with a pinned x86_64 target, so it does not have that problem — and
as a side effect its output is identical on any host. Please don't "fix" it onto Windows; there
is a comment in binding.yml saying so.

Not in this PR

The agentic workflows (binding-updater and friends) and toolbox-update.yml — block B of the
roadmap. That needs vars.APP_CLIENT_ID / secrets.APP_PRIVATE_KEY at the org level and a set
of agent:* labels on the repository, so it is worth its own change.

CI and CD moved from evergine-standards@v2 to the Evergine.Bindings@v1 reusable
workflows, which is where the fleet standard now lives; Meshoptimizer and the
other tracked bindings are already there.

Adds binding.yml, the manifest both the deterministic and the agentic workflows
read. It validates against binding.schema.json. Its NOTE comments record the two
hazards specific to this repository: rtcore_config.h is generated by Embree's
CMake rather than fetched, and the headers cannot move without a native rebuild.

CD becomes three jobs, matching Meshoptimizer. binding-resolve-upstream settles
on one release, embree-cmake builds the natives at that release, and
binding-tracked-cd regenerates and publishes. One place decides the revision: if
the headers and the binaries each worked it out for themselves, a release
published midway through a run would leave them on different versions, and that
mismatch is invisible until it throws in a consumer's application.

embree-cmake.yml gains workflow_call so the CD can drive it, and its artifacts
now carry their final repository paths so unpacking them over the tree is the
whole mapping. rtcore_config.h comes from the linux-x64 leg alone: every leg
generates an identical file but the Windows one is CRLF, so letting them all
contribute would flip the committed header's line endings depending on unpack
order.

Unlike most of the fleet, generation stays on ubuntu-latest. MeshOptimizer,
RenderDoc and KTX all generate on Windows because the libclang in the CppAst
package cannot resolve system headers on Linux; this generator parses against the
stubs in EmbreeGen/Headers/stubs with a pinned x86_64 target, so it does not have
that problem and its output is identical on any host.
@jcant0n
jcant0n merged commit 236061d into main Aug 11, 2026
1 check passed
@jcant0n
jcant0n deleted the feature/evergine-bindings-toolbox branch August 11, 2026 17:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant