Re: [PATCH] rust: Respect HOSTCC when linking for host

From: Finn Behrens
Date: Sat Sep 16 2023 - 14:07:53 EST




On 16 Sep 2023, at 19:53, Björn Roy Baron wrote:

> On Saturday, September 16th, 2023 at 18:52, Finn Behrens <me@xxxxxxxxxx> wrote:
>
>>
>> On 15 Sep 2023, at 19:28, Matthew Maurer wrote:
>>
>>> Currently, rustc defaults to invoking `cc`, even if `HOSTCC` is defined,
>>> resulting in build failures in hermetic environments where `cc` does not
>>> exist. This includes both hostprogs and proc-macros.
>>>
>>> Since we are setting the linker to `HOSTCC`, we set the linker flavor to
>>> `gcc` explicitly.
>> But as `HOSTCC` could also be clang, the linker flavor would then be wrong, would that create a problem?
>
> Rustc uses the gcc linker flavor for clang too. There has been a proposal to split it up, but I'm not sure of the status of that. In any case clang's cli is similar enough to gcc that it works fine to use the gcc linker flavor.
>
In that case this looks very reasonable.

Second thing I noticed is that `HOSTCC` could be the wrong variable, and `HOSTLD` would make more sense as we look for the linker and not the general C compiler.

>>>
>>> Signed-off-by: Matthew Maurer <mmaurer@xxxxxxxxxx>
>>> ---
>>> rust/Makefile | 1 +
>>> scripts/Makefile.host | 1 +
>>> 2 files changed, 2 insertions(+)
>>>
>>> diff --git a/rust/Makefile b/rust/Makefile
>>> index 87958e864be0..2a2352638f11 100644
>>> --- a/rust/Makefile
>>> +++ b/rust/Makefile
>>> @@ -383,6 +383,7 @@ $(obj)/exports_kernel_generated.h: $(obj)/kernel.o FORCE
>>> quiet_cmd_rustc_procmacro = $(RUSTC_OR_CLIPPY_QUIET) P $@
>>> cmd_rustc_procmacro = \
>>> $(RUSTC_OR_CLIPPY) $(rust_common_flags) \
>>> + -C linker-flavor=gcc -C linker=$(HOSTCC) \
>>> --emit=dep-info=$(depfile) --emit=link=$@ --extern proc_macro \
>>> --crate-type proc-macro \
>>> --crate-name $(patsubst lib%.so,%,$(notdir $@)) $<
>>> diff --git a/scripts/Makefile.host b/scripts/Makefile.host
>>> index 8f7f842b54f9..0aa95a3af1c4 100644
>>> --- a/scripts/Makefile.host
>>> +++ b/scripts/Makefile.host
>>> @@ -91,6 +91,7 @@ hostcxx_flags = -Wp,-MMD,$(depfile) \
>>> # current working directory, which may be not accessible in the out-of-tree
>>> # modules case.
>>> hostrust_flags = --out-dir $(dir $@) --emit=dep-info=$(depfile) \
>>> + -C linker-flavor=gcc -C linker=$(HOSTCC) \
>>> $(KBUILD_HOSTRUSTFLAGS) $(HOST_EXTRARUSTFLAGS) \
>>> $(HOSTRUSTFLAGS_$(target-stem))
>>>
>>> --
>>> 2.42.0.459.ge4e396fd5e-goog