Repository navigation
Use released linker inputs and support static PIE - #549
Merged
Merged
Conversation
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.
Move the six checked-in Linux linker binaries into the independent linker-input release, and make the platform compatible with Roc's upcoming PIE linker policy while retaining the current compiler pin.
Normal builds restore SHA-256-pinned runtime archives through a shared cache and rebuild the Rust host from source. Unix Rust/C host code is PIC, Linux uses the dual-compatible self-relocating startup, and Windows combines the released support provenance with the freshly built host. Bundling verifies runtime inventories and includes provenance and licenses. Published platform bundles remain self-contained.
The migration pins the actual published linker-input artifacts, updates third-party notices, ignores generated target files, and rejects tracked linker binaries. It also makes runtime publication resumable through drafts and excludes runtime releases from docs restoration.
The compatibility matrix runs both the existing nightly and roc-lang/roc#12949 at c080bd1b across all five native targets. Linux checks cover fully static ELF output, PIE relocation and randomized load addresses, and development-backend TCP/resource probes.
Local validation through the published lock passed 139 native run cases with each compiler, plus all 200 Rust tests and cache/provenance/tooling checks. All 53 executables from each suite passed static ELF checks. The new compiler produces static PIE with randomized load addresses across independent launches. This prepares the requested 0.28.0 stable release.
The compatibility workflow and fixed-address startup patch are temporary for 0.28.0. TODOs beside both implementations and the producer README require their removal in the next release, together with a Roc pin containing roc-lang/roc#12949 and freshly published unpatched startup inputs.