mirror of
https://github.com/logicog/RTLPlayground.git
synced 2026-10-29 17:54:14 +08:00
build: rebuild objects when the compiler flags change
The .d files track headers, so adding or removing a flag on a tree that was already built leaves every object that did not change for some other reason compiled with the old flags, and the image ends up a mix of the two. How that shows depends on the flag. DIAG=1 fails the link on undefined symbols, which at least stops the build. An opt-in whose hooks expand to empty macros loses the calls instead, so the link succeeds and the feature quietly measures nothing. Objects now depend on a stamp holding CC_FLAGS, rewritten only when the flags differ, so an unchanged flag set still does not force a rebuild.
This commit is contained in:
1 parent
fa93340c24
commit
689751ffe6
1 file changed
+12
-2
@@ -130,10 +130,20 @@ distclean: $(SUBDIRSCLEAN)
|
|||||||
$(SUBDIRSCLEAN):
|
$(SUBDIRSCLEAN):
|
||||||
$(MAKE) -C $(@:clean=) clean
|
$(MAKE) -C $(@:clean=) clean
|
||||||
|
|
||||||
$(BUILDDIR)/%.rel: %.c | create_build_dir html_data.h
|
# Objects depend on the flags they were built with, through a stamp file that
|
||||||
|
# is rewritten only when CC_FLAGS actually changes.
|
||||||
|
CCFLAGS_STAMP := $(BUILDDIR)/.ccflags
|
||||||
|
|
||||||
|
.PHONY: FORCE
|
||||||
|
FORCE:
|
||||||
|
|
||||||
|
$(CCFLAGS_STAMP): FORCE | create_build_dir
|
||||||
|
@echo '$(CC_FLAGS)' | cmp -s - $@ 2>/dev/null || echo '$(CC_FLAGS)' > $@
|
||||||
|
|
||||||
|
$(BUILDDIR)/%.rel: %.c $(CCFLAGS_STAMP) | create_build_dir html_data.h
|
||||||
$(CC) -MMD $(CC_FLAGS) -o $@ -c $<
|
$(CC) -MMD $(CC_FLAGS) -o $@ -c $<
|
||||||
|
|
||||||
$(BUILDDIR)/%.rel: %.asm | create_build_dir
|
$(BUILDDIR)/%.rel: %.asm $(CCFLAGS_STAMP) | create_build_dir
|
||||||
${ASM} ${AFLAGS} -o $@ $<
|
${ASM} ${AFLAGS} -o $@ $<
|
||||||
# mv -f $(addprefix $(basename $^), .lst .rel .sym) .
|
# mv -f $(addprefix $(basename $^), .lst .rel .sym) .
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user