Message ID | 20240812232910.2026387-2-mmaurer@google.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [v2,1/3] kbuild: rust: Define probing macros for rustc | expand |
On Tue, Aug 13, 2024 at 1:29 AM Matthew Maurer <mmaurer@google.com> wrote: > > 1. `rustc` support will soon be a minimum rather than a pinned version. In the meantime, this happened, so we should update this sentence. > 2. We already support multiple LLVMs linked into `rustc`, and these are I guess you mean `rustc` is able to use multiple major versions of LLVM -- or what do you mean by "multiple LLVMs linked"? > +# $(rustc-option,<flag>) > +# Return y if the Rust compiler supports <flag>, n otherwise > +# Calls to this should be guarded so that they are not evaluated if > +# CONFIG_HAVE_RUST is not set. Hmm... why `HAVE_RUST`? Should that be `RUST_IS_AVAILABLE`? Or what is the intention? Perhaps a comment would help here -- e.g. something like the comment I used in the original approach [1]. Otherwise we will forget... :) Also, I guess you wanted to relax the precondition as much as possible, which is great, just to double check, do we expect a case outside `RUST=y`? > rustc-option = $(success,trap "rm -rf .tmp_$$" EXIT; mkdir .tmp_$$; $(RUSTC) $(1) --crate-type=rlib /dev/null -o .tmp_$$/tmp.rlib) I also had `out-dir` [1] since, if I remember correctly, `rustc` may create temporary files in a potentially read-only location even in this case. Also, should we do `-Dwarnings` here? > +# If you are testing for unstable features, consider `rustc-min-version` > +# instead, as features may have different completeness while available. `rustc-min-version` is not mainline yet -- we don't have a user yet, but I can send it if so. Thanks! [1] https://github.com/Rust-for-Linux/linux/pull/1087#issuecomment-2218445303 Cheers, Miguel
On Wed, Aug 14, 2024 at 1:27 PM Miguel Ojeda <miguel.ojeda.sandonis@gmail.com> wrote: > > I also had `out-dir` [1] since, if I remember correctly, `rustc` may > create temporary files in a potentially read-only location even in > this case. Ah, wait, you are avoiding `try-run` -- is it because of that? I think we should try to reuse it, even if we have to add the `TMPOUT`. Or what is the reason for not reusing it? Cheers, Miguel
diff --git a/scripts/Kconfig.include b/scripts/Kconfig.include index 3500a3d62f0d..becad3d0b1fd 100644 --- a/scripts/Kconfig.include +++ b/scripts/Kconfig.include @@ -64,3 +64,11 @@ ld-version := $(shell,set -- $(ld-info) && echo $2) cc-option-bit = $(if-success,$(CC) -Werror $(1) -E -x c /dev/null -o /dev/null,$(1)) m32-flag := $(cc-option-bit,-m32) m64-flag := $(cc-option-bit,-m64) + +# $(rustc-option,<flag>) +# Return y if the Rust compiler supports <flag>, n otherwise +# Calls to this should be guarded so that they are not evaluated if +# CONFIG_HAVE_RUST is not set. +# If you are testing for unstable features, consider `rustc-min-version` +# instead, as features may have different completeness while available. +rustc-option = $(success,trap "rm -rf .tmp_$$" EXIT; mkdir .tmp_$$; $(RUSTC) $(1) --crate-type=rlib /dev/null -o .tmp_$$/tmp.rlib) diff --git a/scripts/Makefile.compiler b/scripts/Makefile.compiler index 92be0c9a13ee..485d66768a32 100644 --- a/scripts/Makefile.compiler +++ b/scripts/Makefile.compiler @@ -72,3 +72,18 @@ clang-min-version = $(call test-ge, $(CONFIG_CLANG_VERSION), $1) # ld-option # Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y) ld-option = $(call try-run, $(LD) $(KBUILD_LDFLAGS) $(1) -v,$(1),$(2),$(3)) + +# __rustc-option +# Usage: MY_RUSTFLAGS += $(call __rustc-option,$(RUSTC),$(MY_RUSTFLAGS),-Cinstrument-coverage,-Zinstrument-coverage) +__rustc-option = $(call try-run,\ + $(1) $(2) $(3) --crate-type=rlib /dev/null -o "$$TMP",$(3),$(4)) + +# rustc-option +# Usage: rustflags-y += $(call rustc-option,-Cinstrument-coverage,-Zinstrument-coverage) +rustc-option = $(call __rustc-option, $(RUSTC),\ + $(KBUILD_RUSTFLAGS),$(1),$(2)) + +# rustc-option-yn +# Usage: flag := $(call rustc-option-yn,-Cinstrument-coverage) +rustc-option-yn = $(call try-run,\ + $(RUSTC) $(KBUILD_RUSTFLAGS) $(1) --crate-type=rlib /dev/null -o "$$TMP",y,n)
Creates flag probe macro variants for `rustc`. These are helpful because: 1. `rustc` support will soon be a minimum rather than a pinned version. 2. We already support multiple LLVMs linked into `rustc`, and these are needed to probe what LLVM parameters `rustc` will accept. Signed-off-by: Matthew Maurer <mmaurer@google.com> --- scripts/Kconfig.include | 8 ++++++++ scripts/Makefile.compiler | 15 +++++++++++++++ 2 files changed, 23 insertions(+)