From: ffmpegagent <ffmpegagent-at-gmail.com@ffmpeg.org> To: ffmpeg-devel@ffmpeg.org Cc: softworkz <softworkz@hotmail.com> Subject: [FFmpeg-devel] [PATCH v7 0/3] ffbuild/commonmak: Fix rebuild check with implicit rule chains Date: Mon, 23 Jun 2025 17:27:05 +0000 Message-ID: <pull.80.v7.ffstaging.FFmpeg.1750699628.ffmpegagent@gmail.com> (raw) 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@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@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 _______________________________________________ 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".
next reply other threads:[~2025-06-23 17:27 UTC|newest] Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top 2025-06-23 17:27 ffmpegagent [this message] 2025-06-23 17:27 ` [FFmpeg-devel] [PATCH v7 1/3] fftools/resources: Fix double-build by disabling .d file generation softworkz 2025-06-23 17:27 ` [FFmpeg-devel] [PATCH v7 2/3] ffbuild/commonmak: Consolidate pattern rules for compression softworkz 2025-06-23 17:27 ` [FFmpeg-devel] [PATCH v7 3/3] fftools/resources: Update .gitignore softworkz
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=pull.80.v7.ffstaging.FFmpeg.1750699628.ffmpegagent@gmail.com \ --to=ffmpegagent-at-gmail.com@ffmpeg.org \ --cc=ffmpeg-devel@ffmpeg.org \ --cc=softworkz@hotmail.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
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