Skip to content

updates - #2

Merged
julian-CStack merged 11 commits into
cypherstack:mainfrom
slopbot9k:main
Oct 27, 2026
Merged

julian-CStack merged 11 commits into
cypherstack:mainfrom
slopbot9k:main

Conversation

@slopbot9k

Copy link
Copy Markdown

No description provided.

Flutter 3.47 asks every native asset for iOS 13, whatever the
application's deployment target, and writes 13.0 into the framework it
wraps the library in. With the former default floor, 15, the hook
refused every iOS build of a package that kept the default. The default
is now 13, the floor error says what to change on each platform, and the
fixture's three iOS libraries change bytes.

The Windows host loads every x64 Windows library before the run can
publish it, which runs the library's initialisation and resolves its
imports; until now nothing loaded a Windows library before release. Host
jobs may run for four hours: the heavier consumers build every target
twice on the macOS runner and could pass two.
The load step found its libraries with a file pattern, so a pattern that
matched nothing passed in silence. It now takes the x64 DLLs from the
build's SHA256SUMS, fails if one is missing, and leaves a notice naming
each library it loaded, which anyone can read on the run's summary.
The load step took its list from the build's checksums, so a library the
build never produced was missing from both lists and the step passed
having loaded nothing. It now loads <library>.dll for every x86_64
Windows target dnix.json names, so a missing one fails. Imports resolve
against Windows' own directories only, since the runner's PATH holds
MinGW, whose runtime DLLs an end user does not have. A library that
fails to load leaves the reason as a public error, and the step gives up
after five minutes. The floor error now names the package whose floor
must come down, and tests cover its three messages.
The reusable workflow ran its actions from movable tags, among them
download-artifact in the job that holds the token allowed to publish
releases. Each action now names the commit its tag points to today,
with the version beside it. Vampire/setup-wsl's v7 is a branch, so it is
pinned at v7.2.0, where that branch stands.
bindgen loads libclang while a build script runs. dnix provided none, so
it searched the host: in the Linux sandbox it found nothing and the build
failed, and on macOS, where builds are not sandboxed, it took the copy
from the Mac's Xcode or Command Line Tools. flutter_libepiccash's RandomX
bindings hit both. Every build now finds libclang from the LLVM dnix
already pins. Its library built this way matches its lock, and every
fixture library and archive is unchanged.
Cargo resolves the dependencies of build scripts and proc macros for the
machine running the build, and mixes their metadata into every crate
downstream, so a platform condition such as rustix's linux-raw-sys on
Linux or keccak's cpufeatures on arm64 gave tor and flutter_libmwc
different symbol names, code layout, and OUT_DIR paths on every host.

The rustc wrapper now also answers Cargo's host configuration query with
the extra cfg dnix_host, and host-graph.py widens each vendored
manifest's platform condition that evaluates differently across dnix's
build hosts (Linux and macOS, x86_64 and aarch64) to
cfg(any(dnix_host, ...)). Build-time dependencies become the union on
every host; targets resolve exactly as written, so their dependencies
are unchanged. The wrapper refuses to run if Cargo stops asking for the
host's cfg last, rather than silently resolving per host again.
LLVM sorts some lists with the C library's qsort, and where two entries
compare equal the C library picks their order: glibc's merge sort keeps
it, macOS's sort does not. The same rustc therefore emitted differently
ordered instructions, and differently named local symbols, on Linux and
on macOS. rustc now runs with a qsort that is glibc's merge sort on every
host, and the build stops if rustc did not load it.
bindgen runs a clang to learn the default header directories and puts
them ahead of libclang's own. With none named it found Xcode's clang on
macOS and none on Linux, so the same header produced different Rust
bindings: randomx's lacked eighteen stdint typedefs on macOS, which
changed its compiled module and the names of symbols promoted from it.
CLANG_PATH now names the clang that belongs to the pinned libclang, and
Android builds hand bindgen the NDK's sysroot, the headers their C is
compiled against.
The lock records the dynamic library and the hook ships nothing else, yet
each target also kept the static library and the import library the crate
builds. Their member names and debug info carry the build directory and
toolchain store paths, so they differed between hosts and, on macOS, from
one build to the next, failing the rebuild check and the host comparison
on bytes nobody receives. A target's output is now the dynamic library
alone, on Apple targets too.
The wrapper exported the preload variable for the whole script, so the
sed that rewrites rustc's host line inherited it. In the Apple shell sed
is macOS's own, an arm64e program, and on the CI runners dyld aborts it
rather than load the arm64 library. The variable is now set on each
rustc command alone.
@slopbot9k
slopbot9k marked this pull request as ready for review October 27, 2026 13:05
@julian-CStack
julian-CStack merged commit e91763e into cypherstack:main Oct 27, 2026
7 checks passed
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.

2 participants