All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ian Rogers <irogers@google.com>
Cc: Namhyung Kim <namhyung@kernel.org>,
	Ingo Molnar <mingo@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	James Clark <james.clark@linaro.org>,
	Jiri Olsa <jolsa@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Clark Williams <williams@redhat.com>,
	linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
	Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: Re: [PATCH 1/7] tools build: Only probe the compiler at parse time when it is installed
Date: Tue, 11 Aug 2026 12:12:26 -0300	[thread overview]
Message-ID: <ans72o4MAC03XILw@x1> (raw)
In-Reply-To: <CAP-5=fWRQuo29kBXzOP9jobO6rcTPqZ5PLt42G+0+0Rh2tm7bw@mail.gmail.com>

On Mon, Aug 10, 2026 at 11:07:40AM -0700, Ian Rogers wrote:
> On Mon, Aug 10, 2026 at 8:44 AM Arnaldo Carvalho de Melo <acme@kernel.org> wrote:
> > 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@kernel.org>

> > +++ 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.

Sure, will add explanations, see below.

> 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?

Well, the point of this series is to install what is needed to build
perf, gcc included, so on a freshly installed machine the user can just
do:

cd tools/perf
make install-build-deps

And the machine will have all the packages that are needed.

> 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).

I think this can be a followup series, i.e. making the kernel have that
target as well.

Having it in perf will showcase its usability and may entice the Kbuild
guys to consider accepting such a functionality.

- Arnaldo

acme@number:~/git/perf-tools-next$ git diff ca62b23f83ddfb8e..
diff --git a/tools/scripts/Makefile.arch b/tools/scripts/Makefile.arch
index e0bca6808ec44ed8..ed5f008d400ed238 100644
--- a/tools/scripts/Makefile.arch
+++ b/tools/scripts/Makefile.arch
@@ -38,6 +38,12 @@ ifeq ($(ARCH),loongarch64)
        SRCARCH := loongarch
 endif

+# Probe for __LP64__ only when the compiler is installed: this runs at
+# parse time for every target, including ones that never compile, e.g.
+# install-build-deps, and would otherwise spew "gcc: not found" when the
+# compiler is not yet installed. Only the first word of CC is consulted,
+# as CC may carry arguments, e.g. 'ccache gcc'. When the guard fails it
+# prints nothing, leaving LP64 unset, as if the probe had failed.
 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
diff --git a/tools/scripts/Makefile.include b/tools/scripts/Makefile.include
index fff453aac187536e..378387f629603e92 100644
--- a/tools/scripts/Makefile.include
+++ b/tools/scripts/Makefile.include
@@ -98,6 +98,12 @@ else
   $(call allow-override,LLVM_STRIP,llvm-strip)
 endif

+# The CC_NO_CLANG probe also runs at parse time for targets that never
+# compile, so guard it with 'command -v': when the compiler is not yet
+# installed, e.g. the first install-build-deps run, it would otherwise
+# spew "gcc: not found". Only the first word of CC is consulted, as CC
+# may carry arguments, e.g. 'ccache gcc'. A missing compiler leaves
+# CC_NO_CLANG at 1, as if the probe had failed.
 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
acme@number:~/git/perf-tools-next$

  reply	other threads:[~2026-08-11 15:12 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-10 15:44 [PATCHES v2 0/7] perf build: Add target to install devel packages needed to build perf Arnaldo Carvalho de Melo
2026-08-10 15:44 ` [PATCH 1/7] tools build: Only probe the compiler at parse time when it is installed Arnaldo Carvalho de Melo
2026-08-10 18:07   ` Ian Rogers
2026-08-11 15:12     ` Arnaldo Carvalho de Melo [this message]
2026-08-10 15:44 ` [PATCH 2/7] perf build: Add install-build-deps framework to install devel packages Arnaldo Carvalho de Melo
2026-08-10 15:44 ` [PATCH 3/7] perf build: install-build-deps: add Fedora devel package mapping Arnaldo Carvalho de Melo
2026-08-10 15:44 ` [PATCH 4/7] perf build: install-build-deps: add Ubuntu " Arnaldo Carvalho de Melo
2026-08-10 15:44 ` [PATCH 5/7] perf build: install-build-deps: add Debian " Arnaldo Carvalho de Melo
2026-08-10 15:44 ` [PATCH 6/7] perf build: Remove leftover feature tests for removed cxx and clang support Arnaldo Carvalho de Melo
2026-08-10 15:44 ` [PATCH 7/7] perf build: install-build-deps: add RHEL family devel package mapping Arnaldo Carvalho de Melo
2026-08-10 16:09   ` sashiko-bot
  -- strict thread matches above, loose matches on Subject: below --
2026-08-11 18:28 [PATCHES v9 0/7] perf build: Add target to install devel packages needed to build perf Arnaldo Carvalho de Melo
2026-08-11 18:28 ` [PATCH 1/7] tools build: Only probe the compiler at parse time when it is installed Arnaldo Carvalho de Melo
2026-08-11 15:19 [PATCHES v8 0/7] perf build: Add target to install devel packages needed to build perf Arnaldo Carvalho de Melo
2026-08-11 15:19 ` [PATCH 1/7] tools build: Only probe the compiler at parse time when it is installed Arnaldo Carvalho de Melo
2026-08-11  1:28 [PATCHES v7 0/7] perf build: Add target to install devel packages needed to build perf Arnaldo Carvalho de Melo
2026-08-11  1:28 ` [PATCH 1/7] tools build: Only probe the compiler at parse time when it is installed Arnaldo Carvalho de Melo
2026-08-11  0:46 [PATCHES v6 0/7] perf build: Add target to install devel packages needed to build perf Arnaldo Carvalho de Melo
2026-08-11  0:46 ` [PATCH 1/7] tools build: Only probe the compiler at parse time when it is installed Arnaldo Carvalho de Melo
2026-08-10 21:46 [PATCHES v5 0/7] perf build: Add target to install devel packages needed to build perf Arnaldo Carvalho de Melo
2026-08-10 21:46 ` [PATCH 1/7] tools build: Only probe the compiler at parse time when it is installed Arnaldo Carvalho de Melo
2026-08-10 19:34 [PATCHES v4 0/7] perf build: Add target to install devel packages needed to build perf Arnaldo Carvalho de Melo
2026-08-10 19:35 ` [PATCH 1/7] tools build: Only probe the compiler at parse time when it is installed Arnaldo Carvalho de Melo
2026-08-10 18:15 [PATCHES v3 0/7] perf build: Add target to install devel packages needed to build perf Arnaldo Carvalho de Melo
2026-08-10 18:15 ` [PATCH 1/7] tools build: Only probe the compiler at parse time when it is installed Arnaldo Carvalho de Melo
2026-08-10  0:51 [PATCHES v1 0/7] perf build: Add target to install devel packages needed to build perf Arnaldo Carvalho de Melo
2026-08-10  0:51 ` [PATCH 1/7] tools build: Only probe the compiler at parse time when it is installed Arnaldo Carvalho de Melo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ans72o4MAC03XILw@x1 \
    --to=acme@kernel.org \
    --cc=acme@redhat.com \
    --cc=adrian.hunter@intel.com \
    --cc=irogers@google.com \
    --cc=james.clark@linaro.org \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=williams@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.