[uClibc] tips or guide needed howto wite a complex buildroot makefile
Claus Klein
claus.klein at arcormail.de
Tue Apr 5 17:47:38 UTC 2005
Hi,
while providing a buildroot makefile for the ospf router package quagga I run into
some problems:
1.) quagga needs netsnmp, and netsnmp needs openssl libs and headers installed.
2.) how to prevent that the host libs and headers are found and used while configure?
3.) how and what should be installed?
* It seems, that the libs, the headers and the -config script should be installed to
the $(STAGING_DIR).
* But we need the libs too installed to the $(TARGET_DIR).
* Sure, we need the applications, the config files and the init scripts installed to the $(TARGET_DIR).
* And, all binaries should be striped, but not with 'install -s' like many makefiles do!
* But for an embedded system, we normally do not need the man, info or header files?
The buildroot docu 'Extending Buildroot with more software' is good, but only for simple packages.
So I looked into some package makefiles: zlib, netsnmp, openssl, and openssh.
For me, it seems that there is no general rule or strategy?
Is there any good idea or guide to solve these little problems while working on a new package?
Claus
see too:
http://buildroot.uclibc.org/buildroot.html#add_software
http://www.superhlinux.com/user_guide/getting_started/autoconf_cross_compile.php3
http://www.lnx-bbc.org/garchitecture.html
http://bugs.uclibc.org/view.php?id=149
-------------- next part --------------
#############################################################
#
# quagga
#
#############################################################
QUAGGA_URL:=http://www.quagga.net/download/
QUAGGA_DIR:=$(BUILD_DIR)/quagga-0.98.2
QUAGGA_SOURCE:=quagga-0.98.2.tar.gz
QUAGGA_PATCH1:=quagga_0.98.2-1.diff.gz
QUAGGA_PATCH1_URL:=http://ftp.debian.org/debian/pool/main/q/quagga/
$(DL_DIR)/$(QUAGGA_SOURCE):
$(WGET) -P $(DL_DIR) $(QUAGGA_URL)/$(QUAGGA_SOURCE)
$(DL_DIR)/$(QUAGGA_PATCH1):
$(WGET) -P $(DL_DIR) $(QUAGGA_PATCH1_URL)/$(QUAGGA_PATCH1)
$(QUAGGA_DIR)/.unpacked: $(DL_DIR)/$(QUAGGA_SOURCE) $(DL_DIR)/$(QUAGGA_PATCH1)
zcat $(DL_DIR)/$(QUAGGA_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
### zcat $(DL_DIR)/$(QUAGGA_PATCH1) | patch -p1 -d $(QUAGGA_DIR)
zcat $(DL_DIR)/$(QUAGGA_PATCH1) | sed -e '39,49d' | patch -p1 -d $(QUAGGA_DIR)
toolchain/patch-kernel.sh $(QUAGGA_DIR) package/quagga quagga\*.patch
touch $(QUAGGA_DIR)/.unpacked
###FIXME### check if this realy necessary if we use smux interface!
$(STAGING_DIR)/bin/net-snmp-config: $(TARGET_DIR)/usr/bin/net-snmp-config
cp $< $@
$(QUAGGA_DIR)/.configured: $(QUAGGA_DIR)/.unpacked $(STAGING_DIR)/bin/net-snmp-config
(cd $(QUAGGA_DIR); autoconf; \
PATH=$(TARGET_PATH) \
LDFLAGS="-L$(TARGET_DIR)/lib -L$(TARGET_DIR)/usr/lib" \
./configure \
--with-cc=$(TARGET_CROSS)gcc \
--with-ar=$(TARGET_CROSS)ar \
--target=$(GNU_TARGET_NAME) \
--host=$(GNU_TARGET_NAME) \
--build=$(GNU_HOST_NAME) \
\
--disable-ripd --disable-ripngd --disable-bgpd --disable-bgp-announce \
--disable-ospf6d --disable-ipv6 \
--enable-snmp \
--sysconfdir=/etc/quagga \
--includedir=/include/quagga \
--cache-file=config.cache \
--with-net-snmp-exec-prefix=$(STAGING_DIR) --with-net-snmp-config-prefix=$(TARGET_DIR)/usr \
\
--enable-shared \
--disable-static \
--prefix=/usr \
--mandir=/usr/man \
--infodir=/usr/info \
--disable-manuals \
\
);
touch $(QUAGGA_DIR)/.configured
#
###tbd### Optional Features:
#
# --with-libpam use libpam for PAM support in vtysh
# --enable-ospf-te enable Traffic Engineering Extension to OSPF
# --enable-netlink force to use Linux netlink interface
# --enable-pkgsrcrcdir specify directory for rc.d scripts
#
$(QUAGGA_DIR)/zebra/zebra: $(QUAGGA_DIR)/.configured
PATH=$(TARGET_PATH) \
$(MAKE) -C $(QUAGGA_DIR)
$(TARGET_DIR)/usr/sbin/ospfd: $(TARGET_DIR)/usr/sbin/zebra
$(TARGET_DIR)/usr/sbin/watchquagga: $(TARGET_DIR)/usr/sbin/zebra
###tbd### do we need the libs in STAGING_DIR too?
$(TARGET_DIR)/usr/sbin/zebra: $(QUAGGA_DIR)/zebra/zebra $(QUAGGA_DIR)/lib/.libs
PATH=$(TARGET_PATH) \
$(MAKE) DESTDIR=$(TARGET_DIR) \
includedir=$(STAGING_DIR)/include \
-C $(QUAGGA_DIR) install-strip;
rm -rf $(TARGET_DIR)/usr/info \
$(TARGET_DIR)/usr/man \
quagga: netsnmp $(TARGET_DIR)/usr/sbin/zebra
###tbd### do we need the headers in TARGET_DIR too?
### quagga-headers: $(STAGING_DIR)/include/quagga
### cp -a $(STAGING_DIR)/include/quagga $(TARGET_DIR)/usr/include/quagga
quagga-source: $(DL_DIR)/$(QUAGGA_SOURCE)
quagga-patch: $(QUAGGA_DIR)/.unpacked
quagga-clean:
$(MAKE) -C $(QUAGGA_DIR) clean
quagga-dirclean:
rm -rf $(QUAGGA_DIR)
# configure: creating ./config.status
#
# Quagga configuration
# --------------------
# quagga version : 0.98.2
# host operationg system : linux-gnu
# source code location : .
# compiler : powerpc-linux-gcc
# compiler flags : -Os -g -Wall -Wsign-compare -Wpointer-arith -Wbad-function-cast -Wwrite-strings -g-O2 -Dlinux -I. -I/home/claus/src/buildroot/build_powerpc/root/usr/include
# linker flags : -L/home/claus/src/buildroot/build_powerpc/root/lib -L/home/claus/src/buildroot/build_powerpc/root/usr/lib -lm -lcrypt -L/home/claus/src/buildroot/build_powerpc/root/usr/lib -lnetsnmp -lcrypto -lm
# state file directory : /usr/etc
# config file directory : /etc/quagga
# example directory : /etc/quagga
# user to run as : quagga
# group to run as : quagga
# group for vty sockets :
# config file mask : 0600
# log file mask : 0600
#
# The above user and group must have read/write access to the state file
# directory and to the config files in the config file directory.
#
More information about the uClibc
mailing list