Re: [PATCH] kbuild: do not add srctree to sysroot relative includes

From: Lars Persson
Date: Tue Aug 16 2016 - 08:22:50 EST




On 08/16/2016 01:59 PM, Michal Marek wrote:
On 2016-08-16 13:40, Lars Persson wrote:
We need to filter out also -I=/path to allow sysroot relative
include paths in the makefiles of external modules.

Signed-off-by: Lars Persson <larper@xxxxxxxx>
---
scripts/Kbuild.include | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
index 1792198..ffe5c6c 100644
--- a/scripts/Kbuild.include
+++ b/scripts/Kbuild.include
@@ -206,7 +206,7 @@ hdr-inst := -f $(srctree)/scripts/Makefile.headersinst obj
# Prefix -I with $(srctree) if it is not an absolute path.
# skip if -I has no parameter
addtree = $(if $(patsubst -I%,%,$(1)), \
-$(if $(filter-out -I/% -I./% -I../%,$(1)),$(patsubst -I%,-I$(srctree)/%,$(1)),$(1)))
+$(if $(filter-out -I/% -I./% -I../% -I=%,$(1)),$(patsubst -I%,-I$(srctree)/%,$(1)),$(1)))

Hi Lars,

Two questions: 1) Where is the -I=/... syntax documented? I could not
find it gcc docs.

You should find this in your gcc manual:
If dir begins with "=", then the "=" will be replaced by the sysroot prefix; see --sysroot and -isysroot.


2) Why do these Makefiles use --sysroot at all? The
kernel does not use any system libraries and the host programs are
compiled for the host architecture.

One use-case is with the yocto build system. Suppose we have two kernel modules A and B. A installs header files into the sysroot that B will include.


- Lars