diff mbox

tools: iio: add ability to pass kernel headers

Message ID d5f344548931389ea4598be946bdc28af1790cc9.1491908438.git.nsekhar@ti.com
State New
Headers show

Commit Message

Sekhar Nori April 11, 2017, 11:06 a.m. UTC
Very often, especially when cross compiling, there is a need
to pass kernel headers different from those installed on the
build machine.

Add support for doing this for iio utils by using the
'INSTALL_HDR_PATH' environment variable. This is supported by
'make headers_install' for installing kernel headers at a
user specified location. So you will do:

$ make headers_install ARCH=arm INSTALL_HDR_PATH=<absolute-path>
$ make -C tools/iio ARCH=arm INSTALL_HDR_PATH=<absolute-path>

Signed-off-by: Sekhar Nori <nsekhar@ti.com>

---
 tools/iio/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

-- 
2.9.0

Comments

Jonathan Cameron April 14, 2017, 2:42 p.m. UTC | #1
On 11/04/17 12:06, Sekhar Nori wrote:
> Very often, especially when cross compiling, there is a need

> to pass kernel headers different from those installed on the

> build machine.

> 

> Add support for doing this for iio utils by using the

> 'INSTALL_HDR_PATH' environment variable. This is supported by

> 'make headers_install' for installing kernel headers at a

> user specified location. So you will do:

> 

> $ make headers_install ARCH=arm INSTALL_HDR_PATH=<absolute-path>

> $ make -C tools/iio ARCH=arm INSTALL_HDR_PATH=<absolute-path>

> 

> Signed-off-by: Sekhar Nori <nsekhar@ti.com>


It's a bit of an oddity as that usually refers to where to put
the headers rather than where they are.

Is there a more general solution?  I couldn't find anything
particularly consistent in tools.
> ---

>  tools/iio/Makefile | 2 +-

>  1 file changed, 1 insertion(+), 1 deletion(-)

> 

> diff --git a/tools/iio/Makefile b/tools/iio/Makefile

> index 5446d625e17d..75607043d6e2 100644

> --- a/tools/iio/Makefile

> +++ b/tools/iio/Makefile

> @@ -1,5 +1,5 @@

>  CC = $(CROSS_COMPILE)gcc

> -CFLAGS += -Wall -g -D_GNU_SOURCE

> +CFLAGS += -Wall -g -D_GNU_SOURCE -I$(INSTALL_HDR_PATH)/include

>  

>  BINDIR=usr/bin

>  INSTALL_PROGRAM=install -m 755 -p

>
Randy Dunlap April 14, 2017, 3:23 p.m. UTC | #2
On 04/14/17 07:42, Jonathan Cameron wrote:
> On 11/04/17 12:06, Sekhar Nori wrote:

>> Very often, especially when cross compiling, there is a need

>> to pass kernel headers different from those installed on the

>> build machine.

>>

>> Add support for doing this for iio utils by using the

>> 'INSTALL_HDR_PATH' environment variable. This is supported by

>> 'make headers_install' for installing kernel headers at a

>> user specified location. So you will do:

>>

>> $ make headers_install ARCH=arm INSTALL_HDR_PATH=<absolute-path>

>> $ make -C tools/iio ARCH=arm INSTALL_HDR_PATH=<absolute-path>

>>

>> Signed-off-by: Sekhar Nori <nsekhar@ti.com>

> 

> It's a bit of an oddity as that usually refers to where to put

> the headers rather than where they are.

> 

> Is there a more general solution?  I couldn't find anything

> particularly consistent in tools.


Whatever the solution is, it should be used for all tools/, not just iio.

>> ---

>>  tools/iio/Makefile | 2 +-

>>  1 file changed, 1 insertion(+), 1 deletion(-)



-- 
~Randy
Jonathan Cameron April 14, 2017, 3:23 p.m. UTC | #3
On 14/04/17 16:23, Randy Dunlap wrote:
> On 04/14/17 07:42, Jonathan Cameron wrote:

>> On 11/04/17 12:06, Sekhar Nori wrote:

>>> Very often, especially when cross compiling, there is a need

>>> to pass kernel headers different from those installed on the

>>> build machine.

>>>

>>> Add support for doing this for iio utils by using the

>>> 'INSTALL_HDR_PATH' environment variable. This is supported by

>>> 'make headers_install' for installing kernel headers at a

>>> user specified location. So you will do:

>>>

>>> $ make headers_install ARCH=arm INSTALL_HDR_PATH=<absolute-path>

>>> $ make -C tools/iio ARCH=arm INSTALL_HDR_PATH=<absolute-path>

>>>

>>> Signed-off-by: Sekhar Nori <nsekhar@ti.com>

>>

>> It's a bit of an oddity as that usually refers to where to put

>> the headers rather than where they are.

>>

>> Is there a more general solution?  I couldn't find anything

>> particularly consistent in tools.

> 

> Whatever the solution is, it should be used for all tools/, not just iio.

> 

Agreed!
>>> ---

>>>  tools/iio/Makefile | 2 +-

>>>  1 file changed, 1 insertion(+), 1 deletion(-)

> 

>
Sekhar Nori April 18, 2017, 10:12 a.m. UTC | #4
Hi Jonathan, Randy,

On Friday 14 April 2017 08:53 PM, Jonathan Cameron wrote:
> On 14/04/17 16:23, Randy Dunlap wrote:

>> On 04/14/17 07:42, Jonathan Cameron wrote:

>>> On 11/04/17 12:06, Sekhar Nori wrote:

>>>> Very often, especially when cross compiling, there is a need

>>>> to pass kernel headers different from those installed on the

>>>> build machine.

>>>>

>>>> Add support for doing this for iio utils by using the

>>>> 'INSTALL_HDR_PATH' environment variable. This is supported by

>>>> 'make headers_install' for installing kernel headers at a

>>>> user specified location. So you will do:

>>>>

>>>> $ make headers_install ARCH=arm INSTALL_HDR_PATH=<absolute-path>

>>>> $ make -C tools/iio ARCH=arm INSTALL_HDR_PATH=<absolute-path>

>>>>

>>>> Signed-off-by: Sekhar Nori <nsekhar@ti.com>

>>>

>>> It's a bit of an oddity as that usually refers to where to put

>>> the headers rather than where they are.

>>>

>>> Is there a more general solution?  I couldn't find anything

>>> particularly consistent in tools.

>>

>> Whatever the solution is, it should be used for all tools/, not just iio.

>>

> Agreed!


Alright, I will try to come up with something more generic and post
another version.

Thanks,
Sekhar
Sekhar Nori April 20, 2017, 1:53 p.m. UTC | #5
On Tuesday 18 April 2017 03:42 PM, Sekhar Nori wrote:
> Hi Jonathan, Randy,

> 

> On Friday 14 April 2017 08:53 PM, Jonathan Cameron wrote:

>> On 14/04/17 16:23, Randy Dunlap wrote:

>>> On 04/14/17 07:42, Jonathan Cameron wrote:

>>>> On 11/04/17 12:06, Sekhar Nori wrote:

>>>>> Very often, especially when cross compiling, there is a need

>>>>> to pass kernel headers different from those installed on the

>>>>> build machine.

>>>>>

>>>>> Add support for doing this for iio utils by using the

>>>>> 'INSTALL_HDR_PATH' environment variable. This is supported by

>>>>> 'make headers_install' for installing kernel headers at a

>>>>> user specified location. So you will do:

>>>>>

>>>>> $ make headers_install ARCH=arm INSTALL_HDR_PATH=<absolute-path>

>>>>> $ make -C tools/iio ARCH=arm INSTALL_HDR_PATH=<absolute-path>

>>>>>

>>>>> Signed-off-by: Sekhar Nori <nsekhar@ti.com>

>>>>

>>>> It's a bit of an oddity as that usually refers to where to put

>>>> the headers rather than where they are.

>>>>

>>>> Is there a more general solution?  I couldn't find anything

>>>> particularly consistent in tools.

>>>

>>> Whatever the solution is, it should be used for all tools/, not just iio.

>>>

>> Agreed!

> 

> Alright, I will try to come up with something more generic and post

> another version.


I have been looking at this, and coming up with something generic is
more complicated than I thought. The problem is the flexibility thats
allowed in building many of the tools. For example, you can build the
led tools using any of these three methods:

$ make -C <kernelsrcdir> tools/leds
$ make -C <kernelsrcdir>/tools leds
$ make -C <kernelsrcdir>/tools/leds

The last one is specifically complicated because it totally bypasses all
top level makefiles. I think adding dependency with a top level makefile
will be a step backwards at least for leds.

Currently the leds makefile adds '-I../../include/uapi' to CFLAGS to
access the latest kernel headers. Something similar is done for some
other tools too. This makes it work for all the build cases above. I
propose we do something similar for iio too.

Thanks,
Sekhar
Randy Dunlap April 20, 2017, 3:27 p.m. UTC | #6
On 04/20/17 06:53, Sekhar Nori wrote:
> On Tuesday 18 April 2017 03:42 PM, Sekhar Nori wrote:

>> Hi Jonathan, Randy,

>>

>> On Friday 14 April 2017 08:53 PM, Jonathan Cameron wrote:

>>> On 14/04/17 16:23, Randy Dunlap wrote:

>>>> On 04/14/17 07:42, Jonathan Cameron wrote:

>>>>> On 11/04/17 12:06, Sekhar Nori wrote:

>>>>>> Very often, especially when cross compiling, there is a need

>>>>>> to pass kernel headers different from those installed on the

>>>>>> build machine.

>>>>>>

>>>>>> Add support for doing this for iio utils by using the

>>>>>> 'INSTALL_HDR_PATH' environment variable. This is supported by

>>>>>> 'make headers_install' for installing kernel headers at a

>>>>>> user specified location. So you will do:

>>>>>>

>>>>>> $ make headers_install ARCH=arm INSTALL_HDR_PATH=<absolute-path>

>>>>>> $ make -C tools/iio ARCH=arm INSTALL_HDR_PATH=<absolute-path>

>>>>>>

>>>>>> Signed-off-by: Sekhar Nori <nsekhar@ti.com>

>>>>>

>>>>> It's a bit of an oddity as that usually refers to where to put

>>>>> the headers rather than where they are.

>>>>>

>>>>> Is there a more general solution?  I couldn't find anything

>>>>> particularly consistent in tools.

>>>>

>>>> Whatever the solution is, it should be used for all tools/, not just iio.

>>>>

>>> Agreed!

>>

>> Alright, I will try to come up with something more generic and post

>> another version.

> 

> I have been looking at this, and coming up with something generic is

> more complicated than I thought. The problem is the flexibility thats

> allowed in building many of the tools. For example, you can build the

> led tools using any of these three methods:

> 

> $ make -C <kernelsrcdir> tools/leds

> $ make -C <kernelsrcdir>/tools leds

> $ make -C <kernelsrcdir>/tools/leds

> 

> The last one is specifically complicated because it totally bypasses all

> top level makefiles. I think adding dependency with a top level makefile

> will be a step backwards at least for leds.

> 

> Currently the leds makefile adds '-I../../include/uapi' to CFLAGS to

> access the latest kernel headers. Something similar is done for some

> other tools too. This makes it work for all the build cases above. I

> propose we do something similar for iio too.


Thanks for diving into all of that.  I am not surprised at
what you have found.

I believe that you can go ahead with your iio proposal.


-- 
~Randy
diff mbox

Patch

diff --git a/tools/iio/Makefile b/tools/iio/Makefile
index 5446d625e17d..75607043d6e2 100644
--- a/tools/iio/Makefile
+++ b/tools/iio/Makefile
@@ -1,5 +1,5 @@ 
 CC = $(CROSS_COMPILE)gcc
-CFLAGS += -Wall -g -D_GNU_SOURCE
+CFLAGS += -Wall -g -D_GNU_SOURCE -I$(INSTALL_HDR_PATH)/include
 
 BINDIR=usr/bin
 INSTALL_PROGRAM=install -m 755 -p