Re: [PATCH RFC] scripts: pass dtc cpp flags via a GCC response file
Tom Rini <[email protected]>
| Newsgroups | org.u-boot-project.lists.u-boot |
|---|---|
| Message-ID | <20260825134807.GR523975@bill-the-cat> |
On Tue, Aug 25, 2026 at 07:53:10AM +0200, Michal Simek wrote:
>
>
> On 8/24/26 18:51, Tom Rini wrote:
> > On Mon, Aug 24, 2026 at 05:29:37PM +0200, Michal Simek wrote:
> > >
> > >
> > > On 8/24/26 17:09, Tom Rini wrote:
> > > > On Mon, Aug 24, 2026 at 10:17:18AM +0530, Suraj Kakade wrote:
> > > >
> > > > > cmd_dtc inlines dtc_cpp_flags (including every upstream dtsi -I
> > > > > path) in the HOSTCC command. With a long $(srctree) that command is
> > > > > too large for /bin/sh -c and Make fails with "Argument list too
> > > > > long" while building a .dtb.
> > > > >
> > > > > Write the flags to a per-target .dtc.flags.tmp file and pass @file to
> > > > > HOSTCC/CPP so the shell command stays short.
> > > > >
> > > > > This change requires GNU Make >= 4.0, since $(file ...) is not
> > > > > supported by Make 3.x.
> > > > >
> > > > > Fixes: d31ff219a833 ("Makefile.lib: find capsule ESL dtsi file with CONFIG_OF_UPSTREAM")
> > > > > Fixes: 1e7883f6325a ("dtbo: Fix dtbo generation rules")
> > > > > Signed-off-by: Suraj Kakade <[email protected]>
> > > >
> > > > The linux kernel, and so Kbuild, says that 4.0 is the minimum version of
> > > > GNU make required, so that is true for us as well, so this is fine.
> > > >
> > > > Reviewed-by: Tom Rini <[email protected]>
> > > >
> > >
> > > We should likely fix this too.
> > >
> > > 94 # If the user is running make -s (silent mode), suppress echoing of
> > > 95 # commands
> > > 96 ifneq ($(filter 4.%,$(MAKE_VERSION)),) # make-4
> > > 97 ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),)
> > > 98 quiet=silent_
> > > 99 endif
> > > 100 else # make-3.8x
> > > 101 ifneq ($(filter s% -s%,$(MAKEFLAGS)),)
> > > 102 quiet=silent_
> > > 103 endif
> > > 104 endif
> >
> > I think this means we should pull commit
> > 5f99665ee8f4335f334a5292b6d5b41a577fc2c0 from the kernel in, to fully
> > switch to 4.0 as minimum.
> >
>
> something like this?
>
> M
>
> diff --git a/Makefile b/Makefile
> index 16e3e4dfe5e4..e0ab39200c1b 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -93,15 +93,9 @@ endif
>
> # If the user is running make -s (silent mode), suppress echoing of
> # commands
> -ifneq ($(filter 4.%,$(MAKE_VERSION)),) # make-4
> -ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),)
> +ifneq ($(findstring s,$(firstword -$(MAKEFLAGS))),)
> quiet=silent_
> endif
> -else # make-3.8x
> -ifneq ($(filter s% -s%,$(MAKEFLAGS)),)
> - quiet=silent_
> -endif
> -endif
>
> export quiet Q KBUILD_VERBOSE
>
> @@ -166,14 +160,6 @@ ifneq ($(abs_srctree),$(abs_objtree))
> MAKEFLAGS += --include-dir=$(abs_srctree)
> endif
>
> -ifneq ($(filter 3.%,$(MAKE_VERSION)),)
> -# 'MAKEFLAGS += -rR' does not immediately become effective for GNU Make 3.x
> -# We need to invoke sub-make to avoid implicit rules in the top Makefile.
> -need-sub-make := 1
> -# Cancel implicit rules for this Makefile.
> -$(this-makefile): ;
> -endif
> -
> export abs_srctree abs_objtree
> export sub_make_done := 1
And also the version check part (which we didn't add the initial part of
yet either, which checks for 3.8). Thanks!
--
Tom
signature.asc
(application/pgp-signature, 228 B)
-----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQTzzqh0PWDgGS+bTHor4qD1Cr/kCgUCao2dEwAKCRAr4qD1Cr/k CnPBAQDvGCiWG1ViPKIfsX67V1OIe/QWxkQiQjo3miNYd37FjAEA0wUq4aDnvyKa S0lCdEBVjEy1d+ch2fA6PR9V9odZVQY= =OVtM -----END PGP SIGNATURE-----