kbuild: rust: Define probing macros for rustc
Creates flag probe macro variants for `rustc`. These are helpful because: 1. The kernel now supports a minimum `rustc` version rather than a single version. 2. `rustc` links against a range of LLVM revisions, occasionally even ones without an official release number. Since the availability of some Rust flags depends on which LLVM it has been linked against, probing is necessary. Signed-off-by: Matthew Maurer <mmaurer@google.com> Link: https://github.com/Rust-for-Linux/linux/pull/1087 Link: https://lore.kernel.org/r/20240820194910.187826-2-mmaurer@google.com Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
This commit is contained in:
parent
cc1d98f9fe
commit
c42297438a
@ -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))
|
cc-option-bit = $(if-success,$(CC) -Werror $(1) -E -x c /dev/null -o /dev/null,$(1))
|
||||||
m32-flag := $(cc-option-bit,-m32)
|
m32-flag := $(cc-option-bit,-m32)
|
||||||
m64-flag := $(cc-option-bit,-m64)
|
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_RUST_IS_AVAILABLE is not set.
|
||||||
|
# If you are testing for unstable features, consider testing RUSTC_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 --out-dir=.tmp_$$ -o .tmp_$$/tmp.rlib)
|
||||||
|
@ -72,3 +72,18 @@ clang-min-version = $(call test-ge, $(CONFIG_CLANG_VERSION), $1)
|
|||||||
# ld-option
|
# ld-option
|
||||||
# Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y)
|
# Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y)
|
||||||
ld-option = $(call try-run, $(LD) $(KBUILD_LDFLAGS) $(1) -v,$(1),$(2),$(3))
|
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 --out-dir=$$TMPOUT -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 --out-dir=$$TMPOUT -o "$$TMP",y,n)
|
||||||
|
Loading…
Reference in New Issue
Block a user