On 11/23/20 at 02:23P, Masahiro Yamada wrote:
> On Tue, Nov 3, 2020 at 3:23 PM WANG Chao <[email protected]> wrote:
> >
> > extra-y target doesn't build for 'make M=...' since commit 6212804f2d78
> > ("kbuild: do not create built-in objects for external module builds").
> >
> > This especially breaks kpatch, which is using 'extra-y := kpatch.lds'
> > and 'make M=...' to build livepatch patch module.
> >
> > Add extra-y to targets-for-modules so that such kind of build works
> > properly.
> >
> > Signed-off-by: WANG Chao <[email protected]>
> > ---
> > scripts/Makefile.build | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/scripts/Makefile.build b/scripts/Makefile.build
> > index ae647379b579..0113a042d643 100644
> > --- a/scripts/Makefile.build
> > +++ b/scripts/Makefile.build
> > @@ -86,7 +86,7 @@ ifdef need-builtin
> > targets-for-builtin += $(obj)/built-in.a
> > endif
> >
> > -targets-for-modules := $(patsubst %.o, %.mod, $(filter %.o, $(obj-m)))
> > +targets-for-modules := $(extra-y) $(patsubst %.o, %.mod, $(filter %.o,
> > $(obj-m)))
> >
> > ifdef need-modorder
> > targets-for-modules += $(obj)/modules.order
> > --
> > 2.29.1
> >
>
> NACK.
>
> Please fix your Makefile.
>
> Hint:
> https://patchwork.kernel.org/project/linux-kbuild/patch/[email protected]/
>
>
> Probably what you should use is 'targets'.
I tried with 'targets' and 'always-y'. Both doesn't work for me.
I narraw it down to the following example:
cat > Makefile << _EOF_
obj-m += foo.o
ldflags-y += -T $(src)/kpatch.lds
always-y += kpatch.lds
foo-objs += bar.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD)
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
_EOF_
Take a look into scripts/Makefile.build:488:
__build: $(if $(KBUILD_BUILTIN), $(targets-for-builtin)) \
$(if $(KBUILD_MODULES), $(targets-for-modules)) \
$(subdir-ym) $(always-y)
@:
'always-y' is built after 'targets-for-modules'. This makes
'targets-for-modules' fails because kpatch.lds isn't there.
For 'targets', in case of OOT, does not seem to be useful.
What change do you suggest to make to fix this kind of Makefile?
Thanks,
WANG Chao