Repository navigation
updates - #2
Merged
Merged
updates#2
Conversation
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
marked this pull request as ready for review
October 27, 2026 13:05
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.