On Tue, Mar 31, 2020 at 6:16 PM Vegard Nossum <vegard.nossum@xxxxxxxxxx> wrote:
Hi,
I often run 'make foo/bar.o' as part of my workflow, even when bar.o is
not specified in any kernel makefile, and this has worked just fine for
years.
This is broken after commit 394053f4a4b3e3eeeaa67b67fc886a9a75bd9e4d
(kbuild: make single targets work more correctly) and just gives an error:
$ make kernel/test.o
CALL scripts/checksyscalls.sh
CALL scripts/atomic/check-atomics.sh
DESCEND objtool
make[2]: *** No rule to make target 'kernel/test.o'. Stop.
scripts/Makefile.build:502: recipe for target '__build' failed
make[1]: *** [__build] Error 2
Makefile:1670: recipe for target 'kernel' failed
make: *** [kernel] Error 2
This is intentional to make the single target builds
work in the same manner as the normal builds.
The necessary CONFIG dependency must be met.
obj-$(CONFIG_FOO) += foo.o
foo.o can be built only when CONFIG_FOO is y/m.
For top-level objects (e.g. 'make bar.o') the situation is even worse,
since make exits with status 0 without building anything :-/
There is no .c or .S file at the top-level of the kernel source tree.
'make bar.o' never happens.
Is there any chance we can get this back? It was super useful for me.
What you want is "Let's build whatever", right?
No, please add 'obj-y += test.o' if you want to
test your local file.