Skip to contentSkip to conversation

iio: Use type header from kernel tree

PATCH In review Laura Abbott 3 participants 5 messages Sep 9, 2016 – Sep 12, 2016 IIO

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 iio: Use type header from kernel tree

The iio tools have been updated as new event types have been added to the kernel. The tools currently use the standard system headers which means that the system may not have the newest defintitions. This leads to build failures when building newer tools on older hosts:

gcc -Wall -g -D_GNU_SOURCE -c -o iio_event_monitor.o
iio_event_monitor.c
iio_event_monitor.c:59:3: error: ‘IIO_UVINDEX’ undeclared here (not in a function)
[IIO_UVINDEX] = "uvindex",
^~~~~~~~~~~
iio_event_monitor.c:59:3: error: array index in initializer not of integer type
iio_event_monitor.c:59:3: note: (near initialization for ‘iio_chan_type_name_spec’)
iio_event_monitor.c:97:3: error: ‘IIO_MOD_LIGHT_UV’ undeclared here (not in a function)
[IIO_MOD_LIGHT_UV] = "uv",
^~~~~~~~~~~~~~~~
iio_event_monitor.c:97:3: error: array index in initializer not of integer type
iio_event_monitor.c:97:3: note: (near initialization for ‘iio_modifier_names’)
<builtin>: recipe for target 'iio_event_monitor.o' failed

Switch to using the header from the kernel tree to ensure the newest defintions are always picked up.

---
 tools/iio/iio_event_monitor.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
tools/iio/iio_event_monitor.c +1 -1
index d9b7e0f..f02523d 100644
@@ -26,7 +26,7 @@
 #include <sys/ioctl.h>
 #include "iio_utils.h"
 #include <linux/iio/events.h>
-#include <linux/iio/types.h>
+#include "../../include/uapi/linux/iio/types.h"
 
 static const char * const iio_chan_type_name_spec[] = {
 	[IIO_VOLTAGE] = "voltage",
Signature · 1 line
2.7.4
#1 lore raw
Quoted 9 lines · Laura Abbott

The iio tools have been updated as new event types have been added to the kernel. The tools currently use the standard system headers which means that the system may not have the newest defintitions. This leads to build failures when building newer tools on older hosts:

gcc -Wall -g -D_GNU_SOURCE -c -o iio_event_monitor.o
iio_event_monitor.c
iio_event_monitor.c:59:3: error: =E2=80=98IIO_UVINDEX=E2=80=99 undeclared=

here (not in a

Quoted 8 lines

function)
[IIO_UVINDEX] =3D "uvindex",
^~~~~~~~~~~
iio_event_monitor.c:59:3: error: array index in initializer not of integer type
iio_event_monitor.c:59:3: note: (near initialization for =E2=80=98iio_chan_type_name_spec=E2=80=99) iio_event_monitor.c:97:3: error: =E2=80=98IIO_MOD_LIGHT_UV=E2=80=99 undec=

lared here (not

Quoted 9 lines

in a function)
[IIO_MOD_LIGHT_UV] =3D "uv",
^~~~~~~~~~~~~~~~
iio_event_monitor.c:97:3: error: array index in initializer not of integer type
iio_event_monitor.c:97:3: note: (near initialization for =E2=80=98iio_modifier_names=E2=80=99)
<builtin>: recipe for target 'iio_event_monitor.o' failed

Quoted 4 lines

Switch to using the header from the kernel tree to ensure the newest defintions are always picked up.

Hi Laura,

Thanks for your patch. The solution here would be to install the headers for your
new kernel in order to use the updated types.

That is you should run make headers_install.

$ make help | grep headers
  headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH

You can use INSTALL_HDR_PATH to put the headers in a custom directory and tell gcc to also include this directory when searching for include head= ers.

Daniel.

#2 lore raw
Quoted 38 lines · Daniel Baluta
Quoted 26 lines · Laura Abbott

The iio tools have been updated as new event types have been added to the kernel. The tools currently use the standard system headers which means that the system may not have the newest defintitions. This leads to build failures when building newer tools on older hosts:

gcc -Wall -g -D_GNU_SOURCE -c -o iio_event_monitor.o
iio_event_monitor.c
iio_event_monitor.c:59:3: error: ‘IIO_UVINDEX’ undeclared here (not in a function)
[IIO_UVINDEX] = "uvindex",
^~~~~~~~~~~
iio_event_monitor.c:59:3: error: array index in initializer not of integer type
iio_event_monitor.c:59:3: note: (near initialization for ‘iio_chan_type_name_spec’)
iio_event_monitor.c:97:3: error: ‘IIO_MOD_LIGHT_UV’ undeclared here (not in a function)
[IIO_MOD_LIGHT_UV] = "uv",
^~~~~~~~~~~~~~~~
iio_event_monitor.c:97:3: error: array index in initializer not of integer type
iio_event_monitor.c:97:3: note: (near initialization for ‘iio_modifier_names’)
<builtin>: recipe for target 'iio_event_monitor.o' failed

Quoted 4 lines

Switch to using the header from the kernel tree to ensure the newest defintions are always picked up.

Hi Laura,

Thanks for your patch. The solution here would be to install the headers for your
new kernel in order to use the updated types.

Quoted 8 lines

That is you should run make headers_install.

$ make help | grep headers
  headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH

You can use INSTALL_HDR_PATH to put the headers in a custom directory and tell gcc to also include this directory when searching for include headers.

That's a pretty ugly solution. We want to build this as part of Fedora and installing another local copy of the headers in the build environment complicates an already complicated build process. This is more work for users building on their own as well. Several other tools in the tools directory already use the headers from the kernel tree, is there a reason iio doesn't want to as well?

Thanks,
Laura

maintainer
#3 lore raw
Quoted 48 lines · Laura Abbott
Quoted 38 lines · Daniel Baluta
Quoted 26 lines · Laura Abbott

The iio tools have been updated as new event types have been added to the kernel. The tools currently use the standard system headers which means that the system may not have the newest defintitions. This leads to build failures when building newer tools on older hosts:

gcc -Wall -g -D_GNU_SOURCE -c -o iio_event_monitor.o
iio_event_monitor.c
iio_event_monitor.c:59:3: error: ‘IIO_UVINDEX’ undeclared here (not in a function)
[IIO_UVINDEX] = "uvindex",
^~~~~~~~~~~
iio_event_monitor.c:59:3: error: array index in initializer not of integer type
iio_event_monitor.c:59:3: note: (near initialization for ‘iio_chan_type_name_spec’)
iio_event_monitor.c:97:3: error: ‘IIO_MOD_LIGHT_UV’ undeclared here (not in a function)
[IIO_MOD_LIGHT_UV] = "uv",
^~~~~~~~~~~~~~~~
iio_event_monitor.c:97:3: error: array index in initializer not of integer type
iio_event_monitor.c:97:3: note: (near initialization for ‘iio_modifier_names’)
<builtin>: recipe for target 'iio_event_monitor.o' failed

Quoted 4 lines

Switch to using the header from the kernel tree to ensure the newest defintions are always picked up.

Hi Laura,

Thanks for your patch. The solution here would be to install the headers for your
new kernel in order to use the updated types.

Quoted 8 lines

That is you should run make headers_install.

$ make help | grep headers
  headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH

You can use INSTALL_HDR_PATH to put the headers in a custom directory and tell gcc to also include this directory when searching for include headers.

Quoted 6 lines

That's a pretty ugly solution. We want to build this as part of Fedora and installing another local copy of the headers in the build environment complicates an already complicated build process. This is more work for users building on their own as well. Several other tools in the tools directory already use the headers from the kernel tree, is there a reason iio doesn't want to as well?

This got raised as a suggestion for discussion at the kernel summit this year. Clearly a somewhat contentious topic ;)

https://lists.linuxfoundation.org/pipermail/ksummit-discuss/2016-September/003829.html

I'd prefer to see some resolution on that discussion before making any changes. Looks like there are some moves afoot to standardise a lot of this stuff in tools.

I've cc'd Ben who raised this particular issue in the first place.

Jonathan

Quoted 3 lines

Thanks,
Laura

#4 lore raw
Quoted 58 lines · Jonathan Cameron
Quoted 48 lines · Laura Abbott
Quoted 38 lines · Daniel Baluta
Quoted 26 lines · Laura Abbott

The iio tools have been updated as new event types have been added to the kernel. The tools currently use the standard system headers which means that the system may not have the newest defintitions. This leads to build failures when building newer tools on older hosts:

gcc -Wall -g -D_GNU_SOURCE -c -o iio_event_monitor.o
iio_event_monitor.c
iio_event_monitor.c:59:3: error: ‘IIO_UVINDEX’ undeclared here (not in a function)
[IIO_UVINDEX] = "uvindex",
^~~~~~~~~~~
iio_event_monitor.c:59:3: error: array index in initializer not of integer type
iio_event_monitor.c:59:3: note: (near initialization for ‘iio_chan_type_name_spec’)
iio_event_monitor.c:97:3: error: ‘IIO_MOD_LIGHT_UV’ undeclared here (not in a function)
[IIO_MOD_LIGHT_UV] = "uv",
^~~~~~~~~~~~~~~~
iio_event_monitor.c:97:3: error: array index in initializer not of integer type
iio_event_monitor.c:97:3: note: (near initialization for ‘iio_modifier_names’)
<builtin>: recipe for target 'iio_event_monitor.o' failed

Quoted 4 lines

Switch to using the header from the kernel tree to ensure the newest defintions are always picked up.

Hi Laura,

Thanks for your patch. The solution here would be to install the headers for your
new kernel in order to use the updated types.

Quoted 8 lines

That is you should run make headers_install.

$ make help | grep headers
  headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH

You can use INSTALL_HDR_PATH to put the headers in a custom directory and tell gcc to also include this directory when searching for include headers.

Quoted 6 lines

That's a pretty ugly solution. We want to build this as part of Fedora and installing another local copy of the headers in the build environment complicates an already complicated build process. This is more work for users building on their own as well. Several other tools in the tools directory already use the headers from the kernel tree, is there a reason iio doesn't want to as well?

This got raised as a suggestion for discussion at the kernel summit this year. Clearly a somewhat contentious topic ;)

Quoted 8 lines

https://lists.linuxfoundation.org/pipermail/ksummit-discuss/2016-September/003829.html

I'd prefer to see some resolution on that discussion before making any changes. Looks like there are some moves afoot to standardise a lot of this stuff in tools.

I've cc'd Ben who raised this particular issue in the first place.

Yes, some consistency would be useful across all tools. I really just want 'make' to work on all the tools directories without having to worry about what kernel/headers are installed. I'll be around ksummit/plumbers so I'm happy to talk more there.

Thanks,
Laura

Quoted 5 lines

Jonathan

Quoted 3 lines

Thanks,
Laura