* [FFmpeg-devel] [PATCH 1/2] ffbuild: compose linker response files in a loop @ 2025-03-21 10:40 Gyan Doshi 2025-03-21 10:40 ` [FFmpeg-devel] [PATCH 2/2] configure: add option to select use of response files Gyan Doshi 2025-03-21 21:59 ` [FFmpeg-devel] [PATCH 1/2] ffbuild: compose linker response files in a loop Martin Storsjö 0 siblings, 2 replies; 22+ messages in thread From: Gyan Doshi @ 2025-03-21 10:40 UTC (permalink / raw) To: ffmpeg-devel Avoids echo failing due to the same ARG_MAX limit that prompted response files to be used with the linker. --- ffbuild/library.mak | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ffbuild/library.mak b/ffbuild/library.mak index 7e1871b74c..15302852ec 100644 --- a/ffbuild/library.mak +++ b/ffbuild/library.mak @@ -36,7 +36,8 @@ endif $(SUBDIR)$(LIBNAME): $(OBJS) $(STLIBOBJS) $(RM) $@ ifeq ($(AR_OBJS),true) - $(Q)echo $^ > $@.objs + -$(RM) $@.objs + $(Q)$(foreach ARG,$^,echo -n "$(ARG) " >> $@.objs;) $(AR) $(ARFLAGS) $(AR_O) @$@.objs else $(AR) $(ARFLAGS) $(AR_O) $^ @@ -73,7 +74,9 @@ $(SUBDIR)$(SLIBNAME): $(SUBDIR)$(SLIBNAME_WITH_MAJOR) $(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS) $(SHLIBOBJS) $(SLIBOBJS) $(SUBDIR)lib$(NAME).ver $(SLIB_CREATE_DEF_CMD) ifeq ($(AR_OBJS),true) - $(Q)echo $$(filter %.o,$$^) > $$@.objs + -$(RM) $$@.objs + $(Q)$(eval LDARGS=$$(filter %.o,$$^)) + $(Q)$(foreach ARG,$$(LDARGS),echo -n "$(ARG) " >> $$@.objs;) $$(LD) $(SHFLAGS) $(LDFLAGS) $(LDSOFLAGS) $$(LD_O) @$$@.objs $(FFEXTRALIBS) else $$(LD) $(SHFLAGS) $(LDFLAGS) $(LDSOFLAGS) $$(LD_O) $$(filter %.o,$$^) $(FFEXTRALIBS) -- 2.46.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 22+ messages in thread
* [FFmpeg-devel] [PATCH 2/2] configure: add option to select use of response files 2025-03-21 10:40 [FFmpeg-devel] [PATCH 1/2] ffbuild: compose linker response files in a loop Gyan Doshi @ 2025-03-21 10:40 ` Gyan Doshi 2025-03-25 11:51 ` Ramiro Polla 2025-03-21 21:59 ` [FFmpeg-devel] [PATCH 1/2] ffbuild: compose linker response files in a loop Martin Storsjö 1 sibling, 1 reply; 22+ messages in thread From: Gyan Doshi @ 2025-03-21 10:40 UTC (permalink / raw) To: ffmpeg-devel --- configure | 27 ++++++++++++++++++++------- ffbuild/library.mak | 4 ++-- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/configure b/configure index 14f7bcde0e..863b9adf22 100755 --- a/configure +++ b/configure @@ -427,6 +427,8 @@ Toolchain options: --enable-thumb compile for Thumb instruction set --enable-lto[=arg] use link-time optimization --env="ENV=override" override the environment variables + --response-files=ARG Pass list of objects to linker in a file to avoid command line length limits + Valid values are: yes, no, auto(default) Advanced options (experts only): --malloc-prefix=PREFIX prefix malloc and related names with PREFIX @@ -4142,6 +4144,7 @@ objformat="elf32" x86asmexe_default="nasm" windres_default="windres" striptype="direct" +ar_objs_default="auto" # OS target_os_default=$(tolower $(uname -s)) @@ -4438,6 +4441,10 @@ for opt do --enable-lto*) lto=-f${opt#--enable-} ;; + --response-files=*) + ar_objs=$optval + is_in $ar_objs "yes no auto" || die "Invalid value for response-files: $optval; Valid values are: yes, no, or auto" + ;; --enable-*=*|--disable-*=*) eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/') is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt" @@ -5187,7 +5194,7 @@ test -n "$cc_type" && enable $cc_type || : ${dep_cc_default:=$cc} : ${ld_default:=$cc} : ${host_ld_default:=$host_cc} -set_default ar as objcc dep_cc ld ln_s host_ld windres +set_default ar as objcc dep_cc ld ln_s host_ld windres ar_objs probe_cc as "$as" asflags_filter=$_flags_filter @@ -7753,12 +7760,18 @@ case $ld_type in ;; esac -{ -ar_out=${FFTMPDIR}/test$LIBSUF -respfile="@/dev/null" -out_arg="$(echo $ar_o | sed "s;\$@;$ar_out;g")" -test_cmd $ar $arflags $out_arg $respfile && ar_objs="true" || ar_objs="" -} +if [ "$ar_objs" != "no" ]; then + ar_out=${FFTMPDIR}/test$LIBSUF + respfile="@/dev/null" + out_arg="$(echo $ar_o | sed "s;\$@;$ar_out;g")" + if test_cmd $ar $arflags $out_arg $respfile; then + ar_objs="yes" + elif [ "$ar_objs" = "auto" ]; then + ar_objs="no" + else + die "Response files are not available with this toolchain. Exiting" + fi +fi enable frame_thread_encoder diff --git a/ffbuild/library.mak b/ffbuild/library.mak index 15302852ec..50a4cf74f2 100644 --- a/ffbuild/library.mak +++ b/ffbuild/library.mak @@ -35,7 +35,7 @@ OBJS += $(SHLIBOBJS) endif $(SUBDIR)$(LIBNAME): $(OBJS) $(STLIBOBJS) $(RM) $@ -ifeq ($(AR_OBJS),true) +ifeq ($(AR_OBJS),yes) -$(RM) $@.objs $(Q)$(foreach ARG,$^,echo -n "$(ARG) " >> $@.objs;) $(AR) $(ARFLAGS) $(AR_O) @$@.objs @@ -73,7 +73,7 @@ $(SUBDIR)$(SLIBNAME): $(SUBDIR)$(SLIBNAME_WITH_MAJOR) $(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS) $(SHLIBOBJS) $(SLIBOBJS) $(SUBDIR)lib$(NAME).ver $(SLIB_CREATE_DEF_CMD) -ifeq ($(AR_OBJS),true) +ifeq ($(AR_OBJS),yes) -$(RM) $$@.objs $(Q)$(eval LDARGS=$$(filter %.o,$$^)) $(Q)$(foreach ARG,$$(LDARGS),echo -n "$(ARG) " >> $$@.objs;) -- 2.46.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [FFmpeg-devel] [PATCH 2/2] configure: add option to select use of response files 2025-03-21 10:40 ` [FFmpeg-devel] [PATCH 2/2] configure: add option to select use of response files Gyan Doshi @ 2025-03-25 11:51 ` Ramiro Polla 2025-03-26 14:08 ` [FFmpeg-devel] [PATCH v2] " Gyan Doshi 0 siblings, 1 reply; 22+ messages in thread From: Ramiro Polla @ 2025-03-25 11:51 UTC (permalink / raw) To: FFmpeg development discussions and patches Hi, On Fri, Mar 21, 2025 at 11:42 AM Gyan Doshi <ffmpeg@gyani.pro> wrote: > > --- > configure | 27 ++++++++++++++++++++------- > ffbuild/library.mak | 4 ++-- > 2 files changed, 22 insertions(+), 9 deletions(-) > > diff --git a/configure b/configure > index 14f7bcde0e..863b9adf22 100755 > --- a/configure > +++ b/configure > @@ -427,6 +427,8 @@ Toolchain options: > --enable-thumb compile for Thumb instruction set > --enable-lto[=arg] use link-time optimization > --env="ENV=override" override the environment variables > + --response-files=ARG Pass list of objects to linker in a file to avoid command line length limits > + Valid values are: yes, no, auto(default) I think --disable-response-files with default [autodetect] would be more in line with the other options in configure. > Advanced options (experts only): > --malloc-prefix=PREFIX prefix malloc and related names with PREFIX > @@ -4142,6 +4144,7 @@ objformat="elf32" > x86asmexe_default="nasm" > windres_default="windres" > striptype="direct" > +ar_objs_default="auto" > > # OS > target_os_default=$(tolower $(uname -s)) > @@ -4438,6 +4441,10 @@ for opt do > --enable-lto*) > lto=-f${opt#--enable-} > ;; > + --response-files=*) > + ar_objs=$optval > + is_in $ar_objs "yes no auto" || die "Invalid value for response-files: $optval; Valid values are: yes, no, or auto" > + ;; > --enable-*=*|--disable-*=*) > eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/') > is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt" > @@ -5187,7 +5194,7 @@ test -n "$cc_type" && enable $cc_type || > : ${dep_cc_default:=$cc} > : ${ld_default:=$cc} > : ${host_ld_default:=$host_cc} > -set_default ar as objcc dep_cc ld ln_s host_ld windres > +set_default ar as objcc dep_cc ld ln_s host_ld windres ar_objs > > probe_cc as "$as" > asflags_filter=$_flags_filter > @@ -7753,12 +7760,18 @@ case $ld_type in > ;; > esac > > -{ > -ar_out=${FFTMPDIR}/test$LIBSUF > -respfile="@/dev/null" > -out_arg="$(echo $ar_o | sed "s;\$@;$ar_out;g")" > -test_cmd $ar $arflags $out_arg $respfile && ar_objs="true" || ar_objs="" > -} > +if [ "$ar_objs" != "no" ]; then > + ar_out=${FFTMPDIR}/test$LIBSUF > + respfile="@/dev/null" > + out_arg="$(echo $ar_o | sed "s;\$@;$ar_out;g")" > + if test_cmd $ar $arflags $out_arg $respfile; then > + ar_objs="yes" > + elif [ "$ar_objs" = "auto" ]; then > + ar_objs="no" > + else > + die "Response files are not available with this toolchain. Exiting" > + fi > +fi > > enable frame_thread_encoder > > diff --git a/ffbuild/library.mak b/ffbuild/library.mak > index 15302852ec..50a4cf74f2 100644 > --- a/ffbuild/library.mak > +++ b/ffbuild/library.mak > @@ -35,7 +35,7 @@ OBJS += $(SHLIBOBJS) > endif > $(SUBDIR)$(LIBNAME): $(OBJS) $(STLIBOBJS) > $(RM) $@ > -ifeq ($(AR_OBJS),true) > +ifeq ($(AR_OBJS),yes) > -$(RM) $@.objs > $(Q)$(foreach ARG,$^,echo -n "$(ARG) " >> $@.objs;) > $(AR) $(ARFLAGS) $(AR_O) @$@.objs > @@ -73,7 +73,7 @@ $(SUBDIR)$(SLIBNAME): $(SUBDIR)$(SLIBNAME_WITH_MAJOR) > > $(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS) $(SHLIBOBJS) $(SLIBOBJS) $(SUBDIR)lib$(NAME).ver > $(SLIB_CREATE_DEF_CMD) > -ifeq ($(AR_OBJS),true) > +ifeq ($(AR_OBJS),yes) > -$(RM) $$@.objs > $(Q)$(eval LDARGS=$$(filter %.o,$$^)) > $(Q)$(foreach ARG,$$(LDARGS),echo -n "$(ARG) " >> $$@.objs;) Could you rename AR_OBJS to something like RESPONSE_FILES? Ramiro _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 22+ messages in thread
* [FFmpeg-devel] [PATCH v2] configure: add option to select use of response files 2025-03-25 11:51 ` Ramiro Polla @ 2025-03-26 14:08 ` Gyan Doshi 2025-03-29 5:12 ` Gyan Doshi 0 siblings, 1 reply; 22+ messages in thread From: Gyan Doshi @ 2025-03-26 14:08 UTC (permalink / raw) To: ffmpeg-devel --- v2: *switched state and make var name to response_files *changed option to standard action-optname format configure | 25 +++++++++++++++++-------- ffbuild/library.mak | 4 ++-- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/configure b/configure index 2fdbe8cbbe..eef7826788 100755 --- a/configure +++ b/configure @@ -427,6 +427,7 @@ Toolchain options: --enable-thumb compile for Thumb instruction set --enable-lto[=arg] use link-time optimization --env="ENV=override" override the environment variables + --disable-response-files Don't pass the list of objects to linker in a file [autodetect] Advanced options (experts only): --malloc-prefix=PREFIX prefix malloc and related names with PREFIX @@ -2669,6 +2670,7 @@ CMDLINE_SELECT=" extra_warnings logging optimizations + response_files rpath stripping version_tracking @@ -4143,6 +4145,7 @@ objformat="elf32" x86asmexe_default="nasm" windres_default="windres" striptype="direct" +response_files_default="auto" # OS target_os_default=$(tolower $(uname -s)) @@ -5188,7 +5191,7 @@ test -n "$cc_type" && enable $cc_type || : ${dep_cc_default:=$cc} : ${ld_default:=$cc} : ${host_ld_default:=$host_cc} -set_default ar as objcc dep_cc ld ln_s host_ld windres +set_default ar as objcc dep_cc ld ln_s host_ld windres response_files probe_cc as "$as" asflags_filter=$_flags_filter @@ -7754,12 +7757,18 @@ case $ld_type in ;; esac -{ -ar_out=${FFTMPDIR}/test$LIBSUF -respfile="@/dev/null" -out_arg="$(echo $ar_o | sed "s;\$@;$ar_out;g")" -test_cmd $ar $arflags $out_arg $respfile && ar_objs="true" || ar_objs="" -} +if [ "$response_files" != "no" ]; then + ar_out=${FFTMPDIR}/test$LIBSUF + respfile="@/dev/null" + out_arg="$(echo $ar_o | sed "s;\$@;$ar_out;g")" + if test_cmd $ar $arflags $out_arg $respfile; then + response_files="yes" + elif [ "$response_files" = "auto" ]; then + response_files="no" + else + die "Response files are not available with this toolchain. Exiting" + fi +fi enable frame_thread_encoder @@ -8141,7 +8150,7 @@ DEPX86ASM=$x86asmexe DEPX86ASMFLAGS=\$(X86ASMFLAGS) AR=$ar ARFLAGS=$arflags -AR_OBJS=$ar_objs +RESPONSE_FILES=$response_files AR_O=$ar_o AR_CMD=$ar NM_CMD=$nm diff --git a/ffbuild/library.mak b/ffbuild/library.mak index 15302852ec..3f7d604086 100644 --- a/ffbuild/library.mak +++ b/ffbuild/library.mak @@ -35,7 +35,7 @@ OBJS += $(SHLIBOBJS) endif $(SUBDIR)$(LIBNAME): $(OBJS) $(STLIBOBJS) $(RM) $@ -ifeq ($(AR_OBJS),true) +ifeq ($(RESPONSE_FILES),yes) -$(RM) $@.objs $(Q)$(foreach ARG,$^,echo -n "$(ARG) " >> $@.objs;) $(AR) $(ARFLAGS) $(AR_O) @$@.objs @@ -73,7 +73,7 @@ $(SUBDIR)$(SLIBNAME): $(SUBDIR)$(SLIBNAME_WITH_MAJOR) $(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS) $(SHLIBOBJS) $(SLIBOBJS) $(SUBDIR)lib$(NAME).ver $(SLIB_CREATE_DEF_CMD) -ifeq ($(AR_OBJS),true) +ifeq ($(RESPONSE_FILES),yes) -$(RM) $$@.objs $(Q)$(eval LDARGS=$$(filter %.o,$$^)) $(Q)$(foreach ARG,$$(LDARGS),echo -n "$(ARG) " >> $$@.objs;) -- 2.46.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [FFmpeg-devel] [PATCH v2] configure: add option to select use of response files 2025-03-26 14:08 ` [FFmpeg-devel] [PATCH v2] " Gyan Doshi @ 2025-03-29 5:12 ` Gyan Doshi 2025-03-30 14:10 ` Gyan Doshi 0 siblings, 1 reply; 22+ messages in thread From: Gyan Doshi @ 2025-03-29 5:12 UTC (permalink / raw) To: ffmpeg-devel On 2025-03-26 07:38 pm, Gyan Doshi wrote: > --- > v2: > *switched state and make var name to response_files > *changed option to standard action-optname format Plan to push tomorrow. Regards, Gyan > > configure | 25 +++++++++++++++++-------- > ffbuild/library.mak | 4 ++-- > 2 files changed, 19 insertions(+), 10 deletions(-) > > diff --git a/configure b/configure > index 2fdbe8cbbe..eef7826788 100755 > --- a/configure > +++ b/configure > @@ -427,6 +427,7 @@ Toolchain options: > --enable-thumb compile for Thumb instruction set > --enable-lto[=arg] use link-time optimization > --env="ENV=override" override the environment variables > + --disable-response-files Don't pass the list of objects to linker in a file [autodetect] > > Advanced options (experts only): > --malloc-prefix=PREFIX prefix malloc and related names with PREFIX > @@ -2669,6 +2670,7 @@ CMDLINE_SELECT=" > extra_warnings > logging > optimizations > + response_files > rpath > stripping > version_tracking > @@ -4143,6 +4145,7 @@ objformat="elf32" > x86asmexe_default="nasm" > windres_default="windres" > striptype="direct" > +response_files_default="auto" > > # OS > target_os_default=$(tolower $(uname -s)) > @@ -5188,7 +5191,7 @@ test -n "$cc_type" && enable $cc_type || > : ${dep_cc_default:=$cc} > : ${ld_default:=$cc} > : ${host_ld_default:=$host_cc} > -set_default ar as objcc dep_cc ld ln_s host_ld windres > +set_default ar as objcc dep_cc ld ln_s host_ld windres response_files > > probe_cc as "$as" > asflags_filter=$_flags_filter > @@ -7754,12 +7757,18 @@ case $ld_type in > ;; > esac > > -{ > -ar_out=${FFTMPDIR}/test$LIBSUF > -respfile="@/dev/null" > -out_arg="$(echo $ar_o | sed "s;\$@;$ar_out;g")" > -test_cmd $ar $arflags $out_arg $respfile && ar_objs="true" || ar_objs="" > -} > +if [ "$response_files" != "no" ]; then > + ar_out=${FFTMPDIR}/test$LIBSUF > + respfile="@/dev/null" > + out_arg="$(echo $ar_o | sed "s;\$@;$ar_out;g")" > + if test_cmd $ar $arflags $out_arg $respfile; then > + response_files="yes" > + elif [ "$response_files" = "auto" ]; then > + response_files="no" > + else > + die "Response files are not available with this toolchain. Exiting" > + fi > +fi > > enable frame_thread_encoder > > @@ -8141,7 +8150,7 @@ DEPX86ASM=$x86asmexe > DEPX86ASMFLAGS=\$(X86ASMFLAGS) > AR=$ar > ARFLAGS=$arflags > -AR_OBJS=$ar_objs > +RESPONSE_FILES=$response_files > AR_O=$ar_o > AR_CMD=$ar > NM_CMD=$nm > diff --git a/ffbuild/library.mak b/ffbuild/library.mak > index 15302852ec..3f7d604086 100644 > --- a/ffbuild/library.mak > +++ b/ffbuild/library.mak > @@ -35,7 +35,7 @@ OBJS += $(SHLIBOBJS) > endif > $(SUBDIR)$(LIBNAME): $(OBJS) $(STLIBOBJS) > $(RM) $@ > -ifeq ($(AR_OBJS),true) > +ifeq ($(RESPONSE_FILES),yes) > -$(RM) $@.objs > $(Q)$(foreach ARG,$^,echo -n "$(ARG) " >> $@.objs;) > $(AR) $(ARFLAGS) $(AR_O) @$@.objs > @@ -73,7 +73,7 @@ $(SUBDIR)$(SLIBNAME): $(SUBDIR)$(SLIBNAME_WITH_MAJOR) > > $(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS) $(SHLIBOBJS) $(SLIBOBJS) $(SUBDIR)lib$(NAME).ver > $(SLIB_CREATE_DEF_CMD) > -ifeq ($(AR_OBJS),true) > +ifeq ($(RESPONSE_FILES),yes) > -$(RM) $$@.objs > $(Q)$(eval LDARGS=$$(filter %.o,$$^)) > $(Q)$(foreach ARG,$$(LDARGS),echo -n "$(ARG) " >> $$@.objs;) _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [FFmpeg-devel] [PATCH v2] configure: add option to select use of response files 2025-03-29 5:12 ` Gyan Doshi @ 2025-03-30 14:10 ` Gyan Doshi 0 siblings, 0 replies; 22+ messages in thread From: Gyan Doshi @ 2025-03-30 14:10 UTC (permalink / raw) To: ffmpeg-devel On 2025-03-29 10:42 am, Gyan Doshi wrote: > > > On 2025-03-26 07:38 pm, Gyan Doshi wrote: >> --- >> v2: >> *switched state and make var name to response_files >> *changed option to standard action-optname format > > Plan to push tomorrow. Pushed as 64087171f67bab220c4d3001eb6b074cf488284c Regards, Gyan _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/2] ffbuild: compose linker response files in a loop 2025-03-21 10:40 [FFmpeg-devel] [PATCH 1/2] ffbuild: compose linker response files in a loop Gyan Doshi 2025-03-21 10:40 ` [FFmpeg-devel] [PATCH 2/2] configure: add option to select use of response files Gyan Doshi @ 2025-03-21 21:59 ` Martin Storsjö 2025-03-22 4:33 ` Gyan Doshi 1 sibling, 1 reply; 22+ messages in thread From: Martin Storsjö @ 2025-03-21 21:59 UTC (permalink / raw) To: FFmpeg development discussions and patches On Fri, 21 Mar 2025, Gyan Doshi wrote: > Avoids echo failing due to the same ARG_MAX limit that prompted > response files to be used with the linker. I presume this is only a fix for a hypothetical issue, _if_ echo would be a native windows executable and not the msys2/cygwin one which bypasses the limit? > --- > ffbuild/library.mak | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/ffbuild/library.mak b/ffbuild/library.mak > index 7e1871b74c..15302852ec 100644 > --- a/ffbuild/library.mak > +++ b/ffbuild/library.mak > @@ -36,7 +36,8 @@ endif > $(SUBDIR)$(LIBNAME): $(OBJS) $(STLIBOBJS) > $(RM) $@ > ifeq ($(AR_OBJS),true) > - $(Q)echo $^ > $@.objs > + -$(RM) $@.objs > + $(Q)$(foreach ARG,$^,echo -n "$(ARG) " >> $@.objs;) Does this instance even work, it looks broken, like it is missing something? > $(AR) $(ARFLAGS) $(AR_O) @$@.objs > else > $(AR) $(ARFLAGS) $(AR_O) $^ > @@ -73,7 +74,9 @@ $(SUBDIR)$(SLIBNAME): $(SUBDIR)$(SLIBNAME_WITH_MAJOR) > $(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS) $(SHLIBOBJS) $(SLIBOBJS) $(SUBDIR)lib$(NAME).ver > $(SLIB_CREATE_DEF_CMD) > ifeq ($(AR_OBJS),true) > - $(Q)echo $$(filter %.o,$$^) > $$@.objs > + -$(RM) $$@.objs > + $(Q)$(eval LDARGS=$$(filter %.o,$$^)) > + $(Q)$(foreach ARG,$$(LDARGS),echo -n "$(ARG) " >> $$@.objs;) Wouldn't this be quite significantly slow on msys2, where process creation is much slower than on unix? I think it's not worth to make things that much slower (which I only guess here) to fix a hypothetical issue. // Martin _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/2] ffbuild: compose linker response files in a loop 2025-03-21 21:59 ` [FFmpeg-devel] [PATCH 1/2] ffbuild: compose linker response files in a loop Martin Storsjö @ 2025-03-22 4:33 ` Gyan Doshi 2025-03-25 11:41 ` Ramiro Polla 0 siblings, 1 reply; 22+ messages in thread From: Gyan Doshi @ 2025-03-22 4:33 UTC (permalink / raw) To: ffmpeg-devel On 2025-03-22 03:29 am, Martin Storsjö wrote: > On Fri, 21 Mar 2025, Gyan Doshi wrote: > >> Avoids echo failing due to the same ARG_MAX limit that prompted >> response files to be used with the linker. > > I presume this is only a fix for a hypothetical issue, _if_ echo would > be a native windows executable and not the msys2/cygwin one which > bypasses the limit? Yes, trying to address edge cases. > >> --- >> ffbuild/library.mak | 7 +++++-- >> 1 file changed, 5 insertions(+), 2 deletions(-) >> >> diff --git a/ffbuild/library.mak b/ffbuild/library.mak >> index 7e1871b74c..15302852ec 100644 >> --- a/ffbuild/library.mak >> +++ b/ffbuild/library.mak >> @@ -36,7 +36,8 @@ endif >> $(SUBDIR)$(LIBNAME): $(OBJS) $(STLIBOBJS) >> $(RM) $@ >> ifeq ($(AR_OBJS),true) >> - $(Q)echo $^ > $@.objs >> + -$(RM) $@.objs >> + $(Q)$(foreach ARG,$^,echo -n "$(ARG) " >> $@.objs;) > > Does this instance even work, it looks broken, like it is missing > something? Tested both static and shared building. All working with no noticeable speed difference although I didn't formally bench. Regards, Gyan > >> $(AR) $(ARFLAGS) $(AR_O) @$@.objs >> else >> $(AR) $(ARFLAGS) $(AR_O) $^ >> @@ -73,7 +74,9 @@ $(SUBDIR)$(SLIBNAME): $(SUBDIR)$(SLIBNAME_WITH_MAJOR) >> $(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS) $(SHLIBOBJS) $(SLIBOBJS) >> $(SUBDIR)lib$(NAME).ver >> $(SLIB_CREATE_DEF_CMD) >> ifeq ($(AR_OBJS),true) >> - $(Q)echo $$(filter %.o,$$^) > $$@.objs >> + -$(RM) $$@.objs >> + $(Q)$(eval LDARGS=$$(filter %.o,$$^)) >> + $(Q)$(foreach ARG,$$(LDARGS),echo -n "$(ARG) " >> $$@.objs;) > > Wouldn't this be quite significantly slow on msys2, where process > creation is much slower than on unix? I think it's not worth to make > things that much slower (which I only guess here) to fix a > hypothetical issue. > > // Martin > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/2] ffbuild: compose linker response files in a loop 2025-03-22 4:33 ` Gyan Doshi @ 2025-03-25 11:41 ` Ramiro Polla 2025-03-26 14:12 ` Gyan Doshi 0 siblings, 1 reply; 22+ messages in thread From: Ramiro Polla @ 2025-03-25 11:41 UTC (permalink / raw) To: FFmpeg development discussions and patches Hi, On Sat, Mar 22, 2025 at 5:33 AM Gyan Doshi <ffmpeg@gyani.pro> wrote: > On 2025-03-22 03:29 am, Martin Storsjö wrote: > > On Fri, 21 Mar 2025, Gyan Doshi wrote: > >> ffbuild/library.mak | 7 +++++-- > >> 1 file changed, 5 insertions(+), 2 deletions(-) > >> > >> diff --git a/ffbuild/library.mak b/ffbuild/library.mak > >> index 7e1871b74c..15302852ec 100644 > >> --- a/ffbuild/library.mak > >> +++ b/ffbuild/library.mak > >> @@ -36,7 +36,8 @@ endif > >> $(SUBDIR)$(LIBNAME): $(OBJS) $(STLIBOBJS) > >> $(RM) $@ > >> ifeq ($(AR_OBJS),true) > >> - $(Q)echo $^ > $@.objs > >> + -$(RM) $@.objs > >> + $(Q)$(foreach ARG,$^,echo -n "$(ARG) " >> $@.objs;) > > > > Does this instance even work, it looks broken, like it is missing > > something? > > Tested both static and shared building. All working with no noticeable > speed difference although I didn't formally bench. It's generally a good idea to check for and report the speed differences. Even if just for the sake of curiosity. > >> $(AR) $(ARFLAGS) $(AR_O) @$@.objs > >> else > >> $(AR) $(ARFLAGS) $(AR_O) $^ > >> @@ -73,7 +74,9 @@ $(SUBDIR)$(SLIBNAME): $(SUBDIR)$(SLIBNAME_WITH_MAJOR) > >> $(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS) $(SHLIBOBJS) $(SLIBOBJS) > >> $(SUBDIR)lib$(NAME).ver > >> $(SLIB_CREATE_DEF_CMD) > >> ifeq ($(AR_OBJS),true) > >> - $(Q)echo $$(filter %.o,$$^) > $$@.objs > >> + -$(RM) $$@.objs > >> + $(Q)$(eval LDARGS=$$(filter %.o,$$^)) > >> + $(Q)$(foreach ARG,$$(LDARGS),echo -n "$(ARG) " >> $$@.objs;) > > > > Wouldn't this be quite significantly slow on msys2, where process > > creation is much slower than on unix? I think it's not worth to make > > things that much slower (which I only guess here) to fix a > > hypothetical issue. GNU make suggests using its file function for that: https://www.gnu.org/software/make/manual/html_node/File-Function.html Ramiro _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/2] ffbuild: compose linker response files in a loop 2025-03-25 11:41 ` Ramiro Polla @ 2025-03-26 14:12 ` Gyan Doshi 2025-03-26 18:07 ` Andreas Rheinhardt 0 siblings, 1 reply; 22+ messages in thread From: Gyan Doshi @ 2025-03-26 14:12 UTC (permalink / raw) To: ffmpeg-devel On 2025-03-25 05:11 pm, Ramiro Polla wrote: > Hi, > > On Sat, Mar 22, 2025 at 5:33 AM Gyan Doshi <ffmpeg@gyani.pro> wrote: >> On 2025-03-22 03:29 am, Martin Storsjö wrote: >>> On Fri, 21 Mar 2025, Gyan Doshi wrote: >>>> ffbuild/library.mak | 7 +++++-- >>>> 1 file changed, 5 insertions(+), 2 deletions(-) >>>> >>>> diff --git a/ffbuild/library.mak b/ffbuild/library.mak >>>> index 7e1871b74c..15302852ec 100644 >>>> --- a/ffbuild/library.mak >>>> +++ b/ffbuild/library.mak >>>> @@ -36,7 +36,8 @@ endif >>>> $(SUBDIR)$(LIBNAME): $(OBJS) $(STLIBOBJS) >>>> $(RM) $@ >>>> ifeq ($(AR_OBJS),true) >>>> - $(Q)echo $^ > $@.objs >>>> + -$(RM) $@.objs >>>> + $(Q)$(foreach ARG,$^,echo -n "$(ARG) " >> $@.objs;) >>> Does this instance even work, it looks broken, like it is missing >>> something? >> Tested both static and shared building. All working with no noticeable >> speed difference although I didn't formally bench. > It's generally a good idea to check for and report the speed > differences. Even if just for the sake of curiosity. So, with this configure: --disable-doc --disable-w32threads --enable-pthreads --disable-autodetect --cc="ccache gcc" --enable-static --enable-shared --extra-ldflags="-static" --enable-gpl --enable-version3 I ran one priming run + 5 repeat runs of `time make -j4`. Before, real ranged from 2m10.188s to 2m12.154s After, real ranged from 2m12.486s to 2m13.405s I also ran one priming run + 5 repeat runs of `time make -j4 libavcodec/libavcodec.a libavcodec/avcodec.dll`. Before, real ranged from 1m34.232s to 1m42.721s After, real ranged from 1m32.360s to 1m39.484s Regards, Gyan _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/2] ffbuild: compose linker response files in a loop 2025-03-26 14:12 ` Gyan Doshi @ 2025-03-26 18:07 ` Andreas Rheinhardt 2025-03-27 4:33 ` Gyan Doshi 0 siblings, 1 reply; 22+ messages in thread From: Andreas Rheinhardt @ 2025-03-26 18:07 UTC (permalink / raw) To: ffmpeg-devel Gyan Doshi: > > > On 2025-03-25 05:11 pm, Ramiro Polla wrote: >> Hi, >> >> On Sat, Mar 22, 2025 at 5:33 AM Gyan Doshi <ffmpeg@gyani.pro> wrote: >>> On 2025-03-22 03:29 am, Martin Storsjö wrote: >>>> On Fri, 21 Mar 2025, Gyan Doshi wrote: >>>>> ffbuild/library.mak | 7 +++++-- >>>>> 1 file changed, 5 insertions(+), 2 deletions(-) >>>>> >>>>> diff --git a/ffbuild/library.mak b/ffbuild/library.mak >>>>> index 7e1871b74c..15302852ec 100644 >>>>> --- a/ffbuild/library.mak >>>>> +++ b/ffbuild/library.mak >>>>> @@ -36,7 +36,8 @@ endif >>>>> $(SUBDIR)$(LIBNAME): $(OBJS) $(STLIBOBJS) >>>>> $(RM) $@ >>>>> ifeq ($(AR_OBJS),true) >>>>> - $(Q)echo $^ > $@.objs >>>>> + -$(RM) $@.objs >>>>> + $(Q)$(foreach ARG,$^,echo -n "$(ARG) " >> $@.objs;) >>>> Does this instance even work, it looks broken, like it is missing >>>> something? >>> Tested both static and shared building. All working with no noticeable >>> speed difference although I didn't formally bench. >> It's generally a good idea to check for and report the speed >> differences. Even if just for the sake of curiosity. > > So, with this configure: > > --disable-doc --disable-w32threads --enable-pthreads --disable- > autodetect --cc="ccache gcc" --enable-static --enable-shared --extra- > ldflags="-static" --enable-gpl --enable-version3 > > I ran one priming run + 5 repeat runs of `time make -j4`. > > Before, real ranged from 2m10.188s to 2m12.154s > After, real ranged from 2m12.486s to 2m13.405s > > I also ran one priming run + 5 repeat runs of `time make -j4 > libavcodec/libavcodec.a libavcodec/avcodec.dll`. > > Before, real ranged from 1m34.232s to 1m42.721s > After, real ranged from 1m32.360s to 1m39.484s > I presume this command compiled the whole of FFmpeg/libavcodec, i.e. it did not just link, didn't it? - Andreas _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/2] ffbuild: compose linker response files in a loop 2025-03-26 18:07 ` Andreas Rheinhardt @ 2025-03-27 4:33 ` Gyan Doshi 2025-03-29 5:11 ` Gyan Doshi 0 siblings, 1 reply; 22+ messages in thread From: Gyan Doshi @ 2025-03-27 4:33 UTC (permalink / raw) To: ffmpeg-devel On 2025-03-26 11:37 pm, Andreas Rheinhardt wrote: > Gyan Doshi: >> >> On 2025-03-25 05:11 pm, Ramiro Polla wrote: >>> Hi, >>> >>> On Sat, Mar 22, 2025 at 5:33 AM Gyan Doshi <ffmpeg@gyani.pro> wrote: >>>> On 2025-03-22 03:29 am, Martin Storsjö wrote: >>>>> On Fri, 21 Mar 2025, Gyan Doshi wrote: >>>>>> ffbuild/library.mak | 7 +++++-- >>>>>> 1 file changed, 5 insertions(+), 2 deletions(-) >>>>>> >>>>>> diff --git a/ffbuild/library.mak b/ffbuild/library.mak >>>>>> index 7e1871b74c..15302852ec 100644 >>>>>> --- a/ffbuild/library.mak >>>>>> +++ b/ffbuild/library.mak >>>>>> @@ -36,7 +36,8 @@ endif >>>>>> $(SUBDIR)$(LIBNAME): $(OBJS) $(STLIBOBJS) >>>>>> $(RM) $@ >>>>>> ifeq ($(AR_OBJS),true) >>>>>> - $(Q)echo $^ > $@.objs >>>>>> + -$(RM) $@.objs >>>>>> + $(Q)$(foreach ARG,$^,echo -n "$(ARG) " >> $@.objs;) >>>>> Does this instance even work, it looks broken, like it is missing >>>>> something? >>>> Tested both static and shared building. All working with no noticeable >>>> speed difference although I didn't formally bench. >>> It's generally a good idea to check for and report the speed >>> differences. Even if just for the sake of curiosity. >> So, with this configure: >> >> --disable-doc --disable-w32threads --enable-pthreads --disable- >> autodetect --cc="ccache gcc" --enable-static --enable-shared --extra- >> ldflags="-static" --enable-gpl --enable-version3 >> >> I ran one priming run + 5 repeat runs of `time make -j4`. >> >> Before, real ranged from 2m10.188s to 2m12.154s >> After, real ranged from 2m12.486s to 2m13.405s >> >> I also ran one priming run + 5 repeat runs of `time make -j4 >> libavcodec/libavcodec.a libavcodec/avcodec.dll`. >> >> Before, real ranged from 1m34.232s to 1m42.721s >> After, real ranged from 1m32.360s to 1m39.484s >> > I presume this command compiled the whole of FFmpeg/libavcodec, i.e. it > did not just link, didn't it? Its deps, are *.o in lavu, lswr, lavc, but after the priming run, all the cc steps would be cache hits, so the bulk of the fresh executions are the linking steps. Regards, Gyan _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/2] ffbuild: compose linker response files in a loop 2025-03-27 4:33 ` Gyan Doshi @ 2025-03-29 5:11 ` Gyan Doshi 2025-03-29 12:21 ` Ramiro Polla 0 siblings, 1 reply; 22+ messages in thread From: Gyan Doshi @ 2025-03-29 5:11 UTC (permalink / raw) To: ffmpeg-devel On 2025-03-27 10:03 am, Gyan Doshi wrote: > > > On 2025-03-26 11:37 pm, Andreas Rheinhardt wrote: >> Gyan Doshi: >>> >>> On 2025-03-25 05:11 pm, Ramiro Polla wrote: >>>> Hi, >>>> >>>> On Sat, Mar 22, 2025 at 5:33 AM Gyan Doshi <ffmpeg@gyani.pro> wrote: >>>>> On 2025-03-22 03:29 am, Martin Storsjö wrote: >>>>>> On Fri, 21 Mar 2025, Gyan Doshi wrote: >>>>>>> ffbuild/library.mak | 7 +++++-- >>>>>>> 1 file changed, 5 insertions(+), 2 deletions(-) >>>>>>> >>>>>>> diff --git a/ffbuild/library.mak b/ffbuild/library.mak >>>>>>> index 7e1871b74c..15302852ec 100644 >>>>>>> --- a/ffbuild/library.mak >>>>>>> +++ b/ffbuild/library.mak >>>>>>> @@ -36,7 +36,8 @@ endif >>>>>>> $(SUBDIR)$(LIBNAME): $(OBJS) $(STLIBOBJS) >>>>>>> $(RM) $@ >>>>>>> ifeq ($(AR_OBJS),true) >>>>>>> - $(Q)echo $^ > $@.objs >>>>>>> + -$(RM) $@.objs >>>>>>> + $(Q)$(foreach ARG,$^,echo -n "$(ARG) " >> $@.objs;) >>>>>> Does this instance even work, it looks broken, like it is missing >>>>>> something? >>>>> Tested both static and shared building. All working with no >>>>> noticeable >>>>> speed difference although I didn't formally bench. >>>> It's generally a good idea to check for and report the speed >>>> differences. Even if just for the sake of curiosity. >>> So, with this configure: >>> >>> --disable-doc --disable-w32threads --enable-pthreads --disable- >>> autodetect --cc="ccache gcc" --enable-static --enable-shared --extra- >>> ldflags="-static" --enable-gpl --enable-version3 >>> >>> I ran one priming run + 5 repeat runs of `time make -j4`. >>> >>> Before, real ranged from 2m10.188s to 2m12.154s >>> After, real ranged from 2m12.486s to 2m13.405s >>> >>> I also ran one priming run + 5 repeat runs of `time make -j4 >>> libavcodec/libavcodec.a libavcodec/avcodec.dll`. >>> >>> Before, real ranged from 1m34.232s to 1m42.721s >>> After, real ranged from 1m32.360s to 1m39.484s >>> >> I presume this command compiled the whole of FFmpeg/libavcodec, i.e. it >> did not just link, didn't it? > > Its deps, are *.o in lavu, lswr, lavc, but after the priming run, all > the cc steps would be cache hits, > so the bulk of the fresh executions are the linking steps. Plan to push tomorrow. Regards, Gyan _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/2] ffbuild: compose linker response files in a loop 2025-03-29 5:11 ` Gyan Doshi @ 2025-03-29 12:21 ` Ramiro Polla 2025-03-29 14:25 ` Gyan Doshi 0 siblings, 1 reply; 22+ messages in thread From: Ramiro Polla @ 2025-03-29 12:21 UTC (permalink / raw) To: FFmpeg development discussions and patches Hi Gyan, On Sat, Mar 29, 2025 at 6:11 AM Gyan Doshi <ffmpeg@gyani.pro> wrote: > On 2025-03-27 10:03 am, Gyan Doshi wrote: > > On 2025-03-26 11:37 pm, Andreas Rheinhardt wrote: > >> Gyan Doshi: > >>> On 2025-03-25 05:11 pm, Ramiro Polla wrote: > >>>> On Sat, Mar 22, 2025 at 5:33 AM Gyan Doshi <ffmpeg@gyani.pro> wrote: > >>>>> On 2025-03-22 03:29 am, Martin Storsjö wrote: > >>>>>> On Fri, 21 Mar 2025, Gyan Doshi wrote: > >>>>>>> ffbuild/library.mak | 7 +++++-- > >>>>>>> 1 file changed, 5 insertions(+), 2 deletions(-) > >>>>>>> > >>>>>>> diff --git a/ffbuild/library.mak b/ffbuild/library.mak > >>>>>>> index 7e1871b74c..15302852ec 100644 > >>>>>>> --- a/ffbuild/library.mak > >>>>>>> +++ b/ffbuild/library.mak > >>>>>>> @@ -36,7 +36,8 @@ endif > >>>>>>> $(SUBDIR)$(LIBNAME): $(OBJS) $(STLIBOBJS) > >>>>>>> $(RM) $@ > >>>>>>> ifeq ($(AR_OBJS),true) > >>>>>>> - $(Q)echo $^ > $@.objs > >>>>>>> + -$(RM) $@.objs > >>>>>>> + $(Q)$(foreach ARG,$^,echo -n "$(ARG) " >> $@.objs;) > >>>>>> Does this instance even work, it looks broken, like it is missing > >>>>>> something? > >>>>> Tested both static and shared building. All working with no > >>>>> noticeable > >>>>> speed difference although I didn't formally bench. > >>>> It's generally a good idea to check for and report the speed > >>>> differences. Even if just for the sake of curiosity. > >>> So, with this configure: > >>> > >>> --disable-doc --disable-w32threads --enable-pthreads --disable- > >>> autodetect --cc="ccache gcc" --enable-static --enable-shared --extra- > >>> ldflags="-static" --enable-gpl --enable-version3 > >>> > >>> I ran one priming run + 5 repeat runs of `time make -j4`. > >>> > >>> Before, real ranged from 2m10.188s to 2m12.154s > >>> After, real ranged from 2m12.486s to 2m13.405s > >>> > >>> I also ran one priming run + 5 repeat runs of `time make -j4 > >>> libavcodec/libavcodec.a libavcodec/avcodec.dll`. > >>> > >>> Before, real ranged from 1m34.232s to 1m42.721s > >>> After, real ranged from 1m32.360s to 1m39.484s > >>> > >> I presume this command compiled the whole of FFmpeg/libavcodec, i.e. it > >> did not just link, didn't it? > > > > Its deps, are *.o in lavu, lswr, lavc, but after the priming run, all > > the cc steps would be cache hits, > > so the bulk of the fresh executions are the linking steps. > > Plan to push tomorrow. Did you not try to use GNU make's flie function? https://www.gnu.org/software/make/manual/html_node/File-Function.html Ramiro _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/2] ffbuild: compose linker response files in a loop 2025-03-29 12:21 ` Ramiro Polla @ 2025-03-29 14:25 ` Gyan Doshi 2025-03-29 18:22 ` Martin Storsjö 0 siblings, 1 reply; 22+ messages in thread From: Gyan Doshi @ 2025-03-29 14:25 UTC (permalink / raw) To: ffmpeg-devel On 2025-03-29 05:51 pm, Ramiro Polla wrote: > Hi Gyan, > > On Sat, Mar 29, 2025 at 6:11 AM Gyan Doshi <ffmpeg@gyani.pro> wrote: >> On 2025-03-27 10:03 am, Gyan Doshi wrote: >>> On 2025-03-26 11:37 pm, Andreas Rheinhardt wrote: >>>> Gyan Doshi: >>>>> On 2025-03-25 05:11 pm, Ramiro Polla wrote: >>>>>> On Sat, Mar 22, 2025 at 5:33 AM Gyan Doshi <ffmpeg@gyani.pro> wrote: >>>>>>> On 2025-03-22 03:29 am, Martin Storsjö wrote: >>>>>>>> On Fri, 21 Mar 2025, Gyan Doshi wrote: >>>>>>>>> ffbuild/library.mak | 7 +++++-- >>>>>>>>> 1 file changed, 5 insertions(+), 2 deletions(-) >>>>>>>>> >>>>>>>>> diff --git a/ffbuild/library.mak b/ffbuild/library.mak >>>>>>>>> index 7e1871b74c..15302852ec 100644 >>>>>>>>> --- a/ffbuild/library.mak >>>>>>>>> +++ b/ffbuild/library.mak >>>>>>>>> @@ -36,7 +36,8 @@ endif >>>>>>>>> $(SUBDIR)$(LIBNAME): $(OBJS) $(STLIBOBJS) >>>>>>>>> $(RM) $@ >>>>>>>>> ifeq ($(AR_OBJS),true) >>>>>>>>> - $(Q)echo $^ > $@.objs >>>>>>>>> + -$(RM) $@.objs >>>>>>>>> + $(Q)$(foreach ARG,$^,echo -n "$(ARG) " >> $@.objs;) >>>>>>>> Does this instance even work, it looks broken, like it is missing >>>>>>>> something? >>>>>>> Tested both static and shared building. All working with no >>>>>>> noticeable >>>>>>> speed difference although I didn't formally bench. >>>>>> It's generally a good idea to check for and report the speed >>>>>> differences. Even if just for the sake of curiosity. >>>>> So, with this configure: >>>>> >>>>> --disable-doc --disable-w32threads --enable-pthreads --disable- >>>>> autodetect --cc="ccache gcc" --enable-static --enable-shared --extra- >>>>> ldflags="-static" --enable-gpl --enable-version3 >>>>> >>>>> I ran one priming run + 5 repeat runs of `time make -j4`. >>>>> >>>>> Before, real ranged from 2m10.188s to 2m12.154s >>>>> After, real ranged from 2m12.486s to 2m13.405s >>>>> >>>>> I also ran one priming run + 5 repeat runs of `time make -j4 >>>>> libavcodec/libavcodec.a libavcodec/avcodec.dll`. >>>>> >>>>> Before, real ranged from 1m34.232s to 1m42.721s >>>>> After, real ranged from 1m32.360s to 1m39.484s >>>>> >>>> I presume this command compiled the whole of FFmpeg/libavcodec, i.e. it >>>> did not just link, didn't it? >>> Its deps, are *.o in lavu, lswr, lavc, but after the priming run, all >>> the cc steps would be cache hits, >>> so the bulk of the fresh executions are the linking steps. >> Plan to push tomorrow. > Did you not try to use GNU make's flie function? I just benched this and it ranges from 1m28.093s to 1m29.971s (5% faster) for the lavc targets. However, this was added in make 4.0. Are we supporting older make? Regards, Gyan _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/2] ffbuild: compose linker response files in a loop 2025-03-29 14:25 ` Gyan Doshi @ 2025-03-29 18:22 ` Martin Storsjö 2025-03-30 5:02 ` Gyan Doshi 0 siblings, 1 reply; 22+ messages in thread From: Martin Storsjö @ 2025-03-29 18:22 UTC (permalink / raw) To: FFmpeg development discussions and patches On Sat, 29 Mar 2025, Gyan Doshi wrote: >> Did you not try to use GNU make's flie function? > > I just benched this and it ranges from 1m28.093s to 1m29.971s (5% > faster) for the lavc targets. > However, this was added in make 4.0. Are we supporting older make? Yes, we generally do support older GNU make; macOS (even the latest versions) only ships with GNU make 3.81. Regarding measuring the runtime cost of this change; measuring the whole build time is quite uninteresting, the interesting bit is measuring the time to build e.g. an .a library on its own. So after a full build, I do "rm libavcodec/libavcodec.a; time make libavcodec/libavcodec.a". This change raises that time from ~3.5 seconds to ~3.8 seconds. However do note that this is on a quite slow system in itself; without the "rm", it takes make 2.3 seconds just to figure out that nothing needs to be done. So on that level, the change indeed is mostly tolerable. However - this is very quick as long as "echo" is a shell builtin. If "echo" turns out to be an external executable instead of the shell builtin (which we can simulate by calling "/usr/bin/echo" instead of "echo"), then this suddenly takes >16 seconds rather than the earlier <4 seconds. And that's quite a steep price to pay. As noted before, this is only a fix for a potential, hypothetical problem. The fix is inexpensive in the case of a builtin echo, where we don't need the fix anyway. For the case of an external echo, where we potentially could need the fix, the fix is quite expensive though. But even with the external /usr/bin/echo (on msys2), I still can produce a very long (>32k) .objs file with only one single invocation of /usr/bin/echo. So we don't actually have this problem even in that case. So given that there are multiple concerns about the performance about this, and the problem that it tries to fix is entirely hypothetical at the moment, I would suggest that we skip this fix for now. If someone actually manages to hit the problem in some setup and can tell us about it, we could reconsider of course. // Martin _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/2] ffbuild: compose linker response files in a loop 2025-03-29 18:22 ` Martin Storsjö @ 2025-03-30 5:02 ` Gyan Doshi 2025-03-30 5:09 ` Christopher Snowhill ` (2 more replies) 0 siblings, 3 replies; 22+ messages in thread From: Gyan Doshi @ 2025-03-30 5:02 UTC (permalink / raw) To: ffmpeg-devel On 2025-03-29 11:52 pm, Martin Storsjö wrote: > On Sat, 29 Mar 2025, Gyan Doshi wrote: > >>> Did you not try to use GNU make's flie function? >> >> I just benched this and it ranges from 1m28.093s to 1m29.971s (5% >> faster) for the lavc targets. >> However, this was added in make 4.0. Are we supporting older make? > > Yes, we generally do support older GNU make; macOS (even the latest > versions) only ships with GNU make 3.81. > > Regarding measuring the runtime cost of this change; measuring the > whole build time is quite uninteresting, the interesting bit is > measuring the time to build e.g. an .a library on its own. So after a > full build, I do "rm libavcodec/libavcodec.a; time make > libavcodec/libavcodec.a". This change raises that time from ~3.5 > seconds to ~3.8 seconds. However do note that this is on a quite slow > system in itself; without the "rm", it takes make 2.3 seconds just to > figure out that nothing needs to be done. > > So on that level, the change indeed is mostly tolerable. > > However - this is very quick as long as "echo" is a shell builtin. If > "echo" turns out to be an external executable instead of the shell > builtin (which we can simulate by calling "/usr/bin/echo" instead of > "echo"), then this suddenly takes >16 seconds rather than the earlier > <4 seconds. And that's quite a steep price to pay. > > As noted before, this is only a fix for a potential, hypothetical > problem. The fix is inexpensive in the case of a builtin echo, where > we don't need the fix anyway. For the case of an external echo, where > we potentially could need the fix, the fix is quite expensive though. > > But even with the external /usr/bin/echo (on msys2), I still can > produce a very long (>32k) .objs file with only one single invocation > of /usr/bin/echo. So we don't actually have this problem even in that > case. > > So given that there are multiple concerns about the performance about > this, and the problem that it tries to fix is entirely hypothetical at > the moment, I would suggest that we skip this fix for now. > > If someone actually manages to hit the problem in some setup and can > tell us about it, we could reconsider of course. Ok, I'll skip the piecewise patch. But I'll note that just the linking step in isolation is not the relevant benchmark here. Most users who are not doing active ffmpeg development are building the whole thing. That means thousands of .o files. followed by linking external and internal libs. So what they will see with an echo utility is closer to 3m30s vs 3m42s than 4s vs 16s, which is a minimal change for someone not iterating app development. Regards, Gyan _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/2] ffbuild: compose linker response files in a loop 2025-03-30 5:02 ` Gyan Doshi @ 2025-03-30 5:09 ` Christopher Snowhill 2025-03-30 6:27 ` Andreas Rheinhardt 2025-03-30 12:12 ` Ramiro Polla 2 siblings, 0 replies; 22+ messages in thread From: Christopher Snowhill @ 2025-03-30 5:09 UTC (permalink / raw) To: FFmpeg development discussions and patches; +Cc: ffmpeg-devel On Sat Mar 29, 2025 at 10:02 PM PDT, Gyan Doshi wrote: > > > On 2025-03-29 11:52 pm, Martin Storsjö wrote: >> On Sat, 29 Mar 2025, Gyan Doshi wrote: >> >>>> Did you not try to use GNU make's flie function? >>> >>> I just benched this and it ranges from 1m28.093s to 1m29.971s (5% >>> faster) for the lavc targets. >>> However, this was added in make 4.0. Are we supporting older make? >> >> Yes, we generally do support older GNU make; macOS (even the latest >> versions) only ships with GNU make 3.81. >> >> Regarding measuring the runtime cost of this change; measuring the >> whole build time is quite uninteresting, the interesting bit is >> measuring the time to build e.g. an .a library on its own. So after a >> full build, I do "rm libavcodec/libavcodec.a; time make >> libavcodec/libavcodec.a". This change raises that time from ~3.5 >> seconds to ~3.8 seconds. However do note that this is on a quite slow >> system in itself; without the "rm", it takes make 2.3 seconds just to >> figure out that nothing needs to be done. >> >> So on that level, the change indeed is mostly tolerable. >> >> However - this is very quick as long as "echo" is a shell builtin. If >> "echo" turns out to be an external executable instead of the shell >> builtin (which we can simulate by calling "/usr/bin/echo" instead of >> "echo"), then this suddenly takes >16 seconds rather than the earlier >> <4 seconds. And that's quite a steep price to pay. >> >> As noted before, this is only a fix for a potential, hypothetical >> problem. The fix is inexpensive in the case of a builtin echo, where >> we don't need the fix anyway. For the case of an external echo, where >> we potentially could need the fix, the fix is quite expensive though. >> >> But even with the external /usr/bin/echo (on msys2), I still can >> produce a very long (>32k) .objs file with only one single invocation >> of /usr/bin/echo. So we don't actually have this problem even in that >> case. >> >> So given that there are multiple concerns about the performance about >> this, and the problem that it tries to fix is entirely hypothetical at >> the moment, I would suggest that we skip this fix for now. >> >> If someone actually manages to hit the problem in some setup and can >> tell us about it, we could reconsider of course. > > Ok, I'll skip the piecewise patch. > > But I'll note that just the linking step in isolation is not the > relevant benchmark here. Most users who are not doing active ffmpeg > development are building the whole thing. That means thousands of .o > files. followed by linking external and internal libs. > So what they will see with an echo utility is closer to 3m30s vs 3m42s > than 4s vs 16s, which is a minimal change for someone not iterating app > development. I'm building on a Mac, so I'll either be using the Make supplied with Xcode, or I'll have to install a newer gmake with Homebrew. I'm also using overrides so the binaries will work on anything as old as 10.13. (or 11.0 for Apple Silicon) At least 10-15 seconds of each architecture's build process is running the configure script with no feedback whatsoever until it completes. > > Regards, > Gyan > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/2] ffbuild: compose linker response files in a loop 2025-03-30 5:02 ` Gyan Doshi 2025-03-30 5:09 ` Christopher Snowhill @ 2025-03-30 6:27 ` Andreas Rheinhardt 2025-03-30 6:53 ` Gyan Doshi 2025-03-30 12:12 ` Ramiro Polla 2 siblings, 1 reply; 22+ messages in thread From: Andreas Rheinhardt @ 2025-03-30 6:27 UTC (permalink / raw) To: ffmpeg-devel Gyan Doshi: > > > On 2025-03-29 11:52 pm, Martin Storsjö wrote: >> On Sat, 29 Mar 2025, Gyan Doshi wrote: >> >>>> Did you not try to use GNU make's flie function? >>> >>> I just benched this and it ranges from 1m28.093s to 1m29.971s (5% >>> faster) for the lavc targets. >>> However, this was added in make 4.0. Are we supporting older make? >> >> Yes, we generally do support older GNU make; macOS (even the latest >> versions) only ships with GNU make 3.81. >> >> Regarding measuring the runtime cost of this change; measuring the >> whole build time is quite uninteresting, the interesting bit is >> measuring the time to build e.g. an .a library on its own. So after a >> full build, I do "rm libavcodec/libavcodec.a; time make libavcodec/ >> libavcodec.a". This change raises that time from ~3.5 seconds to ~3.8 >> seconds. However do note that this is on a quite slow system in >> itself; without the "rm", it takes make 2.3 seconds just to figure out >> that nothing needs to be done. >> >> So on that level, the change indeed is mostly tolerable. >> >> However - this is very quick as long as "echo" is a shell builtin. If >> "echo" turns out to be an external executable instead of the shell >> builtin (which we can simulate by calling "/usr/bin/echo" instead of >> "echo"), then this suddenly takes >16 seconds rather than the earlier >> <4 seconds. And that's quite a steep price to pay. >> >> As noted before, this is only a fix for a potential, hypothetical >> problem. The fix is inexpensive in the case of a builtin echo, where >> we don't need the fix anyway. For the case of an external echo, where >> we potentially could need the fix, the fix is quite expensive though. >> >> But even with the external /usr/bin/echo (on msys2), I still can >> produce a very long (>32k) .objs file with only one single invocation >> of /usr/bin/echo. So we don't actually have this problem even in that >> case. >> >> So given that there are multiple concerns about the performance about >> this, and the problem that it tries to fix is entirely hypothetical at >> the moment, I would suggest that we skip this fix for now. >> >> If someone actually manages to hit the problem in some setup and can >> tell us about it, we could reconsider of course. > > Ok, I'll skip the piecewise patch. > > But I'll note that just the linking step in isolation is not the > relevant benchmark here. Most users who are not doing active ffmpeg > development are building the whole thing. That means thousands of .o > files. followed by linking external and internal libs. > So what they will see with an echo utility is closer to 3m30s vs 3m42s > than 4s vs 16s, which is a minimal change for someone not iterating app > development. Completely wrong: People doing active ffmpeg development matter a lot. The incremental build is the relevant benchmark. - Andreas _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/2] ffbuild: compose linker response files in a loop 2025-03-30 6:27 ` Andreas Rheinhardt @ 2025-03-30 6:53 ` Gyan Doshi 2025-03-30 12:18 ` Ramiro Polla 0 siblings, 1 reply; 22+ messages in thread From: Gyan Doshi @ 2025-03-30 6:53 UTC (permalink / raw) To: ffmpeg-devel On 2025-03-30 11:57 am, Andreas Rheinhardt wrote: > Gyan Doshi: >> >> On 2025-03-29 11:52 pm, Martin Storsjö wrote: >>> On Sat, 29 Mar 2025, Gyan Doshi wrote: >>> >>>>> Did you not try to use GNU make's flie function? >>>> I just benched this and it ranges from 1m28.093s to 1m29.971s (5% >>>> faster) for the lavc targets. >>>> However, this was added in make 4.0. Are we supporting older make? >>> Yes, we generally do support older GNU make; macOS (even the latest >>> versions) only ships with GNU make 3.81. >>> >>> Regarding measuring the runtime cost of this change; measuring the >>> whole build time is quite uninteresting, the interesting bit is >>> measuring the time to build e.g. an .a library on its own. So after a >>> full build, I do "rm libavcodec/libavcodec.a; time make libavcodec/ >>> libavcodec.a". This change raises that time from ~3.5 seconds to ~3.8 >>> seconds. However do note that this is on a quite slow system in >>> itself; without the "rm", it takes make 2.3 seconds just to figure out >>> that nothing needs to be done. >>> >>> So on that level, the change indeed is mostly tolerable. >>> >>> However - this is very quick as long as "echo" is a shell builtin. If >>> "echo" turns out to be an external executable instead of the shell >>> builtin (which we can simulate by calling "/usr/bin/echo" instead of >>> "echo"), then this suddenly takes >16 seconds rather than the earlier >>> <4 seconds. And that's quite a steep price to pay. >>> >>> As noted before, this is only a fix for a potential, hypothetical >>> problem. The fix is inexpensive in the case of a builtin echo, where >>> we don't need the fix anyway. For the case of an external echo, where >>> we potentially could need the fix, the fix is quite expensive though. >>> >>> But even with the external /usr/bin/echo (on msys2), I still can >>> produce a very long (>32k) .objs file with only one single invocation >>> of /usr/bin/echo. So we don't actually have this problem even in that >>> case. >>> >>> So given that there are multiple concerns about the performance about >>> this, and the problem that it tries to fix is entirely hypothetical at >>> the moment, I would suggest that we skip this fix for now. >>> >>> If someone actually manages to hit the problem in some setup and can >>> tell us about it, we could reconsider of course. >> Ok, I'll skip the piecewise patch. >> >> But I'll note that just the linking step in isolation is not the >> relevant benchmark here. Most users who are not doing active ffmpeg >> development are building the whole thing. That means thousands of .o >> files. followed by linking external and internal libs. >> So what they will see with an echo utility is closer to 3m30s vs 3m42s >> than 4s vs 16s, which is a minimal change for someone not iterating app >> development. > Completely wrong: People doing active ffmpeg development matter a lot. > The incremental build is the relevant benchmark. People doing active ffmpeg development i.e. those working on git master, should have modern shells with builtin echo or can opt to disable response files thus avoiding the issue altogether. The primary beneficiaries of response files are users of build scripts or binary providers like myself adding dozens of libraries. Regards, Gyan _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/2] ffbuild: compose linker response files in a loop 2025-03-30 6:53 ` Gyan Doshi @ 2025-03-30 12:18 ` Ramiro Polla 0 siblings, 0 replies; 22+ messages in thread From: Ramiro Polla @ 2025-03-30 12:18 UTC (permalink / raw) To: FFmpeg development discussions and patches On Sun, Mar 30, 2025 at 8:53 AM Gyan Doshi <ffmpeg@gyani.pro> wrote: > On 2025-03-30 11:57 am, Andreas Rheinhardt wrote: > > Gyan Doshi: > >> On 2025-03-29 11:52 pm, Martin Storsjö wrote: > >>> On Sat, 29 Mar 2025, Gyan Doshi wrote: > >>> > >>>>> Did you not try to use GNU make's flie function? > >>>> I just benched this and it ranges from 1m28.093s to 1m29.971s (5% > >>>> faster) for the lavc targets. > >>>> However, this was added in make 4.0. Are we supporting older make? > >>> Yes, we generally do support older GNU make; macOS (even the latest > >>> versions) only ships with GNU make 3.81. > >>> > >>> Regarding measuring the runtime cost of this change; measuring the > >>> whole build time is quite uninteresting, the interesting bit is > >>> measuring the time to build e.g. an .a library on its own. So after a > >>> full build, I do "rm libavcodec/libavcodec.a; time make libavcodec/ > >>> libavcodec.a". This change raises that time from ~3.5 seconds to ~3.8 > >>> seconds. However do note that this is on a quite slow system in > >>> itself; without the "rm", it takes make 2.3 seconds just to figure out > >>> that nothing needs to be done. > >>> > >>> So on that level, the change indeed is mostly tolerable. > >>> > >>> However - this is very quick as long as "echo" is a shell builtin. If > >>> "echo" turns out to be an external executable instead of the shell > >>> builtin (which we can simulate by calling "/usr/bin/echo" instead of > >>> "echo"), then this suddenly takes >16 seconds rather than the earlier > >>> <4 seconds. And that's quite a steep price to pay. > >>> > >>> As noted before, this is only a fix for a potential, hypothetical > >>> problem. The fix is inexpensive in the case of a builtin echo, where > >>> we don't need the fix anyway. For the case of an external echo, where > >>> we potentially could need the fix, the fix is quite expensive though. > >>> > >>> But even with the external /usr/bin/echo (on msys2), I still can > >>> produce a very long (>32k) .objs file with only one single invocation > >>> of /usr/bin/echo. So we don't actually have this problem even in that > >>> case. > >>> > >>> So given that there are multiple concerns about the performance about > >>> this, and the problem that it tries to fix is entirely hypothetical at > >>> the moment, I would suggest that we skip this fix for now. > >>> > >>> If someone actually manages to hit the problem in some setup and can > >>> tell us about it, we could reconsider of course. > >> Ok, I'll skip the piecewise patch. > >> > >> But I'll note that just the linking step in isolation is not the > >> relevant benchmark here. Most users who are not doing active ffmpeg > >> development are building the whole thing. That means thousands of .o > >> files. followed by linking external and internal libs. > >> So what they will see with an echo utility is closer to 3m30s vs 3m42s > >> than 4s vs 16s, which is a minimal change for someone not iterating app > >> development. > > Completely wrong: People doing active ffmpeg development matter a lot. > > The incremental build is the relevant benchmark. Agreed. > People doing active ffmpeg development i.e. those working on git master, > should have modern shells with builtin echo > or can opt to disable response files thus avoiding the issue altogether. > The primary beneficiaries of response files are > users of build scripts or binary providers like myself adding dozens of > libraries. Back when I used to do this on a daily basis, I found that it was easier and faster to install virtualbox, install a linux distro, and cross-compile to windows than it was to build everything natively. I haven't tried building with msvc but I would not be surprised if it was still easier and faster to cross-compile using wine. Ramiro _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/2] ffbuild: compose linker response files in a loop 2025-03-30 5:02 ` Gyan Doshi 2025-03-30 5:09 ` Christopher Snowhill 2025-03-30 6:27 ` Andreas Rheinhardt @ 2025-03-30 12:12 ` Ramiro Polla 2 siblings, 0 replies; 22+ messages in thread From: Ramiro Polla @ 2025-03-30 12:12 UTC (permalink / raw) To: FFmpeg development discussions and patches On Sun, Mar 30, 2025 at 7:02 AM Gyan Doshi <ffmpeg@gyani.pro> wrote: > On 2025-03-29 11:52 pm, Martin Storsjö wrote: > > On Sat, 29 Mar 2025, Gyan Doshi wrote: > > > >>> Did you not try to use GNU make's flie function? > >> > >> I just benched this and it ranges from 1m28.093s to 1m29.971s (5% > >> faster) for the lavc targets. > >> However, this was added in make 4.0. Are we supporting older make? > > > > Yes, we generally do support older GNU make; macOS (even the latest > > versions) only ships with GNU make 3.81. > > > > Regarding measuring the runtime cost of this change; measuring the > > whole build time is quite uninteresting, the interesting bit is > > measuring the time to build e.g. an .a library on its own. So after a > > full build, I do "rm libavcodec/libavcodec.a; time make > > libavcodec/libavcodec.a". This change raises that time from ~3.5 > > seconds to ~3.8 seconds. However do note that this is on a quite slow > > system in itself; without the "rm", it takes make 2.3 seconds just to > > figure out that nothing needs to be done. > > > > So on that level, the change indeed is mostly tolerable. > > > > However - this is very quick as long as "echo" is a shell builtin. If > > "echo" turns out to be an external executable instead of the shell > > builtin (which we can simulate by calling "/usr/bin/echo" instead of > > "echo"), then this suddenly takes >16 seconds rather than the earlier > > <4 seconds. And that's quite a steep price to pay. > > > > As noted before, this is only a fix for a potential, hypothetical > > problem. The fix is inexpensive in the case of a builtin echo, where > > we don't need the fix anyway. For the case of an external echo, where > > we potentially could need the fix, the fix is quite expensive though. > > > > But even with the external /usr/bin/echo (on msys2), I still can > > produce a very long (>32k) .objs file with only one single invocation > > of /usr/bin/echo. So we don't actually have this problem even in that > > case. > > > > So given that there are multiple concerns about the performance about > > this, and the problem that it tries to fix is entirely hypothetical at > > the moment, I would suggest that we skip this fix for now. > > > > If someone actually manages to hit the problem in some setup and can > > tell us about it, we could reconsider of course. This sounds reasonable. > Ok, I'll skip the piecewise patch. Ok, and thank you for digging deeper into the issue. Ramiro _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 22+ messages in thread
end of thread, other threads:[~2025-03-30 14:11 UTC | newest] Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2025-03-21 10:40 [FFmpeg-devel] [PATCH 1/2] ffbuild: compose linker response files in a loop Gyan Doshi 2025-03-21 10:40 ` [FFmpeg-devel] [PATCH 2/2] configure: add option to select use of response files Gyan Doshi 2025-03-25 11:51 ` Ramiro Polla 2025-03-26 14:08 ` [FFmpeg-devel] [PATCH v2] " Gyan Doshi 2025-03-29 5:12 ` Gyan Doshi 2025-03-30 14:10 ` Gyan Doshi 2025-03-21 21:59 ` [FFmpeg-devel] [PATCH 1/2] ffbuild: compose linker response files in a loop Martin Storsjö 2025-03-22 4:33 ` Gyan Doshi 2025-03-25 11:41 ` Ramiro Polla 2025-03-26 14:12 ` Gyan Doshi 2025-03-26 18:07 ` Andreas Rheinhardt 2025-03-27 4:33 ` Gyan Doshi 2025-03-29 5:11 ` Gyan Doshi 2025-03-29 12:21 ` Ramiro Polla 2025-03-29 14:25 ` Gyan Doshi 2025-03-29 18:22 ` Martin Storsjö 2025-03-30 5:02 ` Gyan Doshi 2025-03-30 5:09 ` Christopher Snowhill 2025-03-30 6:27 ` Andreas Rheinhardt 2025-03-30 6:53 ` Gyan Doshi 2025-03-30 12:18 ` Ramiro Polla 2025-03-30 12:12 ` Ramiro Polla
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git