diff mbox series

[21/23] kbuild: use absolute path in the generated wrapper Makefile

Message ID 20240917141725.466514-22-masahiroy@kernel.org (mailing list archive)
State New
Headers show
Series kbuild: support building external modules in a separate build directory | expand

Commit Message

Masahiro Yamada Sept. 17, 2024, 2:16 p.m. UTC
Keep the consistent behavior when this Makefile is invoked from another
directory.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---

 Makefile | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Comments

Nicolas Schier Oct. 4, 2024, 7:02 p.m. UTC | #1
On Tue, Sep 17, 2024 at 11:16:49PM +0900, Masahiro Yamada wrote:
> Keep the consistent behavior when this Makefile is invoked from another
> directory.
> 
> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
> ---
> 
>  Makefile | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)

Reviewed-by: Nicolas Schier <nicolas@fjasle.eu>
Caleb Connolly Nov. 29, 2024, 11:31 p.m. UTC | #2
Hi Masahiro,

On 9/17/24 16:16, Masahiro Yamada wrote:
> Keep the consistent behavior when this Makefile is invoked from another
> directory.

This breaks building in a chroot for me. I usually compile the kernel on 
my host and then use some tooling to just run the "package" step of an 
Alpine kernel package definition. See

https://wiki.postmarketos.org/wiki/Compiling_kernels_with_envkernel.sh#Packaging_kernels_built_without_envkernel

Since this requires mounting the source directory into a chroot, and 
then symlinking the output directory to the package "src" dir. It relies 
on the fact that make can be run from the output directory and 
implicitly relies on the include being relative since the absolute paths 
don't map inside the chroot.

I'm not sure if breakages like this justify a revert, but I noticed this 
issue in -next the other day and thought it was at least worth reporting.

I wouldn't be surprised if other folks with other build systems get 
bitten by this too.

Kind regards,
Caleb
> 
> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
> ---
> 
>   Makefile | 5 +++--
>   1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index ce646a6994a6..9f0ba07e8f25 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -643,8 +643,9 @@ ifdef building_out_of_srctree
>   
>   quiet_cmd_makefile = GEN     Makefile
>         cmd_makefile = { \
> -	echo "\# Automatically generated by $(srctree)/Makefile: don't edit"; \
> -	echo "include $(srctree)/Makefile"; \
> +	echo "\# Automatically generated by $(abs_srctree)/Makefile: don't edit"; \
> +	echo "export KBUILD_OUTPUT = $(CURDIR)"; \
> +	echo "include $(abs_srctree)/Makefile"; \
>   	} > Makefile
>   
>   outputmakefile:
Masahiro Yamada Nov. 30, 2024, 9:19 a.m. UTC | #3
On Sat, Nov 30, 2024 at 8:31 AM Caleb Connolly
<caleb.connolly@linaro.org> wrote:
>
> Hi Masahiro,
>
> On 9/17/24 16:16, Masahiro Yamada wrote:
> > Keep the consistent behavior when this Makefile is invoked from another
> > directory.
>
> This breaks building in a chroot for me. I usually compile the kernel on
> my host and then use some tooling to just run the "package" step of an
> Alpine kernel package definition. See
>
> https://wiki.postmarketos.org/wiki/Compiling_kernels_with_envkernel.sh#Packaging_kernels_built_without_envkernel
>
> Since this requires mounting the source directory into a chroot, and
> then symlinking the output directory to the package "src" dir. It relies
> on the fact that make can be run from the output directory and
> implicitly relies on the include being relative since the absolute paths
> don't map inside the chroot.


I do not understand what is happening in your workflow, but presumably
you need to come up with a solution on your end (or in the pmos community).

 - Kbuild never promised that $(srctree) is always a relative path.
   $(srctree) is relative only when building in-tree (srctree=.)
   or when the output directory is a sub-directory of the source tree.
    (srctree=..) For other cases, $(srctree) is an absolute path.
   Therefore, "include directive with an absolute path" is not something new.

 - The wrapper Makefile generated in the output directory
   is a bonus convenience for humans. It is not even required
   to build the kernel from scripts.

Your report seems like a jungle of a chroot and mounts with a symlink.
I guess it just happened to work, relying on something Kbuild did not support.


>
> I'm not sure if breakages like this justify a revert, but I noticed this
> issue in -next the other day and thought it was at least worth reporting.


Thanks for the report, but I do not think this is worth a revert
for the above reasons.


> I wouldn't be surprised if other folks with other build systems get
> bitten by this too.
>
> Kind regards,
> Caleb
> >
> > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
> > ---
> >
> >   Makefile | 5 +++--
> >   1 file changed, 3 insertions(+), 2 deletions(-)
> >
> > diff --git a/Makefile b/Makefile
> > index ce646a6994a6..9f0ba07e8f25 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -643,8 +643,9 @@ ifdef building_out_of_srctree
> >
> >   quiet_cmd_makefile = GEN     Makefile
> >         cmd_makefile = { \
> > -     echo "\# Automatically generated by $(srctree)/Makefile: don't edit"; \
> > -     echo "include $(srctree)/Makefile"; \
> > +     echo "\# Automatically generated by $(abs_srctree)/Makefile: don't edit"; \
> > +     echo "export KBUILD_OUTPUT = $(CURDIR)"; \
> > +     echo "include $(abs_srctree)/Makefile"; \
> >       } > Makefile
> >
> >   outputmakefile:
>
diff mbox series

Patch

diff --git a/Makefile b/Makefile
index ce646a6994a6..9f0ba07e8f25 100644
--- a/Makefile
+++ b/Makefile
@@ -643,8 +643,9 @@  ifdef building_out_of_srctree
 
 quiet_cmd_makefile = GEN     Makefile
       cmd_makefile = { \
-	echo "\# Automatically generated by $(srctree)/Makefile: don't edit"; \
-	echo "include $(srctree)/Makefile"; \
+	echo "\# Automatically generated by $(abs_srctree)/Makefile: don't edit"; \
+	echo "export KBUILD_OUTPUT = $(CURDIR)"; \
+	echo "include $(abs_srctree)/Makefile"; \
 	} > Makefile
 
 outputmakefile: