• Alice Ryhl's avatar
    kbuild: fix issues with rustc-option · e72a076c
    Alice Ryhl authored
    Fix a few different compiler errors that cause rustc-option to give
    wrong results.
    
    If KBUILD_RUSTFLAGS or the flags being tested contain any -Z flags, then
    the error below is generated. The RUSTC_BOOTSTRAP environment variable
    is added to fix this error.
    
    	error: the option `Z` is only accepted on the nightly compiler
    	help: consider switching to a nightly toolchain: `rustup default nightly`
    	note: selecting a toolchain with `+toolchain` arguments require a rustup proxy;
    	      see <https://rust-lang.github.io/rustup/concepts/index.html>
    	note: for more information about Rust's stability policy, see
    	      <https://doc.rust-lang.org/book/appendix-07-nightly-rust.html#unstable-features>
    	error: 1 nightly option were parsed
    
    Note that RUSTC_BOOTSTRAP is also defined in the top-level Makefile,
    but Make-exported variables are unfortunately *not* inherited. That said,
    this is changing as of commit 98da874c4303 ("[SV 10593] Export variables
    to $(shell ...) commands"), which is part of Make 4.4.
    
    The probe may also fail with the error message below. To fix it,
    the /dev/null argument is replaced with a file containing the crate
    attribute #![no_core]. The #![no_core] attribute ensures that rustc does
    not look for the standard library. It's not possible to instead supply
    a standard library (i.e. `core`) to rustc, as we need `rustc-option`
    before the Rust standard library is compiled.
    
    	error[E0463]: can't find crate for `std`
    	  |
    	  = note: the `aarch64-unknown-none` target may not be installed
    	  = help: consider downloading the target with `rustup target add aarch64-unknown-none`
    	  = help: consider building the standard library from source with `cargo build -Zbuild-std`
    
    The -o and --out-dir parameters are altered to fix this warning:
    
    	warning: ignoring --out-dir flag due to -o flag
    
    The --sysroot flag is provided as we would otherwise require it to be
    present in KBUILD_RUSTFLAGS. The --emit=obj flag is used to write the
    resulting object file to /dev/null instead of writing it to a file
    in $(TMPOUT).
    
    I verified that the Kconfig version of rustc-option doesn't have the
    same issues.
    
    Fixes: c4229743 ("kbuild: rust: Define probing macros for rustc")
    Co-developed-by: default avatarMiguel Ojeda <ojeda@kernel.org>
    Signed-off-by: default avatarMiguel Ojeda <ojeda@kernel.org>
    Signed-off-by: default avatarAlice Ryhl <aliceryhl@google.com>
    Acked-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
    Link: https://lore.kernel.org/r/20241009-rustc-option-bootstrap-v3-1-5fa0d520efba@google.com
    [ Reworded as discussed in the list. - Miguel ]
    Signed-off-by: default avatarMiguel Ojeda <ojeda@kernel.org>
    e72a076c
Makefile.compiler 3.38 KB