Re: [PATCH v2 05/11] kbuild: change working directory to external module directory with M=

From: Masahiro Yamada
Date: Wed Dec 04 2024 - 21:34:53 EST


On Thu, Dec 5, 2024 at 5:51 AM Alison Schofield
<alison.schofield@xxxxxxxxx> wrote:
>
> On Sun, Nov 10, 2024 at 10:34:33AM +0900, Masahiro Yamada wrote:
> > Currently, Kbuild always operates in the output directory of the kernel,
> > even when building external modules. This increases the risk of external
> > module Makefiles attempting to write to the kernel directory.
> >
> > This commit switches the working directory to the external module
> > directory, allowing the removal of the $(KBUILD_EXTMOD)/ prefix from
> > some build artifacts.
> >
> > The command for building external modules maintains backward
> > compatibility, but Makefiles that rely on working in the kernel
> > directory may break. In such cases, $(objtree) and $(srctree) should
> > be used to refer to the output and source directories of the kernel.
> >
> > The appearance of the build log will change as follows:
> >
> > [Before]
> >
> > $ make -C /path/to/my/linux M=/path/to/my/externel/module
> > make: Entering directory '/path/to/my/linux'
> > CC [M] /path/to/my/externel/module/helloworld.o
> > MODPOST /path/to/my/externel/module/Module.symvers
> > CC [M] /path/to/my/externel/module/helloworld.mod.o
> > CC [M] /path/to/my/externel/module/.module-common.o
> > LD [M] /path/to/my/externel/module/helloworld.ko
> > make: Leaving directory '/path/to/my/linux'
> >
> > [After]
> >
> > $ make -C /path/to/my/linux M=/path/to/my/externel/module
> > make: Entering directory '/path/to/my/linux'
> > make[1]: Entering directory '/path/to/my/externel/module'
> > CC [M] helloworld.o
> > MODPOST Module.symvers
> > CC [M] helloworld.mod.o
> > CC [M] .module-common.o
> > LD [M] helloworld.ko
> > make[1]: Leaving directory '/path/to/my/externel/module'
> > make: Leaving directory '/path/to/my/linux'
> >
> > Printing "Entering directory" twice is cumbersome. This will be
> > addressed later.
> >
> > Signed-off-by: Masahiro Yamada <masahiroy@xxxxxxxxxx>
> > ---
>
> With this in v6.13-rc1 the cxl-test module fails depmod.
> It causes depmod to be invoked from the incorrect place
> (or something doesn't respect INSTALL_MOD_PATH)
>
> Is there something additional that this cxl-test module needs
> to do?
>
> Repro:
> /git/new$ make V=1 M=tools/testing/cxl INSTALL_MOD_PATH=qbuild/mkosi.extra/ modules_install

Kbuild changes the working directory, so you need to specify
an absolute path for INSTALL_MOD_PATH.

INSTALL_MOD_PATH=$(realpath qbuild/mkosi.extra/)




--
Best Regards
Masahiro Yamada