kbuild: add .SECONDARY special target to scripts/Kbuild.include
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Fri, 11 Jan 2019 10:42:27 +0000 (19:42 +0900)
committerTom Rini <trini@konsulko.com>
Tue, 15 Jan 2019 20:28:53 +0000 (15:28 -0500)
Based on the following Linux commits:

 - 54a702f70589 ("kbuild: mark $(targets) as .SECONDARY and remove
   .PRECIOUS markers")

 - 8e9b61b293d9 ("kbuild: move .SECONDARY special target to
   Kbuild.include")

GNU Make automatically deletes intermediate files that are updated
in a chain of pattern rules.

Example 1) %.dtb.o <- %.dtb.S <- %.dtb <- %.dts
Example 2) %.o <- %.c <- %.c_shipped

A couple of makefiles mark such targets as .PRECIOUS to prevent Make
from deleting them, but the correct way is to use .SECONDARY.

  .SECONDARY
    Prerequisites of this special target are treated as intermediate
    files but are never automatically deleted.

  .PRECIOUS
    When make is interrupted during execution, it may delete the target
    file it is updating if the file was modified since make started.
    If you mark the file as precious, make will never delete the file
    if interrupted.

Both can avoid deletion of intermediate files, but the difference is
the behavior when Make is interrupted; .SECONDARY deletes the target,
but .PRECIOUS does not.

The use of .PRECIOUS is relatively rare since we do not want to keep
partially constructed (possibly corrupted) targets.

.SECONDARY with no prerequisites causes all targets to be treated as
secondary. This agrees the policy of Kbuild.

scripts/Kbuild.include seems a suitable place to add it because it is
included from almost all sub-makes.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
dts/Makefile
examples/standalone/Makefile
post/lib_powerpc/fpu/Makefile
scripts/Kbuild.include
scripts/Makefile.build
scripts/Makefile.lib

index cd6e9a968eec8c14c521d268c0023635298bdf53..a7a604303cc63ae836b8c4c16635514c24e6c3ef 100644 (file)
@@ -43,9 +43,6 @@ endif
 arch-dtbs:
        $(Q)$(MAKE) $(build)=$(ARCH_PATH) dtbs
 
-.SECONDARY: $(obj)/dt.dtb.S $(obj)/dt-spl.dtb.S
-
-
 ifeq ($(CONFIG_SPL_BUILD),y)
 obj-$(CONFIG_OF_EMBED) := dt-spl.dtb.o
 # support "out-of-tree" build for dtb-spl
index f01816f24f4a3851f1c9e1eada5a1fe42b75e430..0b17a91804cf7fdd0f0e3f4e9361295d463bfdc7 100644 (file)
@@ -26,7 +26,6 @@ LIB   = $(obj)/libstubs.o
 LIBOBJS-$(CONFIG_PPC) += ppc_longjmp.o ppc_setjmp.o
 LIBOBJS-y += stubs.o
 
-.SECONDARY: $(call objectify,$(COBJS))
 targets += $(patsubst $(obj)/%,%,$(LIB)) $(COBJS) $(LIBOBJS-y)
 
 LIBOBJS        := $(addprefix $(obj)/,$(LIBOBJS-y))
index 404eefcfd0f4bd2e9c23214d29b877ddd5b64a2b..9b2c1fadb654efa2519f17c2bd0b6c862dfc3100 100644 (file)
@@ -11,9 +11,6 @@ targets += $(objs-before-objcopy)
 $(foreach m, $(objs-before-objcopy), $(eval CFLAGS_REMOVE_$m := -msoft-float))
 ccflags-y := -mhard-float -fkeep-inline-functions
 
-# Do not delete intermidiate files (*.o)
-.SECONDARY: $(call objectify, $(objs-before-objcopy))
-
 obj-y := $(objs-before-objcopy:.o=_.o)
 
 OBJCOPYFLAGS := -R .gnu.attributes
index 460acd61f9ef02796afff61f9168949123adfb06..b8969e2a75e61f1d1a62ed34aa2ad956aa9ca46e 100644 (file)
@@ -318,6 +318,9 @@ endif
 # delete partially updated (i.e. corrupted) files on error
 .DELETE_ON_ERROR:
 
+# do not delete intermediate files automatically
+.SECONDARY:
+
 ifdef CONFIG_SPL_BUILD
 SPL_ := SPL_
 ifeq ($(CONFIG_TPL_BUILD),y)
index 482ed0c8d80482c8bbf81e7a46adbfd2c96c9e9a..f7a041296d3d9972d3a9a933c1dd0267f4b3aa9c 100644 (file)
@@ -331,8 +331,6 @@ quiet_cmd_asn1_compiler = ASN.1   $@
       cmd_asn1_compiler = $(objtree)/scripts/asn1_compiler $< \
                                $(subst .h,.c,$@) $(subst .c,.h,$@)
 
-.PRECIOUS: $(objtree)/$(obj)/%-asn1.c $(objtree)/$(obj)/%-asn1.h
-
 $(obj)/%-asn1.c $(obj)/%-asn1.h: $(src)/%.asn1 $(objtree)/scripts/asn1_compiler
        $(call cmd,asn1_compiler)
 
index a4f16bb4bb5bb744cf323533140d982315220f3f..a5b57fc6b98a7c16116fd89d4bde9f32de7b3a29 100644 (file)
@@ -214,7 +214,6 @@ endef
 quiet_cmd_flex = LEX     $@
       cmd_flex = $(LEX) -o$@ -L $<
 
-.PRECIOUS: $(obj)/%.lex.c
 $(obj)/%.lex.c: $(src)/%.l FORCE
        $(call if_changed,flex)
 
@@ -223,14 +222,12 @@ $(obj)/%.lex.c: $(src)/%.l FORCE
 quiet_cmd_bison = YACC    $@
       cmd_bison = $(YACC) -o$@ -t -l $<
 
-.PRECIOUS: $(obj)/%.tab.c
 $(obj)/%.tab.c: $(src)/%.y FORCE
        $(call if_changed,bison)
 
 quiet_cmd_bison_h = YACC    $@
       cmd_bison_h = $(YACC) -o/dev/null --defines=$@ -t -l $<
 
-.PRECIOUS: $(obj)/%.tab.h
 $(obj)/%.tab.h: $(src)/%.y FORCE
        $(call if_changed,bison_h)