From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752131AbeCXBWk (ORCPT ); Fri, 23 Mar 2018 21:22:40 -0400 Received: from mail-pg0-f68.google.com ([74.125.83.68]:41700 "EHLO mail-pg0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751617AbeCXBWi (ORCPT ); Fri, 23 Mar 2018 21:22:38 -0400 X-Google-Smtp-Source: AG47ELuKy3vi0uddNWXd+BjRLpVT0hXrptCqihH4xVUf+bYwEx3oBHAs1b3Sf7f3bAqpjvzelR/yaQ== Subject: Re: [PATCH 04/10] kbuild: add %.lex.c and %.tab.[ch] to 'targets' automatically 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-4-git-send-email-yamada.masahiro@socionext.com> From: Frank Rowand Message-ID: Date: Fri, 23 Mar 2018 18:22:36 -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-4-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 List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 03/23/18 06:04, Masahiro Yamada wrote: > Files generated by if_changed* must be added to 'targets' to include > *.cmd files. Otherwise, they would be regenerated every time. > > The build system automatically adds objects to 'targets' where > appropriate, such as obj-y, extra-y, etc. but does nothing for > intermediate files. So, each Makefile needs to add them by itself. > > There are some common cases where objects are generated by chained > rules. Lexers and parsers are compiled like follows: > > %.lex.o <- %.lex.c <- %.l > %.tab.o <- %.tab.c <- %.y > > They are common patterns, so it is reasonable to take care of them > in the core Makefile instead of requiring each Makefile to do so. > > At this moment, you cannot delete 'target += zconf.lex.c' because > zconf.lex.c is included from zconf.tab.c instead of being compiled. > This will be possible with further refactoring in the future. > > Signed-off-by: Masahiro Yamada Acked-by: Frank Rowand -Frank > --- > > scripts/Makefile.build | 11 +++++++++++ > scripts/dtc/Makefile | 3 --- > scripts/genksyms/Makefile | 2 -- > scripts/kconfig/Makefile | 2 +- > 4 files changed, 12 insertions(+), 6 deletions(-) > > diff --git a/scripts/Makefile.build b/scripts/Makefile.build > index 77cce68..36f7990 100644 > --- a/scripts/Makefile.build > +++ b/scripts/Makefile.build > @@ -538,6 +538,17 @@ $(call multi_depend, $(multi-used-m), .o, -objs -y -m) > targets += $(multi-used-m) > targets := $(filter-out $(PHONY), $(targets)) > > +# Add intermediate targets: > +# When building objects with specific suffix patterns, add intermediate > +# targets that the final targets are derived from. > +intermediate_targets = $(foreach sfx, $(2), \ > + $(patsubst %$(strip $(1)),%$(sfx), \ > + $(filter %$(strip $(1)), $(targets)))) > +# %.lex.o <- %.lex.c <- %.l > +# %.tab.o <- %.tab.[ch] <- %.y > +targets += $(call intermediate_targets, .lex.o, .lex.c) \ > + $(call intermediate_targets, .tab.o, .tab.c .tab.h) > + > # Descending > # --------------------------------------------------------------------------- > > diff --git a/scripts/dtc/Makefile b/scripts/dtc/Makefile > index d17ba64..9cac65b 100644 > --- a/scripts/dtc/Makefile > +++ b/scripts/dtc/Makefile > @@ -27,6 +27,3 @@ HOSTCFLAGS_dtc-parser.tab.o := $(HOSTCFLAGS_DTC) > > # dependencies on generated files need to be listed explicitly > $(obj)/dtc-lexer.lex.o: $(obj)/dtc-parser.tab.h > - > -# generated files need to include *.cmd > -targets := dtc-lexer.lex.c dtc-parser.tab.c dtc-parser.tab.h > diff --git a/scripts/genksyms/Makefile b/scripts/genksyms/Makefile > index f4749e8..aeefd47 100644 > --- a/scripts/genksyms/Makefile > +++ b/scripts/genksyms/Makefile > @@ -32,5 +32,3 @@ HOSTCFLAGS_lex.lex.o := -I$(src) > > # dependencies on generated files need to be listed explicitly > $(obj)/lex.lex.o: $(obj)/parse.tab.h > - > -targets := lex.lex.c parse.tab.c parse.tab.h > diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile > index 1dcd797..5def877 100644 > --- a/scripts/kconfig/Makefile > +++ b/scripts/kconfig/Makefile > @@ -207,7 +207,7 @@ gconf-objs := gconf.o zconf.tab.o > > hostprogs-y := conf nconf mconf kxgettext qconf gconf > > -targets += zconf.tab.c zconf.lex.c > +targets += zconf.lex.c > clean-files := qconf.moc .tmp_qtcheck .tmp_gtkcheck > clean-files += gconf.glade.h > clean-files += config.pot linux.pot >