From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 110900 invoked by alias); 16 Nov 2016 19:38:38 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 110785 invoked by uid 89); 16 Nov 2016 19:38:37 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.2 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,SPF_SOFTFAIL autolearn=no version=3.3.2 spammy=0.7, hurt, canceling, Hx-languages-length:2842 X-HELO: simark.ca Received: from simark.ca (HELO simark.ca) (158.69.221.121) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 16 Nov 2016 19:38:26 +0000 Received: by simark.ca (Postfix, from userid 33) id 0265F1E75C; Wed, 16 Nov 2016 14:38:24 -0500 (EST) To: Pedro Alves Subject: Re: [PATCH 3/4] Makefile: Replace old suffix rules with pattern rules X-PHP-Originating-Script: 33:rcube.php MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Wed, 16 Nov 2016 19:38:00 -0000 From: Simon Marchi Cc: Eli Zaretskii , Simon Marchi , gdb-patches@sourceware.org In-Reply-To: <0fa3954e-1f8a-f7f8-aad7-d31d45aa981e@redhat.com> References: <20161116160808.12830-1-simon.marchi@ericsson.com> <20161116160808.12830-4-simon.marchi@ericsson.com> <83lgwjfknq.fsf@gnu.org> <0fa3954e-1f8a-f7f8-aad7-d31d45aa981e@redhat.com> Message-ID: <535c5f310c42d9b4e349f5072068fb2a@polymtl.ca> X-Sender: simon.marchi@polymtl.ca User-Agent: Roundcube Webmail/1.2.2 X-IsSubscribed: yes X-SW-Source: 2016-11/txt/msg00452.txt.bz2 On 2016-11-16 11:56, Pedro Alves wrote: > # Suppress smart makes who think they know how to automake yacc and > flex file > .y.c: > .l.c: I don't understand how that can be useful. According to the GNU make doc: Suffix rules with no recipe are also meaningless. They do not remove previous rules as do pattern rules with no recipe (see Canceling Implicit Rules). They simply enter the suffix or pair of suffixes concatenated as a target in the data base. Source: https://www.gnu.org/software/make/manual/html_node/Suffix-Rules.html So those two would be meaningless? > ~~~ > This doesn't get rid of all the implicit rules in GNU make, however, > because some default rules are pattern rules which are not affected by > the .SUFFIXES special target. > > To get rid of all implicit rules in GNU make you have to either invoke > make with the -r option [...], or else add this to your makefile: > > .SUFFIXES: > %:: %,v > %:: RCS/%,v > %:: RCS/% > %:: s.% > %:: SCCS/s.% > ~~~ > > I'd be curious if this makes any difference in a "make" invocation > that ends up building nothing (because all targets are already > up to date). When looking at the make debug output (make -d), I think it becomes obvious: http://pastebin.com/raw/cETk9W3v That's taken without .SUFFIXES or other means to disable implicit rules. For _each_ .c file, make tries to determine if it was generated somehow, and you can see the lines which the rules you mentioned would suppress. In our case, most C files are not generated, and those that are have an explicit rule. I don't think we rely on implicit rules. Since we don't use them, I think it makes sense to disable then as much as possible. Plus, I can imagine them being a possible source of "bugs". If you happen to have a file called infrun.l by accident, the the build will fail and you'll wonder why. I did some experiments, here's the time it takes to run make in the gdb/ directory with nothing to re-build. The other number is the number of lines printed when running make -d. It gives a rough idea of the amount of operations make does. Note that these results are by changing both gdb/Makefile.in and gdb/gdbserver/Makefile.in. That's fair, since the -r applies recursively as well. Baseline: 2.5 seconds, 2306335 lines With .SUFFIXES: 0.7 seconds, 307706 lines With .SUFFIXES and the other %:: rules: 0.6 seconds, 255386 lines With -r flag (make -r): 0.5 seconds, 160682 lines So I think it shows that it wouldn't hurt to use ".SUFFIXES =" and the other rules from the gcc Makefile. I couldn't manage to get rid of the %.{y,l,w} -> %.c implicit rules though no matter what I tried. Calling make with the -r flag was the only way. At this point the returns are minimal though, so I don't think we should worry about it.