this is fucking absurd https://doc.rust-lang.org/cargo/reference/config.html#buildrustc
build.rustc
Type: string (program path)
Default: "rustc"
Environment: CARGO_BUILD_RUSTC or RUSTC
Sets the executable to use for rustc.
so "Type: string (program path)" is it a string or a program path? does it get split by space? does it get looked up by PATH? oh my god fuck--
build.rustc-wrapper
Type: string (program path)
Default: none
Environment: CARGO_BUILD_RUSTC_WRAPPER or RUSTC_WRAPPER
Sets a wrapper to execute instead of rustc. The first argument passed to the wrapper is the path to the actual executable to use (i.e., build.rustc, if that is set, or "rustc" otherwise).
a wrapper that introspects the rustc. very cool, very normal, very UX. but there's even MORE UX
build.rustc-workspace-wrapper
Type: string (program path)
Default: none
Environment: CARGO_BUILD_RUSTC_WORKSPACE_WRAPPER or RUSTC_WORKSPACE_WRAPPER
Sets a wrapper to execute instead of rustc, for workspace members only. When building a single-package project without workspaces, that package is considered to be the workspace. The first argument passed to the wrapper is the path to the actual executable to use (i.e., build.rustc, if that is set, or "rustc" otherwise). It affects the filename hash so that artifacts produced by the wrapper are cached separately.
If both rustc-wrapper and rustc-workspace-wrapper are set, then they will be nested: the final invocation is $RUSTC_WRAPPER $RUSTC_WORKSPACE_WRAPPER $RUSTC.
The Final Invocation