diff mbox series

Makerules: fix out-of-tree build error "Argument list too long"

Message ID 20240424113655.2382993-1-jcmvbkbc@gmail.com
State New
Headers show
Series Makerules: fix out-of-tree build error "Argument list too long" | expand

Commit Message

Max Filippov April 24, 2024, 11:36 a.m. UTC
Make rule that announces and makes static libc archive can generate
command line that is too long when a full path O= option is used. That
breaks the build with the following message:

  make: /bin/sh: Argument list too long

Use make $(file) construct to generate file list file and use that file
as $(AR) argument instead.

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
---
 Makerules | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Bernhard Reutner-Fischer June 3, 2024, 1:03 p.m. UTC | #1
Hi

On 24 April 2024 13:36:55 CEST, Max Filippov <jcmvbkbc@gmail.com> wrote:
>Make rule that announces and makes static libc archive can generate
>command line that is too long when a full path O= option is used. That
>breaks the build with the following message:
>
>  make: /bin/sh: Argument list too long
>
>Use make $(file) construct to generate file list file and use that file
>as $(AR) argument instead.


Busybox ar does not (yet)  support passing in a file containing the list of files, I fear?
Can you maybe add support for that, please?
thanks

>
>Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
>---
> Makerules | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
>diff --git a/Makerules b/Makerules
>index fe8a7916e657..96f2a71ec49a 100644
>--- a/Makerules
>+++ b/Makerules
>@@ -276,7 +276,7 @@ cmd_compile.mi= $(cmd_compile.m:-c=-E -dD) $(UCLIBC_EXTRA_CPPFLAGS)
> cmd_compile-m = $(CC) $^ -c -o $@ $(CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$(notdir $(@D))) $(CFLAGS-$(notdir $@)) $(sort $(foreach d,$(^:$(top_srcdir)=),$(collect_multi_flags)))
> cmd_strip     = $(STRIPTOOL) $(STRIP_FLAGS) $^
> cmd_t_strip   = $(STRIPTOOL) $(STRIP_FLAGS) $@
>-cmd_ar        = $(AR) $(ARFLAGS) $@ $(call objects_with_syms,,$^)
>+cmd_ar        = $(AR) $(ARFLAGS) $@ @$@.list
> 
> define do_ln
> 	@$(disp_ln)
>@@ -317,6 +317,7 @@ hcompile.u= @$(disp_hcompile.u); $(cmd_hcompile.u)
> hcompile.o= @$(disp_hcompile.o); $(cmd_hcompile.o)
> 
> define do_ar
>+	@$(file >$@.list,$(call objects_with_syms,,$^))
> 	@$(disp_ar) ; $(cmd_ar)
> 	@$(do_t_strip)
> endef
Max Filippov June 3, 2024, 4:23 p.m. UTC | #2
On Mon, Jun 3, 2024 at 6:03 AM <rep.dot.nop@gmail.com> wrote:
> On 24 April 2024 13:36:55 CEST, Max Filippov <jcmvbkbc@gmail.com> wrote:
> >Make rule that announces and makes static libc archive can generate
> >command line that is too long when a full path O= option is used. That
> >breaks the build with the following message:
> >
> >  make: /bin/sh: Argument list too long
> >
> >Use make $(file) construct to generate file list file and use that file
> >as $(AR) argument instead.
>
>
> Busybox ar does not (yet)  support passing in a file containing the list of files, I fear?
> Can you maybe add support for that, please?

At supporting such ar, or at adding support for @file notation to busybox ar?
Bernhard Reutner-Fischer June 4, 2024, 6:43 a.m. UTC | #3
On 3 June 2024 18:23:33 CEST, Max Filippov <jcmvbkbc@gmail.com> wrote:
>On Mon, Jun 3, 2024 at 6:03 AM <rep.dot.nop@gmail.com> wrote:
>> On 24 April 2024 13:36:55 CEST, Max Filippov <jcmvbkbc@gmail.com> wrote:
>> >Make rule that announces and makes static libc archive can generate
>> >command line that is too long when a full path O= option is used. That
>> >breaks the build with the following message:
>> >
>> >  make: /bin/sh: Argument list too long
>> >
>> >Use make $(file) construct to generate file list file and use that file
>> >as $(AR) argument instead.
>>
>>
>> Busybox ar does not (yet)  support passing in a file containing the list of files, I fear?
>> Can you maybe add support for that, please?
>
>At supporting such ar, or at adding support for @file notation to busybox ar?
>

The latter, adding @file support to busybox ar.
Max Filippov June 4, 2024, 8:29 a.m. UTC | #4
On Mon, Jun 3, 2024 at 11:43 PM <rep.dot.nop@gmail.com> wrote:
> On 3 June 2024 18:23:33 CEST, Max Filippov <jcmvbkbc@gmail.com> wrote:
> >On Mon, Jun 3, 2024 at 6:03 AM <rep.dot.nop@gmail.com> wrote:
> >> On 24 April 2024 13:36:55 CEST, Max Filippov <jcmvbkbc@gmail.com> wrote:
> >> >Make rule that announces and makes static libc archive can generate
> >> >command line that is too long when a full path O= option is used. That
> >> >breaks the build with the following message:
> >> >
> >> >  make: /bin/sh: Argument list too long
> >> >
> >> >Use make $(file) construct to generate file list file and use that file
> >> >as $(AR) argument instead.
> >>
> >> Busybox ar does not (yet)  support passing in a file containing the list of files, I fear?
> >> Can you maybe add support for that, please?
> >
> >At supporting such ar, or at adding support for @file notation to busybox ar?
>
> The latter, adding @file support to busybox ar.

Sure, I'll take a look.
diff mbox series

Patch

diff --git a/Makerules b/Makerules
index fe8a7916e657..96f2a71ec49a 100644
--- a/Makerules
+++ b/Makerules
@@ -276,7 +276,7 @@  cmd_compile.mi= $(cmd_compile.m:-c=-E -dD) $(UCLIBC_EXTRA_CPPFLAGS)
 cmd_compile-m = $(CC) $^ -c -o $@ $(CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$(notdir $(@D))) $(CFLAGS-$(notdir $@)) $(sort $(foreach d,$(^:$(top_srcdir)=),$(collect_multi_flags)))
 cmd_strip     = $(STRIPTOOL) $(STRIP_FLAGS) $^
 cmd_t_strip   = $(STRIPTOOL) $(STRIP_FLAGS) $@
-cmd_ar        = $(AR) $(ARFLAGS) $@ $(call objects_with_syms,,$^)
+cmd_ar        = $(AR) $(ARFLAGS) $@ @$@.list
 
 define do_ln
 	@$(disp_ln)
@@ -317,6 +317,7 @@  hcompile.u= @$(disp_hcompile.u); $(cmd_hcompile.u)
 hcompile.o= @$(disp_hcompile.o); $(cmd_hcompile.o)
 
 define do_ar
+	@$(file >$@.list,$(call objects_with_syms,,$^))
 	@$(disp_ar) ; $(cmd_ar)
 	@$(do_t_strip)
 endef