Re: kbuild: support of new KBUILD_FULL_PATH

From: Michal Marek
Date: Thu Jun 19 2014 - 06:41:49 EST


On 2014-06-19 12:12, Boaz Harrosh wrote:
>
> The commit:
>
> commit 9da0763bdd82572be243fcf5161734f11568960f
> Author: Michal Marek <mmarek@xxxxxxx>
> Date: Fri Apr 25 23:25:18 2014 +0200
>
> kbuild: Use relative path when building in a subdir of the source tree
>
> When doing make O=<subdir>, use '..' to refer to the source tree. This
> allows for more readable compiler messages, and, more importantly, it
> sets the VPATH to '..', so filenames in WARN_ON() etc. will be shorter.
>
> Acked-by: Sam Ravnborg <sam@xxxxxxxxxxxx>
> Signed-off-by: Michal Marek <mmarek@xxxxxxx>
>
> Broke IDEs and other tools which analyze the make output.
> Introduce a new KBUILD_FULL_PATH switch to Makefile that will revert
> to the old output if KBUILD_FULL_PATH=1 is specified.
> The default is KBUILD_FULL_PATH=0

Parsing make output is a use case I did not think of, so the knob seems
inevitable :-/.


> Is there a document I need to edit for this new parameter?

That would be Documentation/kbuild/kbuild.txt


> Signed-off-by: Boaz Harrosh <boaz@xxxxxxxxxxxxx>
> ---
> Makefile | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/Makefile b/Makefile
> index 97b2861..778732a 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -149,11 +149,17 @@ else
> _all: modules
> endif
>
> +# put KBUILD_FULL_PATH=1 if relative path to sources breaks your system
> +ifneq ($(KBUILD_FULL_PATH), 1)
> + KBUILD_FULL_PATH=""
> +endif
> +
> ifeq ($(KBUILD_SRC),)
> # building in the source tree
> srctree := .
> else
> - ifeq ($(KBUILD_SRC)/,$(dir $(CURDIR)))
> + # if KBUILD_FULL_PATH is not empty then condition will fail
> + ifeq ($(KBUILD_FULL_PATH)$(KBUILD_SRC)/,$(dir $(CURDIR)))

This is an ugly way to express the logic.


> # building in a subdirectory of the source tree
> srctree := ..
> else

How about generated sources like asm-offsets.s or the lexer and parser
in scripts/kconfig, does kdevelop figure out where the files live? If
not, you might need to add

-objtree := .
+ifeq ($(KBUILD_FULL_PATH),1)
+ objtree := $(CURDIR)
+else
+ objtree := .
+endif

to use the full path also for the O= directory.

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/