Repository navigation
Add package targets, build profiles, and unified artifact layouts - #175
Merged
Merged
Conversation
Signed-off-by: LunaStev <luna@lunastev.org>
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.
Summary
Add manifest-owned package targets, build profiles, and one artifact layout for ordinary and native builds. A package can now expose its canonical Wave library alongside multiple named binaries, and Vex validates every selected build plan before compiling the first target.
Closes #46
Closes #47
Closes #48
Closes #54
Why
The previous single
libswitch could not represent a library plus CLI or multiple binaries. Ordinary builds delegated artifact placement to wavec while native builds used a separate target/profile layout, and--releasewas only a hard-coded optimization flag. These differences prevented a consistent package build contract and reliable tooling output.Behavior
targets.lib, explicittargets.bins,default_run, profiles, a default compiler target, and exact-triple platform settings. Formats 1 and 2 retain their parsing/string meanings and are not rewritten automatically. Lockfile v3 and locked/offline graph semantics remain unchanged.build/checkdefault to all root targets, with--liband repeatable--bin <name>selectors.runchooses an explicit binary,default_run, or the only binary; ambiguity is an error. Dependencies contribute their source library, not their binaries or separately emitted library objects.--releasealiases--profile release. Debug information, overflow/assertion switches, LTO, and size-optimization policies without a guaranteed compiler contract are rejected rather than silently ignored. Wave language entry/main semantics remain compiler-owned.target/<compiler-triple>/<profile>/bin/orlib/, with separate intermediates and protected Windows companion files. Old artifacts are not automatically moved or deleted. Compiler plans must honor the selected output kind, final destination, and intermediate namespace.--format-version 2for target/profile/platform declarations without compiler queries. The default remains schema 1, which rejects packages it cannot represent accurately. Doctor checks every root target.vex.build-planenvelope containing the selected profile and per-target compiler plans. Each selected target invokes the planner once; dry-run creates no build outputs or message file.The migration and command contracts are documented in
docs/targets-and-profiles.md, the reference pages, and JSON schemas. Existing required real-compiler CI smokes now exercise format 3 mixed targets, self-imports, profiles, metadata and native exports. Contributorgood first issuetasks are not included or linked for automatic closure.Validation
cargo fmt --checkcargo test --workspace --locked— 289 passed; one existing subprocess-fixture test is intentionally ignored and invoked by supervision tests.cargo clippy --workspace --locked --all-targets -- -D warningscargo build --workspace --lockedpython3 x.py check— includes the checks above and 38 Python tests.20261018, including the new format 3 model.x86_64-pc-windows-gnu,aarch64-unknown-linux-gnu,riscv64gc-unknown-linux-gnu.wave_compatibility.pyandnative_interop.py, including persisted format 3 cases, C/C++/Rust inputs and C consumers of Wave object/shared artifacts.The local compiler reports
0.2.1-pre-beta; its executable SHA-256 ise4439dc77b0a142dd38e22406cf489c2ee123bcf2ec474afbefd072078a0e504. Its exact build source commit was not inferred from its version. Cross checks establish compilation, not native runtime acceptance; all nine platform CI lanes must pass on this PR before merge.Checklist
wavefnd/Vex:master.--lockedand--offlinebehavior remains correct.wavecflags were added to the Vex CLI.Signed-off-by:line.