• Masahiro Yamada's avatar
    kbuild: create built-in.o automatically if parent directory wants it · f7adc312
    Masahiro Yamada authored
    "obj-y += foo/" syntax requires Kbuild to visit the "foo" subdirectory
    and link built-in.o from that directory.  This means foo/Makefile is
    responsible for creating built-in.o even if there is no object to
    link (in this case, built-in.o is an empty archive).
    
    We have had several fixups like commit 4b024242 ("kbuild: Fix
    linking error built-in.o no such file or directory"), then ended up
    with a complex condition as follows:
    
      ifneq ($(strip $(obj-y) $(obj-m) $(obj-) $(subdir-m) $(lib-target)),)
      builtin-target := $(obj)/built-in.o
      endif
    
    We still have more cases not covered by the above, so we need to add
      obj- := dummy.o
    in several places just for creating empty built-in.o.
    
    A key point is, the parent Makefile knows whether built-in.o is needed
    or not.  If a subdirectory needs to create built-in.o, its parent can
    tell the fact when descending.
    
    If non-empty $(need-builtin) flag is passed from the parent, built-in.o
    should be created.  $(obj-y) should be still checked to support the
    single target "%/".  All of ugly tricks will go away.
    Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
    Reviewed-by: default avatarSam Ravnborg <sam@ravnborg.org>
    f7adc312
Makefile.build 19.5 KB