On 11/23/20 at 02:23P, Masahiro Yamada wrote: > On Tue, Nov 3, 2020 at 3:23 PM WANG Chao <chao.wang@xxxxxxxxx> 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 <chao.wang@xxxxxxxxx> > > --- > > 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/20201123045403.63402-6-masahiroy@xxxxxxxxxx/ > > > 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