For basic information on how to compile Linknx, please refer to [Compiling_Linknx]
Here I'll briefly introduce the method to cross-compile Linknx for OpenWRT.
The main tool to used to achieve this is the OpenWRT SDK. This SDK packages everything needed to create the famous ".ipk" packages to install on the target device.
For this example, I'll use the SDK version labelled "Kamikaze r7908" for Broadcom based devices (like WRT54G routers).
Let's first download and uncompress this SDK.
wget http://downloads.openwrt.org/snapshots/brcm-2.4/OpenWrt-SDK-brcm-2.4-for-Linux-i686.tar.bz2
tar -xvjf OpenWrt-SDK-brcm-2.4-for-Linux-i686.tar.bz2
cd OpenWrt-SDK-brcm-2.4-for-Linux-i686
In the SDK main directory (I'll call it OpenWrt-SDK-xxx for the rest of this example), there is a folder package. For each package you want to create, you'll have to create a sub-folder in OpenWrt-SDK-xxx/package with the same name as the package you want to create. And in this directory, create a Makefile explaining how to build it.
Some tarballs containing the Makefiles and patches I'm using can be found in http://ouaye.net/linknx/OpenWRT-Kamikaze-r7908/build/ , you just have to untar them in OpenWrt-SDK-xxx/package
Here are the details of how to create the Linknx package from scratch
cd package
mkdir linknx
cd linknx
mkdir patches
touch Makefile
The Makefile I use looks like this:
# $Id: Makefile 1146 2005-06-05 13:32:28Z nbd $
include $(TOPDIR)/rules.mk
PKG_NAME:=linknx
PKG_VERSION:=0.0.1.20
PKG_RELEASE:=1
PKG_MD5SUM:=3063643c5d200b863cf3a794c22325aa
PKG_SOURCE_URL:=http://garr.dl.sourceforge.net/sourceforge/linknx
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_CAT:=zcat
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
include $(INCLUDE_DIR)/package.mk
define Package/linknx
SECTION:=net
CATEGORY:=Network
TITLE:=KNX home automation platform
URL:=http://www.ouaye.net/linknx
DEPENDS:=pthsem uclibc++
endef
define Build/Configure
$(call Build/Configure/Default,--without-pth-test --with-pth=$(STAGING_DIR),\
CXXFLAGS="$(TARGET_CFLAGS) -fno-builtin -nostdinc++" \
CPPFLAGS="-I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/include" \
LDFLAGS="-nodefaultlibs -L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib -luClibc++ -lc -lm -lgcc")
endef
define Build/Compile
$(call Build/Compile/Default)
endef
define Package/linknx/install
mkdir -p $(1)/usr/bin
$(CP) $(PKG_BUILD_DIR)/src/linknx $(1)/usr/bin/
endef
$(eval $(call BuildPackage,linknx))
If you modify the Makefile or add patches in the patches subdirectory, you have to increment "PKG_RELEASE" in the makefile.
You'll also need to create packages for the dependencies. (pthsem >= 2.0.4 ; uclibc++ >= 0.2.2 and optionally curl or libesmtp)
Once the Makefiles (and patches if needed) are ready, you just have to go back to OpenWrt-SDK-xxx directory and build everything
cd ../..
make V=99
The V=99 option makes it much more verbose so that if it fails, you can more easily figure out what happened.
Once the build is successfull, all the ".ipk" files should be available in OpenWrt-SDK-xxx/bin/packages
More info about building packages with OpenWrt-SDK can be found at http://downloads.openwrt.org/kamikaze/docs/openwrt.html#x1-380002.1.2