Skip to content

Contributing

Contributions are managed in the WAVE repository.

Follow Installation to build the toolchain. Each package has its own manifest. From the repository root, run the relevant package's checks:

Terminal window
cargo fmt --manifest-path wave-compiler/Cargo.toml --check
cargo clippy --manifest-path wave-compiler/Cargo.toml --all-targets -- -D warnings
cargo test --manifest-path wave-compiler/Cargo.toml

For changes to instruction encoding, execution, or translation, also run the integration checks:

Terminal window
bash tests/ci/run_emulator_tests.sh
bash tests/ci/run_backend_tests.sh
cargo run --manifest-path tests/spec-verification/Cargo.toml

CI checks formatting, linting, package tests, SDK tests, and emulator and backend integration tests. The workflow contains the commands for each language.

Compiler and backend changes must preserve the ISA's behavior. Include a test that exercises the affected behavior. Performance claims need measurements and correctness checks on the named hardware. See Hardware verification for the benchmark methods.

Specification proposals should identify the operation or rule being changed and explain its effect on each backend. SDK and documentation changes should include examples that work with the current interfaces.

  1. Create a branch from main.
  2. Make the change and run the relevant checks.
  3. Describe the problem, resulting behavior, and validation in the pull request.
  4. Address CI failures before requesting review.

Use rustfmt defaults, document public interfaces, and fix Clippy warnings at their source.