Re: [PATCH] kbuild: Use symbolic link to the source tree for out-of-tree build

From: Michal Marek
Date: Tue Aug 05 2014 - 11:55:48 EST


On 2014-07-09 11:25, Masahiro Yamada wrote:
> Hi Michal,
>
>
> On Wed, 09 Jul 2014 10:59:59 +0200
> Michal Marek <mmarek@xxxxxxx> wrote:
>
>> On 2014-07-09 08:27, Masahiro Yamada wrote:
>>> Since commit 9da0763bd, the variable 'srctree' is set as follows:
>>>
>>> [1] Building in the source tree
>>> => srctree is set to '.'
>>> [2] Building in a subdir right under the source tree
>>> => srctree is set to '..'
>>> [3] Other cases
>>> => srctree is set to the absolute path to the source tree
>>>
>>> Pros are more readable compiler messages, WARN_ON() etc.
>>> for case [1] and [2]. (but not [3])
>>>
>>> Cons are we have to do build-test for 3 cases when adding
>>> some changes to the build infrastructure.
>>>
>>> We want to treat case [2] and [3] in the same way like prior to
>>> commit 9da0763bd, keeping the compact log messages.
>>>
>>> The idea here is to create a symbolic link 'srctree' pointing
>>> to $(KBUILD_SRC) at the very early stage of the build process.
>>
>> If the symlink points to an absolute path, then you can't move the
>> source and build tree around anymore.
>
>
> In which cases do we need to do this?

Sorry for the late response.

You might want to nfs-export the build and source tree and mount it on a
different machine. Up to 3.16, one had to make sure that the paths match
on both machines. 3.16 removes this limitation.


> Anyway, even if we move the source and build tree around,
> it is much faster to rebuild it.
>
> The point here is that the absolute paths do not appear
> in .*.cmd files.

If you either do not use O= or use O=<subdir>, then there won't be any
absolute paths either. It could be extended to handle
O=subdir1/subdir1/... if needed.


> For example,
>
> $ make O=foo/bar defconfig all
> [ full build ]
> $ cd ..
> $ mkdir baz
> $ move linux baz
> $ cd baz/linux
> $ make O=foo/bar
> [ much faster re-build ]

I now noticed that the patch unconditionally recreates the symlink on
every make O= invocation. While this nicely fixes the problem with moved
build directory, it also means that a 'make O=... modules_install' ran
as root will try to recreate the symlink. This will fail on nfs. So I'd
rather keep the current logic with $(SRCTREE) containing either an
absolute or relative path.

Michal
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/