diff mbox

[v2] libiio: new package

Message ID 1411033467-7919-1-git-send-email-paul.cercueil@analog.com
State Changes Requested
Headers show

Commit Message

Paul Cercueil Sept. 18, 2014, 9:44 a.m. UTC
Libiio is a library to ease the development of software interfacing
Linux Industrial I/O (IIO) devices.

http://wiki.analog.com/resources/tools-software/linux-software/libiio

Signed-off-by: Paul Cercueil <paul.cercueil@analog.com>
---
 package/Config.in        |  1 +
 package/libiio/Config.in | 42 ++++++++++++++++++++++++++
 package/libiio/libiio.mk | 76 ++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 119 insertions(+)
 create mode 100644 package/libiio/Config.in
 create mode 100644 package/libiio/libiio.mk

Comments

Thomas Petazzoni Sept. 21, 2014, 7:41 p.m. UTC | #1
Dear Paul Cercueil,

On Thu, 18 Sep 2014 11:44:27 +0200, Paul Cercueil wrote:
> Libiio is a library to ease the development of software interfacing
> Linux Industrial I/O (IIO) devices.
> 
> http://wiki.analog.com/resources/tools-software/linux-software/libiio
> 
> Signed-off-by: Paul Cercueil <paul.cercueil@analog.com>
> ---
>  package/Config.in        |  1 +
>  package/libiio/Config.in | 42 ++++++++++++++++++++++++++
>  package/libiio/libiio.mk | 76 ++++++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 119 insertions(+)
>  create mode 100644 package/libiio/Config.in
>  create mode 100644 package/libiio/libiio.mk

Thanks. However, I tested your package, and it fails to build:

make[1]: entrant dans le répertoire « /home/thomas/projets/buildroot/output/build/libiio-2014_R1/iiod »
install --strip-program=/home/thomas/projets/buildroot/output/host/usr/bin/arm-linux-strip -D -s -m 0755 \
		iiod /home/thomas/projets/buildroot/output/target/usr/sbin/iiod
install -m 0755 iiod.sh /home/thomas/projets/buildroot/output/target/etc/init.d/iiod.sh
update-rc.d iiod.sh defaults 99 01
update-rc.d: /etc/init.d/iiod.sh: file does not exist
make[1]: *** [install] Erreur 1

First, the Makefile should not be calling update-rc.d, and also the
init script in /etc/init.d/ should not be named iiod.sh in Buildroot,
but directly S<number><name>.

Also, is the install command with stripping is not good for Buildroot:
we want to control whether stripping happens or not.


> +# Avahi support in libiio requires avahi-client,
> +# which needs avahi-daemon and dbus
> +ifeq ($(BR2_PACKAGE_AVAHI)$(BR2_PACKAGE_AVAHI_DAEMON)$(BR2_PACKAGE_DBUS),yyy)
> +	LIBIIO_DEPENDENCIES += avahi
> +else
> +	LIBIIO_MAKE_OPTS += WITH_AVAHI=no
> +endif
> +
> +ifneq ($(BR2_PACKAGE_LIBIIO_LOCAL_BACKEND),y)
> +	LIBIIO_MAKE_OPTS += WITH_LOCAL_BACKEND=no
> +endif
> +
> +ifeq ($(BR2_PACKAGE_LIBIIO_NETWORK_BACKEND),y)
> +	LIBIIO_DEPENDENCIES += libxml2
> +else
> +	LIBIIO_MAKE_OPTS += WITH_NETWORK_BACKEND=no
> +endif
> +
> +# Libiio can run without threads
> +ifneq ($(BR2_TOOLCHAIN_HAS_THREADS),y)
> +	LIBIIO_MAKE_OPTS += WITH_PTHREAD=no
> +endif
> +
> +ifeq ($(BR2_PACKAGE_LIBIIO_IIOD),y)
> +define LIBIIO_BUILD_IIOD
> +	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/iiod $(LIBIIO_MAKE_OPTS)
> +endef
> +define LIBIIO_INSTALL_IIOD
> +	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/iiod install \
> +		$(LIBIIO_MAKE_OPTS) DESTDIR=$(TARGET_DIR)
> +endef
> +endif
> +
> +ifeq ($(BR2_PACKAGE_LIBIIO_TESTS),y)
> +define LIBIIO_BUILD_TESTS
> +	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/tests $(LIBIIO_MAKE_OPTS)
> +endef
> +define LIBIIO_INSTALL_TESTS
> +	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/tests install \
> +		$(LIBIIO_MAKE_OPTS) DESTDIR=$(TARGET_DIR)
> +endef
> +endif

Now that I think of it, you could also do:

ifeq ($(BR2_PACKAGE_LIBIIO_IIOD),y)
LIBIIO_MAKE_DIRS += iiod
endif

ifeq ($(BR2_PACKAGE_LIBIIO_TESTS),y)
LIBIIO_MAKE_DIRS += tests
endif

> +define LIBIIO_BUILD_CMDS
> +	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) libiio $(LIBIIO_MAKE_OPTS)
> +	$(LIBIIO_BUILD_IIOD)
> +	$(LIBIIO_BUILD_TESTS)

Replace those last two lines with:

	for d in $(LIBIIO_MAKE_DIRS); do \
		$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/$$d $(LIBIIO_MAKE_OPTS) || break ; \
	done

> +define LIBIIO_INSTALL_STAGING_CMDS
> +	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install-sysroot \
> +		$(LIBIIO_MAKE_OPTS) DESTDIR=$(STAGING_DIR)
> +endef
> +
> +define LIBIIO_INSTALL_TARGET_CMDS
> +	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install-lib \
> +		$(LIBIIO_MAKE_OPTS) DESTDIR=$(TARGET_DIR)
> +	$(LIBIIO_INSTALL_IIOD)
> +	$(LIBIIO_INSTALL_TESTS)

And ditto here.

Note that the Makefile of libiio could make this a little bit nicer by
having a build and installation scheme that is easy to work with
several make targets.

Thanks!

Thomas
Paul Cercueil Sept. 22, 2014, 7:49 a.m. UTC | #2
Hi Thomas,

Allright, thank you for your comments. I'll come with something better.

Regards,
Paul

On 21/09/2014 21:41, Thomas Petazzoni wrote:
> Dear Paul Cercueil,
>
> On Thu, 18 Sep 2014 11:44:27 +0200, Paul Cercueil wrote:
>> Libiio is a library to ease the development of software interfacing
>> Linux Industrial I/O (IIO) devices.
>>
>> http://wiki.analog.com/resources/tools-software/linux-software/libiio
>>
>> Signed-off-by: Paul Cercueil <paul.cercueil@analog.com>
>> ---
>>   package/Config.in        |  1 +
>>   package/libiio/Config.in | 42 ++++++++++++++++++++++++++
>>   package/libiio/libiio.mk | 76 ++++++++++++++++++++++++++++++++++++++++++++++++
>>   3 files changed, 119 insertions(+)
>>   create mode 100644 package/libiio/Config.in
>>   create mode 100644 package/libiio/libiio.mk
>
> Thanks. However, I tested your package, and it fails to build:
>
> make[1]: entrant dans le répertoire « /home/thomas/projets/buildroot/output/build/libiio-2014_R1/iiod »
> install --strip-program=/home/thomas/projets/buildroot/output/host/usr/bin/arm-linux-strip -D -s -m 0755 \
> 		iiod /home/thomas/projets/buildroot/output/target/usr/sbin/iiod
> install -m 0755 iiod.sh /home/thomas/projets/buildroot/output/target/etc/init.d/iiod.sh
> update-rc.d iiod.sh defaults 99 01
> update-rc.d: /etc/init.d/iiod.sh: file does not exist
> make[1]: *** [install] Erreur 1
>
> First, the Makefile should not be calling update-rc.d, and also the
> init script in /etc/init.d/ should not be named iiod.sh in Buildroot,
> but directly S<number><name>.
>
> Also, is the install command with stripping is not good for Buildroot:
> we want to control whether stripping happens or not.
>
>
>> +# Avahi support in libiio requires avahi-client,
>> +# which needs avahi-daemon and dbus
>> +ifeq ($(BR2_PACKAGE_AVAHI)$(BR2_PACKAGE_AVAHI_DAEMON)$(BR2_PACKAGE_DBUS),yyy)
>> +	LIBIIO_DEPENDENCIES += avahi
>> +else
>> +	LIBIIO_MAKE_OPTS += WITH_AVAHI=no
>> +endif
>> +
>> +ifneq ($(BR2_PACKAGE_LIBIIO_LOCAL_BACKEND),y)
>> +	LIBIIO_MAKE_OPTS += WITH_LOCAL_BACKEND=no
>> +endif
>> +
>> +ifeq ($(BR2_PACKAGE_LIBIIO_NETWORK_BACKEND),y)
>> +	LIBIIO_DEPENDENCIES += libxml2
>> +else
>> +	LIBIIO_MAKE_OPTS += WITH_NETWORK_BACKEND=no
>> +endif
>> +
>> +# Libiio can run without threads
>> +ifneq ($(BR2_TOOLCHAIN_HAS_THREADS),y)
>> +	LIBIIO_MAKE_OPTS += WITH_PTHREAD=no
>> +endif
>> +
>> +ifeq ($(BR2_PACKAGE_LIBIIO_IIOD),y)
>> +define LIBIIO_BUILD_IIOD
>> +	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/iiod $(LIBIIO_MAKE_OPTS)
>> +endef
>> +define LIBIIO_INSTALL_IIOD
>> +	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/iiod install \
>> +		$(LIBIIO_MAKE_OPTS) DESTDIR=$(TARGET_DIR)
>> +endef
>> +endif
>> +
>> +ifeq ($(BR2_PACKAGE_LIBIIO_TESTS),y)
>> +define LIBIIO_BUILD_TESTS
>> +	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/tests $(LIBIIO_MAKE_OPTS)
>> +endef
>> +define LIBIIO_INSTALL_TESTS
>> +	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/tests install \
>> +		$(LIBIIO_MAKE_OPTS) DESTDIR=$(TARGET_DIR)
>> +endef
>> +endif
>
> Now that I think of it, you could also do:
>
> ifeq ($(BR2_PACKAGE_LIBIIO_IIOD),y)
> LIBIIO_MAKE_DIRS += iiod
> endif
>
> ifeq ($(BR2_PACKAGE_LIBIIO_TESTS),y)
> LIBIIO_MAKE_DIRS += tests
> endif
>
>> +define LIBIIO_BUILD_CMDS
>> +	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) libiio $(LIBIIO_MAKE_OPTS)
>> +	$(LIBIIO_BUILD_IIOD)
>> +	$(LIBIIO_BUILD_TESTS)
>
> Replace those last two lines with:
>
> 	for d in $(LIBIIO_MAKE_DIRS); do \
> 		$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/$$d $(LIBIIO_MAKE_OPTS) || break ; \
> 	done
>
>> +define LIBIIO_INSTALL_STAGING_CMDS
>> +	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install-sysroot \
>> +		$(LIBIIO_MAKE_OPTS) DESTDIR=$(STAGING_DIR)
>> +endef
>> +
>> +define LIBIIO_INSTALL_TARGET_CMDS
>> +	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install-lib \
>> +		$(LIBIIO_MAKE_OPTS) DESTDIR=$(TARGET_DIR)
>> +	$(LIBIIO_INSTALL_IIOD)
>> +	$(LIBIIO_INSTALL_TESTS)
>
> And ditto here.
>
> Note that the Makefile of libiio could make this a little bit nicer by
> having a build and installation scheme that is easy to work with
> several make targets.
>
> Thanks!
>
> Thomas
>
diff mbox

Patch

diff --git a/package/Config.in b/package/Config.in
index 73ba86a..487b948 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -665,6 +665,7 @@  menu "Hardware handling"
 	source "package/libfreefare/Config.in"
 	source "package/libftdi/Config.in"
 	source "package/libhid/Config.in"
+	source "package/libiio/Config.in"
 	source "package/libinput/Config.in"
 	source "package/libiqrf/Config.in"
 	source "package/libllcp/Config.in"
diff --git a/package/libiio/Config.in b/package/libiio/Config.in
new file mode 100644
index 0000000..b1f1e4c
--- /dev/null
+++ b/package/libiio/Config.in
@@ -0,0 +1,42 @@ 
+config BR2_PACKAGE_LIBIIO
+	bool "libiio"
+	help
+	  Libiio is a library to ease the development of software interfacing
+	  Linux Industrial I/O (IIO) devices.
+
+	  http://wiki.analog.com/resources/tools-software/linux-software/libiio
+
+if BR2_PACKAGE_LIBIIO
+
+config BR2_PACKAGE_LIBIIO_LOCAL_BACKEND
+	bool "Local backend"
+	default y
+	help
+	  Enable the local backend of the library.
+
+config BR2_PACKAGE_LIBIIO_NETWORK_BACKEND
+	bool "Network backend"
+	select BR2_PACKAGE_LIBXML2
+	default y
+	help
+	  Enable the network backend of the library.
+
+config BR2_PACKAGE_LIBIIO_IIOD
+	bool "IIO Daemon"
+	select BR2_PACKAGE_LIBIIO_LOCAL_BACKEND
+	depends on BR2_TOOLCHAIN_HAS_THREADS
+	default y
+	help
+	  Install the IIO Daemon.
+
+comment "IIO Daemon needs a toolchain w/ threads"
+	depends on !BR2_TOOLCHAIN_HAS_THREADS
+
+config BR2_PACKAGE_LIBIIO_TESTS
+	bool "Install test programs"
+	select BR2_PACKAGE_LIBIIO_LOCAL_BACKEND
+	select BR2_PACKAGE_LIBIIO_NETWORK_BACKEND
+	help
+	  Install the test programs (iio_info, iio_genxml, iio_readdev).
+
+endif
diff --git a/package/libiio/libiio.mk b/package/libiio/libiio.mk
new file mode 100644
index 0000000..2bfe8d9
--- /dev/null
+++ b/package/libiio/libiio.mk
@@ -0,0 +1,76 @@ 
+################################################################################
+#
+# libiio
+#
+################################################################################
+
+LIBIIO_VERSION = 2014_R1
+LIBIIO_SITE = $(call github,analogdevicesinc,libiio,$(LIBIIO_VERSION))
+LIBIIO_INSTALL_STAGING = YES
+LIBIIO_LICENSE = LGPLv2.1+
+LIBIIO_LICENSE_FILES = COPYING
+
+LIBIIO_MAKE_OPTS = CROSS_COMPILE=$(TARGET_CROSS) VERSION_GIT=$(LIBIIO_VERSION)
+
+# Avahi support in libiio requires avahi-client,
+# which needs avahi-daemon and dbus
+ifeq ($(BR2_PACKAGE_AVAHI)$(BR2_PACKAGE_AVAHI_DAEMON)$(BR2_PACKAGE_DBUS),yyy)
+	LIBIIO_DEPENDENCIES += avahi
+else
+	LIBIIO_MAKE_OPTS += WITH_AVAHI=no
+endif
+
+ifneq ($(BR2_PACKAGE_LIBIIO_LOCAL_BACKEND),y)
+	LIBIIO_MAKE_OPTS += WITH_LOCAL_BACKEND=no
+endif
+
+ifeq ($(BR2_PACKAGE_LIBIIO_NETWORK_BACKEND),y)
+	LIBIIO_DEPENDENCIES += libxml2
+else
+	LIBIIO_MAKE_OPTS += WITH_NETWORK_BACKEND=no
+endif
+
+# Libiio can run without threads
+ifneq ($(BR2_TOOLCHAIN_HAS_THREADS),y)
+	LIBIIO_MAKE_OPTS += WITH_PTHREAD=no
+endif
+
+ifeq ($(BR2_PACKAGE_LIBIIO_IIOD),y)
+define LIBIIO_BUILD_IIOD
+	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/iiod $(LIBIIO_MAKE_OPTS)
+endef
+define LIBIIO_INSTALL_IIOD
+	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/iiod install \
+		$(LIBIIO_MAKE_OPTS) DESTDIR=$(TARGET_DIR)
+endef
+endif
+
+ifeq ($(BR2_PACKAGE_LIBIIO_TESTS),y)
+define LIBIIO_BUILD_TESTS
+	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/tests $(LIBIIO_MAKE_OPTS)
+endef
+define LIBIIO_INSTALL_TESTS
+	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/tests install \
+		$(LIBIIO_MAKE_OPTS) DESTDIR=$(TARGET_DIR)
+endef
+endif
+
+define LIBIIO_BUILD_CMDS
+	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) libiio $(LIBIIO_MAKE_OPTS)
+	$(LIBIIO_BUILD_IIOD)
+	$(LIBIIO_BUILD_TESTS)
+endef
+
+define LIBIIO_INSTALL_STAGING_CMDS
+	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install-sysroot \
+		$(LIBIIO_MAKE_OPTS) DESTDIR=$(STAGING_DIR)
+endef
+
+define LIBIIO_INSTALL_TARGET_CMDS
+	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install-lib \
+		$(LIBIIO_MAKE_OPTS) DESTDIR=$(TARGET_DIR)
+	$(LIBIIO_INSTALL_IIOD)
+	$(LIBIIO_INSTALL_TESTS)
+endef
+
+$(eval $(generic-package))