• Miguel Ojeda's avatar
    kbuild: mark `rustc` (and others) invocations as recursive · ecab4115
    Miguel Ojeda authored
    `rustc` (like Cargo) may take advantage of the jobserver at any time
    (e.g. for backend parallelism, or eventually frontend too). In the kernel,
    we call `rustc` with `-Ccodegen-units=1` (and `-Zthreads` is 1 so far),
    so we do not expect parallelism. However, in the upcoming Rust 1.76.0, a
    warning is emitted by `rustc` [1] when it cannot connect to the jobserver
    it was passed (in many cases, but not all: compiling and `--print sysroot`
    do, but `--version` does not). And given GNU Make always passes
    the jobserver in the environment variable (even when a line is deemed
    non-recursive), `rustc` will end up complaining about it (in particular
    in Make 4.3 where there is only the simple pipe jobserver style).
    
    One solution is to remove the jobserver from `MAKEFLAGS`. However, we
    can mark the lines with calls to `rustc` (and Cargo) as recursive, which
    looks simpler. This is being documented as a recommendation in `rustc`
    [2] and allows us to be ready for the time we may use parallelism inside
    `rustc` (potentially now, if a user passes `-Zthreads`). Thus do so.
    
    Similarly, do the same for `rustdoc` and `cargo` calls.
    
    Finally, there is one case that the solution does not cover, which is the
    `$(shell ...)` call we have. Thus, for that one, set an empty `MAKEFLAGS`
    environment variable.
    
    Link: https://github.com/rust-lang/rust/issues/120515 [1]
    Acked-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
    Link: https://github.com/rust-lang/rust/pull/121564 [2]
    Link: https://lore.kernel.org/r/20240217002638.57373-1-ojeda@kernel.org
    [ Reworded to add link to PR documenting the recommendation. ]
    Signed-off-by: default avatarMiguel Ojeda <ojeda@kernel.org>
    ecab4115
Makefile.build 17.2 KB