owfs: make libow features configurable

Owfs shared library is quite large (700+ kB) by embedded devices standards.
The code for many different bus master and slave devices is compiled
into single big .so library. Had it been designed as modular,
dynamic-loadable plugins, we could split them into separate packages,
allowing user to install only the plugins he needs.

It's however possible to enable or disable libow features at compile time.
Here are some examples how much space can be saved turning off support for
unneeded devices and features:
 - By disabling USB adapter support libusb and libusb-compat is no
   longer needed, saving ~70kB of space. Bus masters using usbserial.ko
   kernel driver don't need this.
 - By disabling debug messages it's possible to reduce shared library
   size by 130kB.

This patch adds a menu allowing user to select libow features one wants
built in:
 - Bus master support: USB adapters through libusb, i2c adapters, kernel w1
   adapters
 - General features: zeroconf device announcement, debug messages, owtraffic
   bus reports
Default config options preserve previous library configuration i.e.
everything is selected except for owtraffic (which was disabled) and
kernel w1 driver (whose netlink interface has been broken since 2011).

Signed-off-by: Marcin Jurkowski <marcin1j@gmail.com>
This commit is contained in:
Marcin Jurkowski 2013-03-06 09:31:17 +00:00
parent 7000746a30
commit d6fe15a85c
2 changed files with 71 additions and 2 deletions

49
utils/owfs/Config.in Normal file
View File

@ -0,0 +1,49 @@
menu "Customize libow"
depends on PACKAGE_libow
menu "Bus master and adapter support"
config LIBOW_MASTER_USB
bool "USB bus master support (requires libusb)"
help
Include support for USB adapters (NOT usb-serial adapters, which use
kernel driver and are supported anyway).
Turning this off will save ~13kB (and ~50kB weighting libusb dependency).
default y
config LIBOW_MASTER_I2C
bool "I2C bus master (DS2482) support"
default y
help
Include support for I2C adapters.
Turning this feature off will save ~6kB.
config LIBOW_MASTER_W1
bool "Kernel W1 bus master support (requires kmod-w1)"
help
Support kernel 1-Wire bus masters (requires KConfig CONFIG_CONNECTOR=y
and CONFIG_W1_CON=y).
Turning this on will increase libow size by about 10kB.
default n
endmenu
config LIBOW_ZEROCONF
bool "Zeroconf/bonjour support"
default y
help
Enable server process announcement using Zeroconf (Bonjour) protocol.
Turning this feature on will increase owlib size by about 12kB.
config LIBOW_DEBUG
bool "Enable debug output (100+ kB)"
default y
help
If you don't need to debug your 1-wire network, you can save as much as
137kB disabling debug output.
config LIBOW_OWTRAFFIC
bool "Enable bus traffic reports"
default n
help
Enable owfs traffic monitor. It's here purely for debugging purposes.
Turning this on will increase libow size by about 3kB.
endmenu

View File

@ -20,6 +20,14 @@ PKG_LICENSE:=GPL-2.0
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
PKG_CONFIG_DEPENDS:= \
CONFIG_LIBOW_MASTER_USB \
CONFIG_LIBOW_MASTER_I2C \
CONFIG_LIBOW_MASTER_W1 \
CONFIG_LIBOW_ZEROCONF \
CONFIG_LIBOW_DEBUG \
CONFIG_LIBOW_OWTRAFFIC
include $(INCLUDE_DIR)/package.mk
#
@ -74,10 +82,17 @@ endef
define Package/libow
$(call Package/owfs/Library)
DEPENDS:=+libusb-compat +libpthread
DEPENDS:= \
+libpthread \
+LIBOW_MASTER_USB:libusb-compat \
+LIBOW_MASTER_W1:kmod-w1
TITLE:=OWFS - common shared library
endef
define Package/libow/config
source "$(SOURCE)/Config.in"
endef
define Package/libow/description
$(call Package/$(PKG_NAME)/Default/description)
@ -170,13 +185,18 @@ CONFIGURE_ARGS += \
--with-fuseinclude="$(STAGING_DIR)/usr/include" \
--with-fuselib="$(STAGING_DIR)/usr/lib" \
--enable-shared \
--enable-zero \
--disable-parport \
--disable-ownet \
--disable-owpython \
--disable-owphp \
--disable-owtcl \
--disable-swig \
$(if $(CONFIG_LIBOW_MASTER_USB),--enable-usb,--disable-usb) \
$(if $(CONFIG_LIBOW_MASTER_W1),--enable-w1,--disable-w1) \
$(if $(CONFIG_LIBOW_MASTER_I2C),--enable-i2c,--disable-i2c) \
$(if $(CONFIG_LIBOW_ZEROCONF),--enable-zero,--disable-zero) \
$(if $(CONFIG_LIBOW_DEBUG),--enable-debug,--disable-debug) \
$(if $(CONFIG_LIBOW_OWTRAFFIC),--enable-owtraffic,--disable-owtraffic)
CONFIGURE_VARS += \
LDFLAGS="$(TARGET_LDFLAGS) -Wl,-rpath-link=$(STAGING_DIR)/usr/lib -Wl,-rpath-link=$(TOOLCHAIN_DIR)/usr/lib" \