Browse Source

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

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>
Max Filippov 3 weeks ago
parent
commit
66c855560d
1 changed files with 2 additions and 1 deletions
  1. 2 1
      Makerules

+ 2 - 1
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