Received: by 10.213.65.68 with SMTP id h4csp839511imn; Fri, 23 Mar 2018 18:27:33 -0700 (PDT) X-Google-Smtp-Source: AG47ELtTTsza0x7QeI8LnG+p1r6ZpkTGemUbLvPXas8y2lrRsithIznk3sTW907OZUUV/3kMWgZ2 X-Received: by 10.99.179.3 with SMTP id i3mr18695082pgf.434.1521854853114; Fri, 23 Mar 2018 18:27:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521854853; cv=none; d=google.com; s=arc-20160816; b=iytKbm1UHKmjoC9/yM+ZW0yTrXGe7m5c3PaTI6gqb8ZCLCzl761W0oTkTf9QkH0lNH J1B/9P2RsHX6Y9jpFwsbfeXAcwwkPLQhGRnIlr+k4ybLqyYbZlG8iuWoYbI2k+FawMsT 2qhLFKl5tO2X9bQJ/36hJ/LicxPMjOpgueecPmQvt3auVk5KQPUSIkI5erAXi1MkEoCQ 05f201E4WqHOJpZwK+6zDZiQpXbk3ytYCh2SjuAoWG9lznDzCWUhwHOyZI7amaZByMoN +uPzmDJzGb/3B3sapw4W0Cw0mBgQvl7OQqk06doxwm8gwVbQlcb2AM94+dmTiImgEtHN SGgQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dkim-signature :arc-authentication-results; bh=MOZlmkkCZlnQCAUSMgKeUHJkJKb5KFjcUf1GUC8KwR4=; b=d1pv7N6iRCuCvzrodgh6jBxHgl6H4h34jylgFGdoz0AJQnC47rVhL+YzSpeStCd6Hg 3iqdy/3DT2E0bpS/j098Jv2uyVeZS5eRsWnh0TfkI1U9ahHV+/hmCKqN8xQ7kklNYKoC aJMfCTA6v6+itygASbwUS2xh+05FGoJyKe/njUVTwYKDFMqfx+mtv5NGEB+TGTP3Lv2g M+LoJtxoJxLCbv2WlHkid3dmwErDE43SkEpes7XaJASGweF7+b6tpekCoJaBq69ZZGs+ wYZmXiZkKjsVRjJrI79f4l2vIjA1kMq/KseVlxPUvvO+oDjQbxQFP17wphXmTKoiX4v/ 5XCw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=kkAYqRFp; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a4si6725304pgt.259.2018.03.23.18.27.18; Fri, 23 Mar 2018 18:27:33 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=kkAYqRFp; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751905AbeCXB00 (ORCPT + 99 others); Fri, 23 Mar 2018 21:26:26 -0400 Received: from mail-pl0-f66.google.com ([209.85.160.66]:41522 "EHLO mail-pl0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751677AbeCXB0Y (ORCPT ); Fri, 23 Mar 2018 21:26:24 -0400 Received: by mail-pl0-f66.google.com with SMTP id b7-v6so8470121plr.8; Fri, 23 Mar 2018 18:26:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=MOZlmkkCZlnQCAUSMgKeUHJkJKb5KFjcUf1GUC8KwR4=; b=kkAYqRFpKBPlulLqtInHNPNZ7caNWoAJvUmme5RBl4xN2+Dak3rR3w3Nge1TnT6mDS FSGkb8cTZaldP5xC8nQnhX6QLACpR/0lYYbkSALnbsSDrLqzvZz8Vq055+OziL0F8ZKQ du9qansuv2kmAxJQyuk54QO2Bm3NJNKI41hro3g+NPk2rU5I1md9L99nAVR/OPsRJnuK 5s5uo+z/MuiwNeok+Uo8TCnk0qNUMR1bx6BOOLkYQAGN5t9e1sY4dFfN5z1r+Ag+MMv7 8gLy4QYIJzGpMF25LgbKUfM7dLVg0S91MuR7cd2bow85+UgH3Z3qpx9zjuNbD+3M3kNz vTFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=MOZlmkkCZlnQCAUSMgKeUHJkJKb5KFjcUf1GUC8KwR4=; b=IjEpCqCgtPW8nhIyrY1DgfJIrOTsAQcPcAqDyZsj2SWKK4u0U7clcfgJEPn0IG1ZBd Za9yCPIIPtFNm5M+Uq+jUCwHgXbSc+U3C6tvXOlCL+x+YBBPbdUNvOAiq1V+XkIT5Bfk qOayLq7LcZz4ozXkNZIT37k+GZxhlJ2ry81xqHczMo2wuLZL+USYPOjictO6LAcDGNpA UqyUOSPQzS1zNT3GPcb7FCusomUae98h9LwvOGl8toUZ8AK0gCOSyrToTCjsNRTHeCsE fKJkkH6f0vYkFvDzX5eWb8SNxP2qCv0e+cGhVFglSSwilr0LRfeCDIKAR7JjHn4HV8gH cfpg== X-Gm-Message-State: AElRT7GJsgyi7ek/mE2zKx8HOoUvc8rfGjHF9wK0cZa8Gb7i9NPTmKdX j8ORRhB429XOzPgyvlNLXiI= X-Received: by 2002:a17:902:536c:: with SMTP id b99-v6mr23639145pli.399.1521854783743; Fri, 23 Mar 2018 18:26:23 -0700 (PDT) Received: from [192.168.1.70] (c-73-93-215-6.hsd1.ca.comcast.net. [73.93.215.6]) by smtp.gmail.com with ESMTPSA id d64sm19139333pfa.118.2018.03.23.18.26.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 23 Mar 2018 18:26:22 -0700 (PDT) Subject: Re: [PATCH 10/10] kbuild: mark $(targets) as .SECONDARY and remove .PRECIOUS specifier To: Masahiro Yamada , linux-kbuild@vger.kernel.org Cc: Sam Ravnborg , Michal Marek , linux-kernel@vger.kernel.org, Arnd Bergmann , Laurent Pinchart , Frank Rowand , Geert Uytterhoeven References: <1521810279-6282-1-git-send-email-yamada.masahiro@socionext.com> <1521810279-6282-10-git-send-email-yamada.masahiro@socionext.com> From: Frank Rowand Message-ID: <84d68deb-8905-cf96-7c71-49d4724f2fbc@gmail.com> Date: Fri, 23 Mar 2018 18:26:21 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 MIME-Version: 1.0 In-Reply-To: <1521810279-6282-10-git-send-email-yamada.masahiro@socionext.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 03/23/18 06:04, Masahiro Yamada wrote: > GNU Make automatically deletes intermediate files that are updated > in a chain of pattern rules. > > Example 1) %.dtb.o <- %.dtb.S <- %.dtb.S <- %.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. > > Another difference is that .PRECIOUS works with pattern rules whereas > .SECONDARY does not. > > .PRECIOUS: $(obj)/%.lex.c > > works, but > > .SECONDARY: $(obj)/%.lex.c > > has no effect. However, for the reason above, I do not want to use > .PRECIOUS to avoid obscure build breakage. > > The targets specified as .SECONDARY must be explicit. $(targets) > contains all targets that need to include .*.cmd files. So, the > intermediates you want to keep are likely to be contained in > $(targets). So, mark it as .SECONDARY. The exception is when they > are created by $(call cmd,...) instead of $(call if_changed,...) > since the former does not need to include .*.cmd file. In this > case, makefiles need to mark them .SECONDARY by themselves, like > arch/arm(64)/crypto/Makefile. > > Signed-off-by: Masahiro Yamada Acked-by: Frank Rowand -Frank > --- > > arch/arc/boot/dts/Makefile | 2 -- > arch/arm/crypto/Makefile | 2 +- > arch/arm64/crypto/Makefile | 2 +- > arch/metag/boot/dts/Makefile | 2 -- > drivers/of/unittest-data/Makefile | 4 ---- > scripts/Makefile.build | 6 ++++-- > scripts/Makefile.lib | 3 --- > 7 files changed, 6 insertions(+), 15 deletions(-) > > diff --git a/arch/arc/boot/dts/Makefile b/arch/arc/boot/dts/Makefile > index 22a4c5d..a83c4f5 100644 > --- a/arch/arc/boot/dts/Makefile > +++ b/arch/arc/boot/dts/Makefile > @@ -9,8 +9,6 @@ endif > obj-y += $(builtindtb-y).dtb.o > dtb-y := $(builtindtb-y).dtb > > -.SECONDARY: $(obj)/$(builtindtb-y).dtb.S > - > # for CONFIG_OF_ALL_DTBS test > dtstree := $(srctree)/$(src) > dtb- := $(patsubst $(dtstree)/%.dts,%.dtb, $(wildcard $(dtstree)/*.dts)) > diff --git a/arch/arm/crypto/Makefile b/arch/arm/crypto/Makefile > index 30ef8e2..3d59567 100644 > --- a/arch/arm/crypto/Makefile > +++ b/arch/arm/crypto/Makefile > @@ -63,4 +63,4 @@ $(src)/sha256-core.S_shipped: $(src)/sha256-armv4.pl > $(src)/sha512-core.S_shipped: $(src)/sha512-armv4.pl > $(call cmd,perl) > > -.PRECIOUS: $(obj)/sha256-core.S $(obj)/sha512-core.S > +.SECONDARY: $(obj)/sha256-core.S $(obj)/sha512-core.S > diff --git a/arch/arm64/crypto/Makefile b/arch/arm64/crypto/Makefile > index cee9b8d9..fceb638 100644 > --- a/arch/arm64/crypto/Makefile > +++ b/arch/arm64/crypto/Makefile > @@ -76,4 +76,4 @@ $(src)/sha256-core.S_shipped: $(src)/sha512-armv8.pl > $(src)/sha512-core.S_shipped: $(src)/sha512-armv8.pl > $(call cmd,perlasm) > > -.PRECIOUS: $(obj)/sha256-core.S $(obj)/sha512-core.S > +.SECONDARY: $(obj)/sha256-core.S $(obj)/sha512-core.S > diff --git a/arch/metag/boot/dts/Makefile b/arch/metag/boot/dts/Makefile > index f0a180f..16505aa 100644 > --- a/arch/metag/boot/dts/Makefile > +++ b/arch/metag/boot/dts/Makefile > @@ -12,5 +12,3 @@ endif > > dtb-$(CONFIG_METAG_BUILTIN_DTB) += $(builtindtb-y).dtb > obj-$(CONFIG_METAG_BUILTIN_DTB) += $(builtindtb-y).dtb.o > - > -.SECONDARY: $(obj)/$(builtindtb-y).dtb.S > diff --git a/drivers/of/unittest-data/Makefile b/drivers/of/unittest-data/Makefile > index 333bc4c..0fb87cb 100644 > --- a/drivers/of/unittest-data/Makefile > +++ b/drivers/of/unittest-data/Makefile > @@ -12,7 +12,3 @@ DTC_FLAGS_overlay := -@ > DTC_FLAGS_overlay_bad_phandle := -@ > DTC_FLAGS_overlay_bad_symbol := -@ > DTC_FLAGS_overlay_base := -@ > - > -.PRECIOUS: \ > - $(obj)/%.dtb.S \ > - $(obj)/%.dtb > diff --git a/scripts/Makefile.build b/scripts/Makefile.build > index cc081af..4397adb 100644 > --- a/scripts/Makefile.build > +++ b/scripts/Makefile.build > @@ -430,8 +430,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 FORCE > $(call if_changed,asn1_compiler) > @@ -590,6 +588,10 @@ $(shell mkdir -p $(obj-dirs)) > endif > endif > > +# Some contained in $(targets) are intermediate artifacts. > +# We never want them to be removed automatically. > +.SECONDARY: $(targets) > + > # Declare the contents of the .PHONY variable as phony. We keep that > # information in a variable se we can use it in if_changed and friends. > > diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib > index 7a1fa92..c114ce5 100644 > --- a/scripts/Makefile.lib > +++ b/scripts/Makefile.lib > @@ -183,7 +183,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) > > @@ -192,14 +191,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 = bison -o/dev/null --defines=$@ -t -l $< > > -.PRECIOUS: $(obj)/%.tab.h > $(obj)/%.tab.h: $(src)/%.y FORCE > $(call if_changed,bison_h) > >