git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v3 0/9] Makefile: optimize noop runs, add shared.mak

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Feb 25, 2022, 09:04 UTC
Message-ID
<cover-v3-0.9-00000000000-20220225T090127Z-avarab@gmail.com>
In-Reply-To
<cover-v2-0.8-00000000000-20211224T173558Z-avarab@gmail.com>

As the v1 notes (among other things): https://lore.kernel.org/git/cover-0.8-00000000000-20211217T012902Z-avarab@gmail.com/

    This speeds up noop runs of "make" by a lot. After a "make" running a
    "make -j1" with this is ~1.5 faster than on "master"[2], and around 3x
    as fast with "make -j1 NO_TCLTK=Y" (the TCL part takes a lot of time,
    but that's another matter).
This v3 re-roll:
 * Addresses a minor comment/documentation issue pointed out by Taylor
   Blau.
 * Adjusts the ".SUFFIXES" commit message to note the source of the
   speed-up from that change, in response to a question from Taylor.
 * Changes the contrib/scalar/Makefile to make use of the new
   shared.mak, which allows for deleting some copy/pasted code in it
   in favor of the same shared logic.
   The original version of these patches was written before that file
   landed in-tree.
For v2, see: https://lore.kernel.org/git/cover-v2-0.8-00000000000-20211224T173558Z-avarab@gmail.com/
Ævar Arnfjörð Bjarmason (9):
  scalar Makefile: set the default target after the includes
  Makefiles: add "shared.mak", move ".DELETE_ON_ERROR" to it
  Makefile: disable GNU make built-in wildcard rules
  Makefile: define $(LIB_H) in terms of $(FIND_SOURCE_FILES)
  Makefile: move ".SUFFIXES" rule to shared.mak
  Makefile: move $(comma), $(empty) and $(space) to shared.mak
  Makefile: add "$(QUIET)" boilerplate to shared.mak
  Makefile: use $(wspfx) for $(QUIET...) in shared.mak
  Makefiles: add and use wildcard "mkdir -p" template
 Documentation/Makefile    |  63 ++------------------
 Makefile                  | 118 ++++++++++++--------------------------
 config.mak.uname          |   1 -
 contrib/scalar/Makefile   |  19 ++----
 contrib/scalar/t/Makefile |   3 +
 shared.mak                | 109 +++++++++++++++++++++++++++++++++++
 t/Makefile                |   3 +
 t/interop/Makefile        |   3 +
 t/perf/Makefile           |   3 +
 templates/Makefile        |   8 +--
 10 files changed, 170 insertions(+), 160 deletions(-)
 create mode 100644 shared.mak
Range-diff against v2:
 -:  ----------- >  1:  2404c4d8b96 scalar Makefile: set the default target after the includes
 1:  97dccacce20 !  2:  96a490bec54 Makefiles: add "shared.mak", move ".DELETE_ON_ERROR" to it
    @@ Makefile: shell_compatibility_test: please_set_SHELL_PATH_to_a_more_modern_shell
      
      # The generic compilation pattern rule and automatically
     
    + ## contrib/scalar/Makefile ##
    +@@
    ++# Import tree-wide shared Makefile behavior and libraries
    ++include ../../shared.mak
    ++
    + QUIET_SUBDIR0  = +$(MAKE) -C # space to separate -C and subdir
    + QUIET_SUBDIR1  =
    + 
    +
    + ## contrib/scalar/t/Makefile ##
    +@@
    ++# Import tree-wide shared Makefile behavior and libraries
    ++include ../../../shared.mak
    ++
    + # Run scalar tests
    + #
    + # Copyright (c) 2005,2021 Junio C Hamano, Johannes Schindelin
    +
      ## shared.mak (new) ##
     @@
     +### Flags affecting all rules
    @@ t/interop/Makefile
      export GIT_TEST_OPTIONS
      
     
    + ## t/perf/Makefile ##
    +@@
    ++# Import tree-wide shared Makefile behavior and libraries
    ++include ../../shared.mak
    ++
    + -include ../../config.mak
    + export GIT_TEST_OPTIONS
    + 
    +
      ## templates/Makefile ##
     @@
     +# Import tree-wide shared Makefile behavior and libraries
 2:  b2bf32ab071 =  3:  9392e3c3e97 Makefile: disable GNU make built-in wildcard rules
 3:  275aba624fa =  4:  07cf9daa9d6 Makefile: define $(LIB_H) in terms of $(FIND_SOURCE_FILES)
 4:  7103c40de64 !  5:  16f2e3ff35b Makefile: move ".SUFFIXES" rule to shared.mak
    @@ Commit message
               'make -C Documentation -j1 man' in 'HEAD~0' ran
                 1.25 ± 0.14 times faster than 'make -C Documentation -j1 man' in 'HEAD~1'
     
    +    The reason for that can be seen when comparing that run with
    +    "--debug=a". Without this change making a target like "git-status.1"
    +    will cause "make" to consider not only "git-status.txt", but
    +    "git-status.txt.o", as well as numerous other implicit suffixes such
    +    as ".c", ".cc", ".cpp" etc. See [1] for a more detailed before/after
    +    example.
    +
    +    So this is causing us to omit a bunch of work we didn't need to
    +    do. For making "git-status.1" the "--debug=a" output is reduced from
    +    ~140k lines to ~6k.
    +
    +    1. https://lore.kernel.org/git/220222.86bkyz875k.gmgdl@evledraar.gmail.com/
    +
         Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
     
      ## Makefile ##
    @@ shared.mak
      
     +## Likewise delete default $(SUFFIXES). See:
     +##
    -+##     info make --index-search=.DELETE_ON_ERROR
    ++##     info make --index-search=.SUFFIXES
     +.SUFFIXES:
     +
      ### Flags affecting all rules
 5:  4a5c647b5e7 =  6:  1b6ecb27f02 Makefile: move $(comma), $(empty) and $(space) to shared.mak
 6:  940299d2a03 !  7:  471067deefc Makefile: add "$(QUIET)" boilerplate to shared.mak
    @@ config.mak.uname: vcxproj:
      	git add -f git.sln {*,*/lib,t/helper/*}/*.vcxproj
      
     
    + ## contrib/scalar/Makefile ##
    +@@
    + # Import tree-wide shared Makefile behavior and libraries
    + include ../../shared.mak
    + 
    +-QUIET_SUBDIR0  = +$(MAKE) -C # space to separate -C and subdir
    +-QUIET_SUBDIR1  =
    +-
    +-ifneq ($(findstring s,$(MAKEFLAGS)),s)
    +-ifndef V
    +-	QUIET_GEN      = @echo '   ' GEN $@;
    +-	QUIET_SUBDIR0  = +@subdir=
    +-	QUIET_SUBDIR1  = ;$(NO_SUBDIR) echo '   ' SUBDIR $$subdir; \
    +-			 $(MAKE) $(PRINT_DIR) -C $$subdir
    +-else
    +-	export V
    +-endif
    +-endif
    +-
    + include ../../config.mak.uname
    + -include ../../config.mak.autogen
    + -include ../../config.mak
    +
      ## shared.mak ##
     @@
      comma = ,
 7:  1e13fee526d =  8:  510306d2219 Makefile: use $(wspfx) for $(QUIET...) in shared.mak
 8:  250b32540d9 =  9:  85bb74aa32f Makefiles: add and use wildcard "mkdir -p" template
-- 
2.35.1.1175.gf9e1b23ea35
Previous: Ævar Arnfjörð BjarmasonNext: Ævar Arnfjörð Bjarmason
Message 13 of 67 in “Makefile: optimize noop runs, add shared.mak”
  1. 0/8 Makefile: optimize noop runs, add shared.makÆvar Arnfjörð Bjarmason, Dec 24, 2021
  2. 1/8 Makefiles: add "shared.mak", move ".DELETE_ON_ERROR" to itÆvar Arnfjörð Bjarmason, Dec 24, 2021
  3. 2/8 Makefile: disable GNU make built-in wildcard rulesÆvar Arnfjörð Bjarmason, Dec 24, 2021
  4. 3/8 Makefile: define $(LIB_H) in terms of $(FIND_SOURCE_FILES)Ævar Arnfjörð Bjarmason, Dec 24, 2021
  5. 4/8 Makefile: move ".SUFFIXES" rule to shared.makÆvar Arnfjörð Bjarmason, Dec 24, 2021
  6. Taylor BlauFeb 22, 2022
  7. Ævar Arnfjörð BjarmasonFeb 22, 2022
  8. 6/8 Makefile: add "$(QUIET)" boilerplate to shared.makÆvar Arnfjörð Bjarmason, Dec 24, 2021
  9. 5/8 Makefile: move $(comma), $(empty) and $(space) to shared.makÆvar Arnfjörð Bjarmason, Dec 24, 2021
  10. 7/8 Makefile: use $(wspfx) for $(QUIET...) in shared.makÆvar Arnfjörð Bjarmason, Dec 24, 2021
  11. 8/8 Makefiles: add and use wildcard "mkdir -p" templateÆvar Arnfjörð Bjarmason, Dec 24, 2021
  12. Ævar Arnfjörð BjarmasonFeb 21, 2022
  13. 0/9 Makefile: optimize noop runs, add shared.makÆvar Arnfjörð Bjarmason, Feb 25, 2022
  14. 1/9 scalar Makefile: set the default target after the includesÆvar Arnfjörð Bjarmason, Feb 25, 2022
  15. Junio C HamanoFeb 25, 2022
  16. 2/9 Makefiles: add "shared.mak", move ".DELETE_ON_ERROR" to itÆvar Arnfjörð Bjarmason, Feb 25, 2022
  17. Junio C HamanoFeb 25, 2022
  18. Ævar Arnfjörð BjarmasonFeb 25, 2022
  19. Junio C HamanoFeb 25, 2022
  20. Phillip WoodFeb 28, 2022
  21. Ævar Arnfjörð BjarmasonFeb 28, 2022
  22. Phillip WoodFeb 28, 2022
  23. Ævar Arnfjörð BjarmasonFeb 28, 2022
  24. 3/9 Makefile: disable GNU make built-in wildcard rulesÆvar Arnfjörð Bjarmason, Feb 25, 2022
  25. Junio C HamanoFeb 25, 2022
  26. 5/9 Makefile: move ".SUFFIXES" rule to shared.makÆvar Arnfjörð Bjarmason, Feb 25, 2022
  27. Junio C HamanoFeb 25, 2022
  28. 7/9 Makefile: add "$(QUIET)" boilerplate to shared.makÆvar Arnfjörð Bjarmason, Feb 25, 2022
  29. Junio C HamanoFeb 25, 2022
  30. 6/9 Makefile: move $(comma), $(empty) and $(space) to shared.makÆvar Arnfjörð Bjarmason, Feb 25, 2022
  31. Junio C HamanoFeb 25, 2022
  32. 4/9 Makefile: define $(LIB_H) in terms of $(FIND_SOURCE_FILES)Ævar Arnfjörð Bjarmason, Feb 25, 2022
  33. 8/9 Makefile: use $(wspfx) for $(QUIET...) in shared.makÆvar Arnfjörð Bjarmason, Feb 25, 2022
  34. Junio C HamanoFeb 25, 2022
  35. 9/9 Makefiles: add and use wildcard "mkdir -p" templateÆvar Arnfjörð Bjarmason, Feb 25, 2022
  36. 0/9 Makefile: optimize noop runs, add shared.makÆvar Arnfjörð Bjarmason, Mar 2, 2022
  37. 1/9 scalar Makefile: use "The default target of..." patternÆvar Arnfjörð Bjarmason, Mar 2, 2022
  38. Junio C HamanoMar 2, 2022
  39. 2/9 Makefiles: add "shared.mak", move ".DELETE_ON_ERROR" to itÆvar Arnfjörð Bjarmason, Mar 2, 2022
  40. 3/9 Makefile: disable GNU make built-in wildcard rulesÆvar Arnfjörð Bjarmason, Mar 2, 2022
  41. 4/9 Makefile: define $(LIB_H) in terms of $(FIND_SOURCE_FILES)Ævar Arnfjörð Bjarmason, Mar 2, 2022
  42. 5/9 Makefile: move ".SUFFIXES" rule to shared.makÆvar Arnfjörð Bjarmason, Mar 2, 2022
  43. 7/9 Makefile: add "$(QUIET)" boilerplate to shared.makÆvar Arnfjörð Bjarmason, Mar 2, 2022
  44. 6/9 Makefile: move $(comma), $(empty) and $(space) to shared.makÆvar Arnfjörð Bjarmason, Mar 2, 2022
  45. 8/9 Makefile: use $(wspfx) for $(QUIET...) in shared.makÆvar Arnfjörð Bjarmason, Mar 2, 2022
  46. Junio C HamanoMar 2, 2022
  47. 9/9 Makefiles: add and use wildcard "mkdir -p" templateÆvar Arnfjörð Bjarmason, Mar 2, 2022
  48. Junio C HamanoMar 2, 2022
  49. Junio C HamanoMar 2, 2022
  50. Phillip WoodMar 3, 2022
  51. 0/8 Makefile: optimize noop runs, add shared.makÆvar Arnfjörð Bjarmason, Mar 3, 2022
  52. 1/8 scalar Makefile: use "The default target of..." patternÆvar Arnfjörð Bjarmason, Mar 3, 2022
  53. 2/8 Makefiles: add "shared.mak", move ".DELETE_ON_ERROR" to itÆvar Arnfjörð Bjarmason, Mar 3, 2022
  54. 3/8 Makefile: disable GNU make built-in wildcard rulesÆvar Arnfjörð Bjarmason, Mar 3, 2022
  55. Rene KitaApr 11, 2022
  56. Ævar Arnfjörð BjarmasonApr 11, 2022
  57. 4/8 Makefile: define $(LIB_H) in terms of $(FIND_SOURCE_FILES)Ævar Arnfjörð Bjarmason, Mar 3, 2022
  58. 5/8 Makefile: move ".SUFFIXES" rule to shared.makÆvar Arnfjörð Bjarmason, Mar 3, 2022
  59. Adam DinwoodieApr 5, 2022
  60. Ævar Arnfjörð BjarmasonApr 5, 2022
  61. Documentation/Makefile: fix "make info" regression in dad9cd7d518Ævar Arnfjörð Bjarmason, Apr 5, 2022
  62. Adam DinwoodieApr 6, 2022
  63. Junio C HamanoApr 6, 2022
  64. Taylor BlauApr 6, 2022
  65. 7/8 Makefile: add "$(QUIET)" boilerplate to shared.makÆvar Arnfjörð Bjarmason, Mar 3, 2022
  66. 6/8 Makefile: move $(comma), $(empty) and $(space) to shared.makÆvar Arnfjörð Bjarmason, Mar 3, 2022
  67. 8/8 Makefiles: add and use wildcard "mkdir -p" templateÆvar Arnfjörð Bjarmason, Mar 3, 2022

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.