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)>
next prev parent 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.