All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: Taylor Blau <me@ttaylorr.com>
Cc: git@vger.kernel.org, "Junio C Hamano" <gitster@pobox.com>,
	"Phillip Wood" <phillip.wood123@gmail.com>,
	"Jeff King" <peff@peff.net>, "Dan Jacques" <dnj@google.com>,
	"Eric Wong" <e@80x24.org>, "Jonathan Nieder" <jrnieder@gmail.com>,
	"Mike Hommey" <mh@glandium.org>,
	"Đoàn Trần Công Danh" <congdanhqx@gmail.com>,
	"Victoria Dye" <vdye@github.com>,
	"Eric Sunshine" <sunshine@sunshineco.com>
Subject: Re: [PATCH v2 4/8] Makefile: move ".SUFFIXES" rule to shared.mak
Date: Tue, 22 Feb 2022 12:14:57 +0100	[thread overview]
Message-ID: <220222.86bkyz875k.gmgdl@evledraar.gmail.com> (raw)
In-Reply-To: <YhQs3VfjacB+Ryvh@nand.local>


On Mon, Feb 21 2022, Taylor Blau wrote:

> On Fri, Dec 24, 2021 at 06:37:43PM +0100, Ævar Arnfjörð Bjarmason wrote:
>>     $ git -c hyperfine.hook.setup= hyperfine -L rev HEAD~1,HEAD~0 -s 'make -C Documentation man' 'make -C Documentation -j1 man'
>>     Benchmark 1: make -C Documentation -j1 man' in 'HEAD~1
>>       Time (mean ± σ):     121.7 ms ±   8.8 ms    [User: 105.8 ms, System: 18.6 ms]
>>       Range (min … max):   112.8 ms … 148.4 ms    26 runs
>>
>>     Benchmark 2: make -C Documentation -j1 man' in 'HEAD~0
>>       Time (mean ± σ):      97.5 ms ±   8.0 ms    [User: 80.1 ms, System: 20.1 ms]
>>       Range (min … max):    89.8 ms … 111.8 ms    32 runs
>>
>>     Summary
>>       'make -C Documentation -j1 man' in 'HEAD~0' ran
>>         1.25 ± 0.14 times faster than 'make -C Documentation -j1 man' in 'HEAD~1'
>
> Nice speed-up. Though I am not sure I totally understand where it comes
> from ;). Reading 30248886ce8 and the documentation on .SUFFIXES from
> [1], I am still unclear. I guess removing the obsolete built-in suffix
> rules gives make less work to do in general?

I'll update the commit message, but basically the same applies as for
2/8 here (<patch-v2-2.8-b0c9be581a6-20211224T173558Z-avarab@gmail.com>),
or if you run "make" with "--debug=a". I.e. if before/after this change you do:

    git clean -dxf; make -C Documentation/ --debug=a git-status.1 >/tmp/b 2>&1
    git clean -dxf; make -C Documentation/ --debug=a git-status.1 >/tmp/a 2>&1

You'll get:
    
    $ wc -l /tmp/[ba]
       6515 /tmp/a
     144051 /tmp/b
     150566 total

Which e.g. for "git-status.txt" starts with (I cut a lot out, there's
way more than this just for that file):
    
          Considering target file 'git-status.txt'.
           Looking for an implicit rule for 'git-status.txt'.
    -      Trying pattern rule with stem 'git-status.txt'.
    -      Trying implicit prerequisite 'git-status.txt.o'.
    -      Trying pattern rule with stem 'git-status.txt'.
    -      Trying implicit prerequisite 'git-status.txt.c'.
    -      Trying pattern rule with stem 'git-status.txt'.
    -      Trying implicit prerequisite 'git-status.txt.cc'.
    -      Trying pattern rule with stem 'git-status.txt'.
    -      Trying implicit prerequisite 'git-status.txt.C'.
    -      Trying pattern rule with stem 'git-status.txt'.
    -      Trying implicit prerequisite 'git-status.txt.cpp'.
    -      Trying pattern rule with stem 'git-status.txt'.
    -      Trying implicit prerequisite 'git-status.txt.p'.
    -      Trying pattern rule with stem 'git-status.txt'.
    -      Trying implicit prerequisite 'git-status.txt.f'.
    -      Trying pattern rule with stem 'git-status.txt'.
    -      Trying implicit prerequisite 'git-status.txt.F'.
    -      Trying pattern rule with stem 'git-status.txt'.
    -      Trying implicit prerequisite 'git-status.txt.m'.
    -      Trying pattern rule with stem 'git-status.txt'.
    -      Trying implicit prerequisite 'git-status.txt.r'.
    -      Trying pattern rule with stem 'git-status.txt'.
    -      Trying implicit prerequisite 'git-status.txt.s'.
    -      Trying pattern rule with stem 'git-status.txt'.
    -      Trying implicit prerequisite 'git-status.txt.S'.
    -      Trying pattern rule with stem 'git-status.txt'.
    -      Trying implicit prerequisite 'git-status.txt.mod'.
    -      Trying pattern rule with stem 'git-status.txt'.
    -      Trying implicit prerequisite 'git-status.txt.sh'.
    -      Trying pattern rule with stem 'git-status.txt'.
    -      Trying implicit prerequisite 'git-status.txt.o'.
    [...]

I.e. given a foo.txt "make" by default will exhaustively consider foo
foo.txt.c, foo.txt.cpp etc. etc.

This is all ultimately a part of make's implicit rule
mechanism. I.e. even if you have no Makefile at all you can run "make
main" if you have a main.c in your directory, and it'll discover it and
compile it with implicit rules, unless you explicitl disable them,
e.g. with "-r":
    
    $ rm Makefile hello; make hello
    rm: cannot remove 'Makefile': No such file or directory
    rm: cannot remove 'hello': No such file or directory
    cc   hello.o   -o hello
    $ rm Makefile hello; make -r hello
    rm: cannot remove 'Makefile': No such file or directory
    make: *** No rule to make target 'hello'.  Stop.

> So long as we're not depending on any of these, this seems like a nice
> little boost to me.

Yes, definitely!

>> diff --git a/shared.mak b/shared.mak
>> index 29f0e69ecb9..155ac84f867 100644
>> --- a/shared.mak
>> +++ b/shared.mak
>> @@ -9,6 +9,11 @@
>>  %:: s.%
>>  %:: SCCS/s.%
>>
>> +## Likewise delete default $(SUFFIXES). See:
>> +##
>> +##     info make --index-search=.DELETE_ON_ERROR
>> +.SUFFIXES:
>
> Hmm. s/DELETE_ON_ERROR/SUFFIXES? Or perhaps I'm holding this whole thing
> incorrectly:
>
>     ~/s/git [nand] (ab/make-noop) $ info make --index-search=.DELETE_ON_ERROR
>     no index entries found for '.DELETE_ON_ERROR'
>     ~/s/git [nand] (ab/make-noop) $ info make --index-search=.SUFFIXES
>     no index entries found for '.SUFFIXES'

Yes that's a copy/paste error, it should be .SUFFIXES.

But both commands should work, or emit an error like:

    $ info doesnotexist --index-search=.DELETE_ON_ERROR
    info: No menu item 'doesnotexist' in node '(dir)Top'

A broken OS package? Self-built "make"?

In any case I could also link to
https://www.gnu.org/software/make/manual/html_node/Suffix-Rules.html;
which is the same information online (but may not match your local
"make" version)>

  reply	other threads:[~2022-02-22 11:36 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-24 17:37 [PATCH v2 0/8] Makefile: optimize noop runs, add shared.mak Ævar Arnfjörð Bjarmason
2021-12-24 17:37 ` [PATCH v2 1/8] Makefiles: add "shared.mak", move ".DELETE_ON_ERROR" to it Ævar Arnfjörð Bjarmason
2021-12-24 17:37 ` [PATCH v2 2/8] Makefile: disable GNU make built-in wildcard rules Ævar Arnfjörð Bjarmason
2021-12-24 17:37 ` [PATCH v2 3/8] Makefile: define $(LIB_H) in terms of $(FIND_SOURCE_FILES) Ævar Arnfjörð Bjarmason
2021-12-24 17:37 ` [PATCH v2 4/8] Makefile: move ".SUFFIXES" rule to shared.mak Ævar Arnfjörð Bjarmason
2022-02-22  0:22   ` Taylor Blau
2022-02-22 11:14     ` Ævar Arnfjörð Bjarmason [this message]
2021-12-24 17:37 ` [PATCH v2 5/8] Makefile: move $(comma), $(empty) and $(space) " Ævar Arnfjörð Bjarmason
2021-12-24 17:37 ` [PATCH v2 6/8] Makefile: add "$(QUIET)" boilerplate " Ævar Arnfjörð Bjarmason
2021-12-24 17:37 ` [PATCH v2 7/8] Makefile: use $(wspfx) for $(QUIET...) in shared.mak Ævar Arnfjörð Bjarmason
2021-12-24 17:37 ` [PATCH v2 8/8] Makefiles: add and use wildcard "mkdir -p" template Ævar Arnfjörð Bjarmason
2022-02-21 20:17 ` [PATCH v2 0/8] Makefile: optimize noop runs, add shared.mak Ævar Arnfjörð Bjarmason
2022-02-25  9:04 ` [PATCH v3 0/9] " Ævar Arnfjörð Bjarmason
2022-02-25  9:04   ` [PATCH v3 1/9] scalar Makefile: set the default target after the includes Ævar Arnfjörð Bjarmason
2022-02-25 22:43     ` Junio C Hamano
2022-02-25  9:04   ` [PATCH v3 2/9] Makefiles: add "shared.mak", move ".DELETE_ON_ERROR" to it Ævar Arnfjörð Bjarmason
2022-02-25 22:47     ` Junio C Hamano
2022-02-25 23:05       ` Ævar Arnfjörð Bjarmason
2022-02-25 23:42         ` Junio C Hamano
2022-02-28 10:56     ` Phillip Wood
2022-02-28 11:16       ` Ævar Arnfjörð Bjarmason
2022-02-28 15:51         ` Phillip Wood
2022-02-28 16:34           ` Ævar Arnfjörð Bjarmason
2022-02-25  9:04   ` [PATCH v3 3/9] Makefile: disable GNU make built-in wildcard rules Ævar Arnfjörð Bjarmason
2022-02-25 23:17     ` Junio C Hamano
2022-02-25  9:04   ` [PATCH v3 4/9] Makefile: define $(LIB_H) in terms of $(FIND_SOURCE_FILES) Ævar Arnfjörð Bjarmason
2022-02-25  9:04   ` [PATCH v3 5/9] Makefile: move ".SUFFIXES" rule to shared.mak Ævar Arnfjörð Bjarmason
2022-02-25 23:19     ` Junio C Hamano
2022-02-25  9:04   ` [PATCH v3 6/9] Makefile: move $(comma), $(empty) and $(space) " Ævar Arnfjörð Bjarmason
2022-02-25 23:24     ` Junio C Hamano
2022-02-25  9:04   ` [PATCH v3 7/9] Makefile: add "$(QUIET)" boilerplate " Ævar Arnfjörð Bjarmason
2022-02-25 23:27     ` Junio C Hamano
2022-02-25  9:04   ` [PATCH v3 8/9] Makefile: use $(wspfx) for $(QUIET...) in shared.mak Ævar Arnfjörð Bjarmason
2022-02-25 23:30     ` Junio C Hamano
2022-02-25  9:04   ` [PATCH v3 9/9] Makefiles: add and use wildcard "mkdir -p" template Ævar Arnfjörð Bjarmason
2022-03-02 12:49   ` [PATCH v4 0/9] Makefile: optimize noop runs, add shared.mak Ævar Arnfjörð Bjarmason
2022-03-02 12:49     ` [PATCH v4 1/9] scalar Makefile: use "The default target of..." pattern Ævar Arnfjörð Bjarmason
2022-03-02 19:35       ` Junio C Hamano
2022-03-02 12:49     ` [PATCH v4 2/9] Makefiles: add "shared.mak", move ".DELETE_ON_ERROR" to it Ævar Arnfjörð Bjarmason
2022-03-02 12:49     ` [PATCH v4 3/9] Makefile: disable GNU make built-in wildcard rules Ævar Arnfjörð Bjarmason
2022-03-02 12:49     ` [PATCH v4 4/9] Makefile: define $(LIB_H) in terms of $(FIND_SOURCE_FILES) Ævar Arnfjörð Bjarmason
2022-03-02 12:49     ` [PATCH v4 5/9] Makefile: move ".SUFFIXES" rule to shared.mak Ævar Arnfjörð Bjarmason
2022-03-02 12:49     ` [PATCH v4 6/9] Makefile: move $(comma), $(empty) and $(space) " Ævar Arnfjörð Bjarmason
2022-03-02 12:49     ` [PATCH v4 7/9] Makefile: add "$(QUIET)" boilerplate " Ævar Arnfjörð Bjarmason
2022-03-02 12:49     ` [PATCH v4 8/9] Makefile: use $(wspfx) for $(QUIET...) in shared.mak Ævar Arnfjörð Bjarmason
2022-03-02 19:26       ` Junio C Hamano
2022-03-02 12:49     ` [PATCH v4 9/9] Makefiles: add and use wildcard "mkdir -p" template Ævar Arnfjörð Bjarmason
2022-03-02 20:38       ` Junio C Hamano
2022-03-02 20:39     ` [PATCH v4 0/9] Makefile: optimize noop runs, add shared.mak Junio C Hamano
2022-03-03 14:08     ` Phillip Wood
2022-03-03 16:04     ` [PATCH v5 0/8] " Ævar Arnfjörð Bjarmason
2022-03-03 16:04       ` [PATCH v5 1/8] scalar Makefile: use "The default target of..." pattern Ævar Arnfjörð Bjarmason
2022-03-03 16:04       ` [PATCH v5 2/8] Makefiles: add "shared.mak", move ".DELETE_ON_ERROR" to it Ævar Arnfjörð Bjarmason
2022-03-03 16:04       ` [PATCH v5 3/8] Makefile: disable GNU make built-in wildcard rules Ævar Arnfjörð Bjarmason
2022-04-11 10:05         ` Rene Kita
2022-04-11 10:11           ` Ævar Arnfjörð Bjarmason
2022-03-03 16:04       ` [PATCH v5 4/8] Makefile: define $(LIB_H) in terms of $(FIND_SOURCE_FILES) Ævar Arnfjörð Bjarmason
2022-03-03 16:04       ` [PATCH v5 5/8] Makefile: move ".SUFFIXES" rule to shared.mak Ævar Arnfjörð Bjarmason
2022-04-05 14:15         ` Adam Dinwoodie
2022-04-05 16:04           ` Ævar Arnfjörð Bjarmason
2022-04-05 19:56           ` [PATCH] Documentation/Makefile: fix "make info" regression in dad9cd7d518 Ævar Arnfjörð Bjarmason
2022-04-06  8:26             ` Adam Dinwoodie
2022-04-06 16:43               ` Junio C Hamano
2022-04-06 17:05                 ` Taylor Blau
2022-03-03 16:04       ` [PATCH v5 6/8] Makefile: move $(comma), $(empty) and $(space) to shared.mak Ævar Arnfjörð Bjarmason
2022-03-03 16:04       ` [PATCH v5 7/8] Makefile: add "$(QUIET)" boilerplate " Ævar Arnfjörð Bjarmason
2022-03-03 16:04       ` [PATCH v5 8/8] Makefiles: add and use wildcard "mkdir -p" template Ævar Arnfjörð Bjarmason

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=220222.86bkyz875k.gmgdl@evledraar.gmail.com \
    --to=avarab@gmail.com \
    --cc=congdanhqx@gmail.com \
    --cc=dnj@google.com \
    --cc=e@80x24.org \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jrnieder@gmail.com \
    --cc=me@ttaylorr.com \
    --cc=mh@glandium.org \
    --cc=peff@peff.net \
    --cc=phillip.wood123@gmail.com \
    --cc=sunshine@sunshineco.com \
    --cc=vdye@github.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.