[FFmpeg-devel] [PATCH v7 0/3] ffbuild/commonmak: Fix rebuild check with implicit rule chains
ffmpegagent
ffmpegagent at gmail.com
Mon Jun 23 20:27:05 EEST 2025
V2
==
* Fix MSVC build
(use the universal command pattern)
V3
==
* Skip dependency generation by clearing CC_DEPS instead
(as suggested by Ramiro - thanks!)
V4
==
* Always keep .ptx files (as suggested by Timo - thanks) Tested all
scenarios:
* .ptx.c and .ptx.gz still get deleted (as intermediates)
* repeated make shows "up-to-date"
* removing a .ptx file does not cause a rebuild (it's still an
intermediate, but an "intermediate to keep")
* but changing a .ptx does (in case of dev/debugging)
* changed .cu files always rebuild of course
V5
==
* First patch remains unchanged
* Added second patch to clean up and consolidate the rules around
compression
V6
==
* Rebased
* Confirmed that it also resolves MSVC-CLang compilation
(as reported by Kasper Michalow - thanks!)
V7
==
* As the log line about intermediate file deletion ("RM ....") didn't find
much love, this version uses the workaround via the .SECONDARY special
make target to prevent intermediate file deletion
.
softworkz (3):
fftools/resources: Fix double-build by disabling .d file generation
ffbuild/commonmak: Consolidate pattern rules for compression
fftools/resources: Update .gitignore
ffbuild/common.mak | 49 ++++++++++++++----------------------
fftools/Makefile | 1 +
fftools/resources/.gitignore | 5 ++--
fftools/resources/Makefile | 12 ++++++---
4 files changed, 31 insertions(+), 36 deletions(-)
base-commit: e6298e0759430f64e9bd9298775de92597be8a50
Published-As: https://github.com/ffstaging/FFmpeg/releases/tag/pr-ffstaging-80%2Fsoftworkz%2Fsubmit_commonmak-v7
Fetch-It-Via: git fetch https://github.com/ffstaging/FFmpeg pr-ffstaging-80/softworkz/submit_commonmak-v7
Pull-Request: https://github.com/ffstaging/FFmpeg/pull/80
Range-diff vs v6:
1: a8da0e9d17 ! 1: 391217966f ffbuild/commonmak: Fix rebuild check with implicit rule chains
@@ Metadata
Author: softworkz <softworkz at hotmail.com>
## Commit message ##
- ffbuild/commonmak: Fix rebuild check with implicit rule chains
-
- When there's a chain of implicit rules, make treats files generated
- inside that chain as intermediate files. Those intermediate files are
- removed after completion of make. When make is run again, it normally
- determines the need for a rebuild by comparing the timestamps of the
- original source file and the final output of the chain and if still
- up-to-date, it doesn't rebuild, even when the intermediate files are
- not present. That makes sense of course - why would it delete them
- otherwise, it would end up in builds being never up-to-date.
- But this original by-the-book logic appeared to be broken and has been
- worked around by adding all intermediate files to the .SECONDARY
- special target, which required extra logic and issues with make clean.
-
- What broke the up-to-date checking is the dependency file generation.
- For the .c files generated by BIN2C the compile target created a .d
- file which indicated that the .ptx.o file has a dependency on the
- ptx.c file. And that dependency broke the normal make behavior with
- intermediate files.
-
- This patch compiles the BIN2C generated .c files without generating
- .d files. In turn the files do not longer need to be added to the
- .SECONDARY target in common.mak.
-
- When interested in those files for debugging, a line can be added to
- the corresponding Makefile like
-
- .SECONDARY: %.ptx.c %.ptx.gz
+ fftools/resources: Fix double-build by disabling .d file generation
Signed-off-by: softworkz <softworkz at hotmail.com>
## ffbuild/common.mak ##
-@@ ffbuild/common.mak: else
- $(BIN2C) $(patsubst $(SRC_PATH)/%,$(SRC_LINK)/%,$<) $@ $(subst .,_,$(basename $(notdir $@)))
- endif
-
-+%.ptx.o: CCDEP =
-+%.ptx.o: CC_DEPFLAGS =
-+
-+
- # 1) Preprocess CSS to a minified version
- %.css.min: TAG = SED
- %.css.min: %.css
-@@ ffbuild/common.mak: else # NO COMPRESSION
- $(BIN2C) $< $@ $(subst .,_,$(basename $(notdir $@)))
- endif
-
-+%.html.o %.css.o: CCDEP =
-+%.html.o %.css.o: CC_DEPFLAGS =
-+
-+
- clean::
- $(RM) $(BIN2CEXE) $(CLEANSUFFIXES:%=ffbuild/%)
-
@@ ffbuild/common.mak: SKIPHEADERS += $(ARCH_HEADERS:%=$(ARCH)/%) $(SKIPHEADERS-)
SKIPHEADERS := $(SKIPHEADERS:%=$(SUBDIR)%)
HOBJS = $(filter-out $(SKIPHEADERS:.h=.h.o),$(ALLHEADERS:.h=.h.o))
@@ ffbuild/common.mak: SKIPHEADERS += $(ARCH_HEADERS:%=$(ARCH)/%) $(SKIPHEADERS-)
$(HOBJS): CCFLAGS += $(CFLAGS_HEADERS)
checkheaders: $(HOBJS)
-.SECONDARY: $(HOBJS:.o=.c) $(PTXOBJS:.o=.c) $(PTXOBJS:.o=.gz) $(PTXOBJS:.o=) $(RESOURCEOBJS:.o=.c) $(RESOURCEOBJS:%.css.o=%.css.min) $(RESOURCEOBJS:%.css.o=%.css.min.gz) $(RESOURCEOBJS:%.html.o=%.html.gz) $(RESOURCEOBJS:.o=)
-+.SECONDARY: $(HOBJS:.o=.c) $(PTXOBJS:.o=)
-
+-
++.SECONDARY: $(HOBJS:.o=.c) $(PTXOBJS:.o=.c) $(PTXOBJS:.o=.gz) $(PTXOBJS:.o=)
alltools: $(TOOLS)
+ $(HOSTOBJS): %.o: %.c
+@@ ffbuild/common.mak: $(TOOLOBJS): | tools
+
+ OUTDIRS := $(OUTDIRS) $(dir $(OBJS) $(HOBJS) $(HOSTOBJS) $(SHLIBOBJS) $(STLIBOBJS) $(TESTOBJS))
+
+-CLEANSUFFIXES = *.d *.gcda *.gcno *.h.c *.ho *.map *.o *.objs *.pc *.ptx *.ptx.gz *.ptx.c *.ver *.version *.html.gz *.html.c *.css.gz *.css.c *$(DEFAULT_X86ASMD).asm *~ *.ilk *.pdb
++CLEANSUFFIXES = *.d *.gcda *.gcno *.h.c *.ho *.map *.o *.objs *.pc *.ptx *.ptx.gz *.ptx.c *.ver *.version *.html.gz *.html.c *.css.min.gz *.css.min *.css.c *$(DEFAULT_X86ASMD).asm *~ *.ilk *.pdb
+ LIBSUFFIXES = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a
+
+ define RULES
+
+ ## fftools/Makefile ##
+@@ fftools/Makefile: OBJS-ffmpeg += \
+ fftools/textformat/tw_buffer.o \
+ fftools/textformat/tw_stdout.o \
+ $(OBJS-resman) \
++ $(RESOBJS) \
+
+ OBJS-ffprobe += \
+ fftools/textformat/avtextformat.o \
+
+ ## fftools/resources/Makefile ##
+@@ fftools/resources/Makefile: clean::
+ vpath %.html $(SRC_PATH)
+ vpath %.css $(SRC_PATH)
+
+-# Uncomment to prevent deletion during build
+-#.PRECIOUS: %.css.c %.css.min %.css.gz %.css.min.gz %.html.gz %.html.c
+-
+ OBJS-resman += \
+ fftools/resources/resman.o \
++
++
++RESOBJS += \
+ fftools/resources/graph.html.o \
+ fftools/resources/graph.css.o \
++
++
++$(RESOBJS): CCDEP =
++$(RESOBJS): CC_DEPFLAGS =
++
++.SECONDARY: $(RESOBJS:.o=.gz) $(RESOBJS:.o=.c) $(RESOBJS:%.css.o=%.css.min) $(RESOBJS:%.css.o=%.css.min.gz) $(RESOBJS:%.html.o=%.html.gz) $(RESOBJS:.o=)
2: 1781c5fc16 ! 2: 17b0af91ec ffbuild/commonmak: Consolidate pattern rules for compression
@@ ffbuild/common.mak: $(BIN2CEXE): ffbuild/bin2c_host.o
+ $(RUN_BIN2C)
endif
- %.ptx.o: CCDEP =
- %.ptx.o: CC_DEPFLAGS =
-
-
-# 1) Preprocess CSS to a minified version
-%.css.min: TAG = SED
%.css.min: %.css
@@ ffbuild/common.mak: $(BIN2CEXE): ffbuild/bin2c_host.o
+ $(RUN_BIN2C)
endif
- %.html.o %.css.o: CCDEP =
+ clean::
-: ---------- > 3: dde90b288f fftools/resources: Update .gitignore
--
ffmpeg-codebot
More information about the ffmpeg-devel
mailing list