Re: [PATCH 1/7] tools build: Only probe the compiler at parse time when it is installed

Ian Rogers <[email protected]>
Newsgroups org.kernel.vger.linux-perf-users,org.kernel.vger.linux-kernel
Message-ID <CAP-5=fWRQuo29kBXzOP9jobO6rcTPqZ5PLt42G+0+0Rh2tm7bw@mail.gmail.com>
On Mon, Aug 10, 2026 at 8:44 AM Arnaldo Carvalho de Melo
<[email protected]> wrote:
>
> From: Arnaldo Carvalho de Melo <[email protected]>
>
> Two parse-time probes still invoke $(CC) unconditionally:
>
> - LP64 in tools/scripts/Makefile.arch, probing with
>   $(CC) -E -x c, pulled in twice by tools/perf/Makefile.perf;
> - CC_NO_CLANG in tools/scripts/Makefile.include, probing with
>   $(CC) -dM -E -x c /dev/null.
>
> In the corner case where gcc is not yet installed, the very setup the
> install-build-deps target, added in the next patch of this series, is
> meant for, these probes make even targets that never compile parse-time
> spew errors like:
>
>     /bin/sh: 1: gcc: not found
>     /bin/sh: 1: gcc: not found
>     /bin/sh: 1: gcc: not found
>
> Guard both probes with 'command -v' using the first word of CC so a
> missing compiler is handled silently with the same result as a failing
> probe (CC_NO_CLANG and LP64 unset/0), and with no behavior change when
> the compiler is installed.
>
> Only the first word is consulted because CC may carry arguments such as
> 'ccache gcc', and shell implementations differ in how 'command -v'
> handles multiple words (dash only checks the first, bash any of them),
> so validating the whole CC value would silently disable both probes on
> some make SHELLs.
>
> Assisted-by: opencode:deepseek-v4-flash-free
> Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
> Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
> ---
>  tools/scripts/Makefile.arch    | 2 +-
>  tools/scripts/Makefile.include | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/tools/scripts/Makefile.arch b/tools/scripts/Makefile.arch
> index eabfe9f411d914b9..e0bca6808ec44ed8 100644
> --- a/tools/scripts/Makefile.arch
> +++ b/tools/scripts/Makefile.arch
> @@ -38,7 +38,7 @@ ifeq ($(ARCH),loongarch64)
>         SRCARCH := loongarch
>  endif
>
> -LP64 := $(shell echo __LP64__ | ${CC} ${CFLAGS} -E -x c - | tail -n 1)
> +LP64 := $(shell if command -v $(firstword ${CC}) >/dev/null 2>&1; then echo __LP64__ | ${CC} ${CFLAGS} -E -x c -; fi | tail -n 1)

nit: It might be worth adding a comment to explain this fairly complex
one-liner.
As there are minimum requirements to build the kernel
(https://www.kernel.org/doc/html/latest/process/changes.html) does it
make sense to be defensive about CC not being installed?
Perhaps install-build-deps.sh can be part of the wider kernel build
with flags to specify if you are building the kernel or a tool, where
depencies are different (e.g. perf doesn't need quota-tools but
libcapstone is useful).

Thanks,
Ian


>  ifeq ($(LP64), 1)
>    IS_64_BIT := 1
>  else
> diff --git a/tools/scripts/Makefile.include b/tools/scripts/Makefile.include
> index 46a3872b87624a7b..fff453aac187536e 100644
> --- a/tools/scripts/Makefile.include
> +++ b/tools/scripts/Makefile.include
> @@ -98,7 +98,7 @@ else
>    $(call allow-override,LLVM_STRIP,llvm-strip)
>  endif
>
> -CC_NO_CLANG := $(shell $(CC) -dM -E -x c /dev/null | grep -Fq "__clang__"; echo $$?)
> +CC_NO_CLANG := $(shell if command -v $(firstword $(CC)) >/dev/null 2>&1; then $(CC) -dM -E -x c /dev/null; fi | grep -Fq "__clang__"; echo $$?)
>
>  # Some tools require bpftool
>  SYSTEM_BPFTOOL ?= bpftool
> --
> 2.55.0
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.