]> git.baikalelectronics.ru Git - kernel.git/commit
kbuild: create built-in.o automatically if parent directory wants it
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Tue, 7 Nov 2017 16:31:46 +0000 (01:31 +0900)
committerMasahiro Yamada <yamada.masahiro@socionext.com>
Sat, 18 Nov 2017 02:38:58 +0000 (11:38 +0900)
commit8476ade99fdeefc3791f8d6ad29d9295fb57a8da
tree5519de53ba24c13fd6591efb49b861756178238c
parent0e8ca4ece50d73f3078c58d7b85dcd8c943fee0f
kbuild: create built-in.o automatically if parent directory wants it

"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 1516b13504ee ("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: Masahiro Yamada <yamada.masahiro@socionext.com>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Makefile
scripts/Makefile.build