• Masahiro Yamada's avatar
    kbuild: invoke syncconfig if include/config/auto.conf.cmd is missing · 9390dff6
    Masahiro Yamada authored
    If include/config/auto.conf.cmd is lost for some reasons, it is not
    self-healing, so the top Makefile misses to run syncconfig.
    Move include/config/auto.conf.cmd to the target side.
    
    I used a pattern rule instead of a normal rule here although it is
    a bit gross.
    
    If the rule were written with a normal rule like this,
    
      include/config/auto.conf \
      include/config/auto.conf.cmd \
      include/config/tristate.conf: $(KCONFIG_CONFIG)
              $(Q)$(MAKE) -f $(srctree)/Makefile syncconfig
    
    ... syncconfig would be executed per target.
    
    Using a pattern rule makes sure that syncconfig is executed just once
    because Make assumes the recipe will create all of the targets.
    
    Here is a quote from the GNU Make manual [1]:
    
    "Pattern rules may have more than one target. Unlike normal rules,
    this does not act as many different rules with the same prerequisites
    and recipe. If a pattern rule has multiple targets, make knows that
    the rule's recipe is responsible for making all of the targets. The
    recipe is executed only once to make all the targets. When searching
    for a pattern rule to match a target, the target patterns of a rule
    other than the one that matches the target in need of a rule are
    incidental: make worries only about giving a recipe and prerequisites
    to the file presently in question. However, when this file's recipe is
    run, the other targets are marked as having been updated themselves."
    
    [1]: https://www.gnu.org/software/make/manual/html_node/Pattern-Intro.htmlSigned-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
    9390dff6
Makefile 58.4 KB