[PATCH 1/7] tools build: Only probe the compiler at parse time when it is installed
From: Arnaldo Carvalho de Melo
Date: Tue Aug 11 2026 - 11:26:23 EST
From: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
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 <acme@xxxxxxxxxx>
Signed-off-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
---
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)
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