The reconverge rustc driver binary.
Invoked by cargo as RUSTC_WORKSPACE_WRAPPER: argv[1] is the path to
the real rustc, followed by ordinary rustc arguments. The driver runs the
full compilation through rustc_driver and, once analysis is done, walks
the crate through rustc_public (Stable MIR). Compilation then continues
normally, so a wrapped cargo check behaves exactly like an unwrapped
one. Without any RECONVERGE_* variable set the wrapper is a pure
passthrough.
Environment interface (set by cargo reconverge, or by hand):
RECONVERGE_ARTIFACTS_OUT=<dir>— run the lint passes over every detected kernel and write afindings-<crate>.jsonartifact (findings.v1).RECONVERGE_CC=<X.Y>— target compute capability for RC004 capacity context; must be in the dialect's table.RECONVERGE_MIR_OUT=<dir>— dump<kernel>.mirper detected kernel plus adetection.txtmanifest.
Kernel detection (strategies in order): the
post-expansion #[kernel] attribute does not survive — upstream's proc
macro consumes it and re-emits the function renamed under its reserved
naming contract with #[unsafe(no_mangle)] (verified against
cuda-macros at the pinned rev). That renamed item is the marker the
macro leaves AND the symbol name, so the marker-item and symbol-name
strategies coincide; both are implemented by
reconverge_dialect_oxide::kernel_base_name.
Unstable-internals justification (CONTRIBUTING.md): analysis uses
rustc_public exclusively. rustc_driver, rustc_interface, and
rustc_middle appear only because rustc_public::run! needs them in
scope to instantiate the compiler — there is no stable driver entry
point yet.