CROSS_COMPILE := mipsel-linux-uclibc- CROSS_TOOLS := CC=$(CROSS_COMPILE)gcc \ AR=$(CROSS_COMPILE)ar \ AS=$(CROSS_COMPILE)as \ LD=$(CROSS_COMPILE)ld \ LDD=$(CROSS_COMPILE)ldd \ NM=$(CROSS_COMPILE)nm \ RANLIB=$(CROSS_COMPILE)ranlib \ STRIP=$(CROSS_COMPILE)strip \ SIZE=$(CROSS_COMPILE)size CROSS_CONFIGURE := ./configure --target=mipsel-linux-uclibc --build=i386-pc-linux-gnu --host=mipsel-linux-uclibc $(CROSS_TOOLS) CROSS_STRIP := $(CROSS_COMPILE)strip WGET := /usr/bin/wget --passive-ftp -nd _SRCBASE=$(shell /bin/pwd) _CONFIGS=$(_SRCBASE)/configs _DOWNLOAD_DIR=$(_SRCBASE)/download _PATCHES=$(_SRCBASE)/patches _SOURCE=$(_SRCBASE)/source _TOOLS=$(_SRCBASE)/tools _TOOLCHAIN=$(_SRCBASE)/toolchain _STAGE1_SKEL=stage1.skel _STAGE1=$(shell /bin/pwd)/stage1 _STAGE1_IMG=stage1.img _STAGE2_SKEL=stage2.skel _STAGE2=$(shell /bin/pwd)/stage2 export PATH := $(_TOOLCHAIN)/bin:$(PATH) # ##################################################################### # build firmware and filesystem all: stage1 stage2 # stage1 (firmware) _STAGE1_TARGETS=kernel-zImage busybox-stage1 cramfs tools # stage2 (filesystem) _STAGE2_TARGETS=kernel-modules busybox-stage2 strace bridge-utils iproute2 pppd # fetch all needed sources fetch: toolchain-fetch stage1-fetch stage2-fetch # trigger rebuild of all packages clean: stage1-clean stage2-clean # remove all builddirs distclean: stage1-distclean stage2-distclean # ##################################################################### # TARGET HOST KERNEL # ##################################################################### _PACKAGE_KERNEL=$(_DOWNLOAD_DIR)/linux-2.4.20.tar.bz2 _DOWNLOAD_KERNEL=ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.20.tar.bz2 _BUILD_KERNEL=$(_SOURCE)/linux-2.4.20 _KERNELHEADERS=$(_BUILD_KERNEL)/include kernel: $(_BUILD_KERNEL)/.zImage.all-done $(_BUILD_KERNEL)/.modules.all-done kernel-zImage: kernel-zImage-clean $(_BUILD_KERNEL)/.zImage.all-done kernel-modules: kernel-modules-clean $(_BUILD_KERNEL)/.modules.all-done kernel-fetch: $(_PACKAGE_KERNEL) kernel-zImage-fetch: $(_PACKAGE_KERNEL) kernel-modules-fetch: $(_PACKAGE_KERNEL) $(_PACKAGE_KERNEL): $(WGET) -P $(_DOWNLOAD_DIR) $(_DOWNLOAD_KERNEL) $(_BUILD_KERNEL)/.unpacked: $(_PACKAGE_KERNEL) tar -C $(_SOURCE) -xjf $(_PACKAGE_KERNEL) touch $(_BUILD_KERNEL)/.unpacked $(_BUILD_KERNEL)/.patched: $(_BUILD_KERNEL)/.unpacked (cd $(_BUILD_KERNEL); bzcat $(_PATCHES)/???_kernel*.patch.bz2 | patch -lp1 ); (cd $(_BUILD_KERNEL); tar -xjf $(_CONFIGS)/wl-rel_3_01_05.tar.bz2 ); touch $(_BUILD_KERNEL)/.patched $(_BUILD_KERNEL)/.configured: $(_BUILD_KERNEL)/.patched cp $(_CONFIGS)/kernel-config $(_BUILD_KERNEL)/.config make -C $(_BUILD_KERNEL) oldconfig include/linux/version.h touch $(_BUILD_KERNEL)/.configured $(_BUILD_KERNEL)/.dep: $(_BUILD_KERNEL)/.configured make -C $(_BUILD_KERNEL) dep touch $(_BUILD_KERNEL)/.dep $(_BUILD_KERNEL)/.zImage.all-done: $(_BUILD_KERNEL)/.dep make -C $(_BUILD_KERNEL) zImage touch $(_BUILD_KERNEL)/.zImage.all-done $(_BUILD_KERNEL)/.modules.all-done: $(_BUILD_KERNEL)/.zImage.all-done make -C $(_BUILD_KERNEL) modules touch $(_BUILD_KERNEL)/.modules.all-done kernel-zImage-install: $(_STAGE1) $(_BUILD_KERNEL)/.zImage.all-done kernel-modules-install: $(_STAGE2) $(_BUILD_KERNEL)/.modules.all-done make -C $(_BUILD_KERNEL) modules_install DEPMOD=/bin/true INSTALL_MOD_PATH=$(_STAGE2) rm -rf $(_STAGE2)/lib/modules/2.4.20/build rm -rf $(_STAGE2)/lib/modules/2.4.20/pcmcia kernel-clean: kernel-zImage-clean kernel-modules-clean kernel-distclean: rm -rf $(_BUILD_KERNEL) kernel-zImage-clean: rm -f $(_BUILD_KERNEL)/.zImage.all-done kernel-zImage-distclean: kernel-distclean kernel-modules-clean: rm -f $(_BUILD_KERNEL)/.modules.all-done kernel-modules-distclean: kernel-distclean # ##################################################################### # TARGET HOST # ##################################################################### _PACKAGE_BUSYBOX=$(_DOWNLOAD_DIR)/busybox-1.00.tar.bz2 _DOWNLOAD_BUSYBOX=http://www.busybox.net/downloads/busybox-1.00.tar.bz2 _BUILD_BUSYBOX=$(_SOURCE)/busybox-1.00 _BUILD_BUSYBOX_STAGE1=$(_SOURCE)/busybox-stage1 busybox-stage1: busybox-stage1-clean $(_BUILD_BUSYBOX_STAGE1)/.all_done busybox-stage1-fetch: $(_PACKAGE_BUSYBOX) $(_PACKAGE_BUSYBOX): $(WGET) -P $(_DOWNLOAD_DIR) $(_DOWNLOAD_BUSYBOX) $(_BUILD_BUSYBOX_STAGE1)/.unpacked: $(_PACKAGE_BUSYBOX) tar -C $(_SOURCE) -xjf $(_PACKAGE_BUSYBOX) rm -rf $(_BUILD_BUSYBOX_STAGE1) mv $(_BUILD_BUSYBOX) $(_BUILD_BUSYBOX_STAGE1) touch $(_BUILD_BUSYBOX_STAGE1)/.unpacked $(_BUILD_BUSYBOX_STAGE1)/.configured: $(_BUILD_BUSYBOX_STAGE1)/.unpacked cp $(_CONFIGS)/busybox-stage1.conf $(_BUILD_BUSYBOX_STAGE1)/.config touch $(_BUILD_BUSYBOX_STAGE1)/.configured $(_BUILD_BUSYBOX_STAGE1)/.compiled: $(_BUILD_BUSYBOX_STAGE1)/.configured make -C $(_BUILD_BUSYBOX_STAGE1) $(CROSS_TOOLS) all touch $(_BUILD_BUSYBOX_STAGE1)/.compiled $(_BUILD_BUSYBOX_STAGE1)/.all_done: $(_BUILD_BUSYBOX_STAGE1)/.compiled make -C $(_BUILD_BUSYBOX_STAGE1) $(CROSS_TOOLS) install chmod 4775 $(_BUILD_BUSYBOX_STAGE1)/_install/bin/busybox touch $(_BUILD_BUSYBOX_STAGE1)/.all_done busybox-stage1-install: $(_STAGE1) $(_BUILD_BUSYBOX_STAGE1)/.all_done cp -r $(_BUILD_BUSYBOX_STAGE1)/_install/* $(_STAGE1) busybox-stage1-clean: rm -f $(_BUILD_BUSYBOX_STAGE1)/.configured $(_BUILD_BUSYBOX_STAGE1)/.compiled \ $(_BUILD_BUSYBOX_STAGE1)/.all_done busybox-stage1-distclean: rm -rf $(_BUILD_BUSYBOX_STAGE1) # ##################################################################### _BUILD_BUSYBOX_STAGE2=$(_SOURCE)/busybox-stage2 busybox-stage2: busybox-stage2-clean $(_BUILD_BUSYBOX_STAGE2)/.all_done busybox-stage2-fetch: $(_PACKAGE_BUSYBOX) $(_BUILD_BUSYBOX_STAGE2)/.unpacked: $(_PACKAGE_BUSYBOX) tar -C $(_SOURCE) -xjf $(_PACKAGE_BUSYBOX) rm -rf $(_BUILD_BUSYBOX_STAGE2) mv $(_BUILD_BUSYBOX) $(_BUILD_BUSYBOX_STAGE2) touch $(_BUILD_BUSYBOX_STAGE2)/.unpacked $(_BUILD_BUSYBOX_STAGE2)/.configured: $(_BUILD_BUSYBOX_STAGE2)/.unpacked cp $(_CONFIGS)/busybox-stage2.conf $(_BUILD_BUSYBOX_STAGE2)/.config touch $(_BUILD_BUSYBOX_STAGE2)/.configured $(_BUILD_BUSYBOX_STAGE2)/.compiled: $(_BUILD_BUSYBOX_STAGE2)/.configured make -C $(_BUILD_BUSYBOX_STAGE2) $(CROSS_TOOLS) all touch $(_BUILD_BUSYBOX_STAGE2)/.compiled $(_BUILD_BUSYBOX_STAGE2)/.all_done: $(_BUILD_BUSYBOX_STAGE2)/.compiled make -C $(_BUILD_BUSYBOX_STAGE2) $(CROSS_TOOLS) install chmod 4775 $(_BUILD_BUSYBOX_STAGE2)/_install/bin/busybox touch $(_BUILD_BUSYBOX_STAGE2)/.all_done busybox-stage2-install: $(_STAGE2) $(_BUILD_BUSYBOX_STAGE2)/.all_done cp -r $(_BUILD_BUSYBOX_STAGE2)/_install/* $(_STAGE2) busybox-stage2-clean: rm -f $(_BUILD_BUSYBOX_STAGE2)/.configured $(_BUILD_BUSYBOX_STAGE2)/.compiled \ $(_BUILD_BUSYBOX_STAGE2)/.all_done busybox-stage2-distclean: rm -rf $(_BUILD_BUSYBOX_STAGE2) # ##################################################################### _PACKAGE_STRACE=$(_DOWNLOAD_DIR)/strace-4.5.7.tar.bz2 _DOWNLOAD_STRACE=http://mesh.dl.sourceforge.net/sourceforge/strace/strace-4.5.7.tar.bz2 _BUILD_STRACE=$(_SOURCE)/strace-4.5.7 strace: strace-clean $(_BUILD_STRACE)/.all_done strace-fetch: $(_PACKAGE_STRACE) $(_PACKAGE_STRACE): $(WGET) -P $(_DOWNLOAD_DIR) $(_DOWNLOAD_STRACE) $(_BUILD_STRACE)/.unpacked: $(_PACKAGE_STRACE) tar -C $(_SOURCE) -xjf $(_PACKAGE_STRACE) touch $(_BUILD_STRACE)/.unpacked $(_BUILD_STRACE)/.configured: $(_BUILD_STRACE)/.unpacked (cd $(_BUILD_STRACE); $(CROSS_CONFIGURE) --prefix=/usr ); touch $(_BUILD_STRACE)/.configured $(_BUILD_STRACE)/.compiled: $(_BUILD_STRACE)/.configured make -C $(_BUILD_STRACE) $(CROSS_TOOLS) all touch $(_BUILD_STRACE)/.compiled $(_BUILD_STRACE)/.all_done: $(_BUILD_STRACE)/.compiled $(CROSS_STRIP) --strip-all $(_BUILD_STRACE)/strace touch $(_BUILD_STRACE)/.all_done strace-install: $(_STAGE2) $(_BUILD_STRACE)/.all_done cp $(_BUILD_STRACE)/strace $(_STAGE2)/usr/bin strace-clean: rm -f $(_BUILD_STRACE)/.configured $(_BUILD_STRACE)/.compiled \ $(_BUILD_STRACE)/.all_done strace-distclean: rm -rf $(_BUILD_STRACE) # ##################################################################### _PACKAGE_BRIDGE_UTILS=$(_DOWNLOAD_DIR)/bridge-utils-1.0.4.tar.gz _DOWNLOAD_BRIDGE_UTILS=http://mesh.dl.sourceforge.net/sourceforge/bridge/bridge-utils-1.0.4.tar.gz _BUILD_BRIDGE_UTILS=$(_SOURCE)/bridge-utils-1.0.4 bridge-utils: bridge-utils-clean $(_BUILD_BRIDGE_UTILS)/.all_done bridge-utils-fetch: $(_PACKAGE_BRIDGE_UTILS) $(_PACKAGE_BRIDGE_UTILS): $(WGET) -P $(_DOWNLOAD_DIR) $(_DOWNLOAD_BRIDGE_UTILS) $(_BUILD_BRIDGE_UTILS)/.unpacked: $(_PACKAGE_BRIDGE_UTILS) tar -C $(_SOURCE) -xzf $(_PACKAGE_BRIDGE_UTILS) touch $(_BUILD_BRIDGE_UTILS)/.unpacked $(_BUILD_BRIDGE_UTILS)/.configured: $(_BUILD_BRIDGE_UTILS)/.unpacked (cd $(_BUILD_BRIDGE_UTILS); $(CROSS_CONFIGURE) --prefix=/usr --with-linux-headers=$(_KERNELHEADERS)); touch $(_BUILD_BRIDGE_UTILS)/.configured $(_BUILD_BRIDGE_UTILS)/.compiled: $(_BUILD_BRIDGE_UTILS)/.configured make -C $(_BUILD_BRIDGE_UTILS) $(CROSS_TOOLS) all touch $(_BUILD_BRIDGE_UTILS)/.compiled $(_BUILD_BRIDGE_UTILS)/.all_done: $(_BUILD_BRIDGE_UTILS)/.compiled $(CROSS_STRIP) --strip-all $(_BUILD_BRIDGE_UTILS)/brctl/brctl touch $(_BUILD_BRIDGE_UTILS)/.all_done bridge-utils-install: $(_STAGE2) $(_BUILD_BRIDGE_UTILS)/.all_done cp $(_BUILD_BRIDGE_UTILS)/brctl/brctl $(_STAGE2)/usr/sbin bridge-utils-clean: rm -f $(_BUILD_BRIDGE_UTILS)/.configured $(_BUILD_BRIDGE_UTILS)/.compiled \ $(_BUILD_BRIDGE_UTILS)/.all_done bridge-utils-distclean: rm -rf $(_BUILD_BRIDGE_UTILS) # ##################################################################### _PACKAGE_IPROUTE2=$(_DOWNLOAD_DIR)/iproute2-2.6.10-050209.tar.gz _DOWNLOAD_IPROUTE2=http://developer.osdl.org/dev/iproute2/download/iproute2-2.6.10-050209.tar.gz _BUILD_IPROUTE2=$(_SOURCE)/iproute2-2.6.9-050209 iproute2: iproute2-clean $(_BUILD_IPROUTE2)/.all_done iproute2-fetch: $(_PACKAGE_IPROUTE2) $(_PACKAGE_IPROUTE2): $(WGET) -P $(_DOWNLOAD_DIR) $(_DOWNLOAD_IPROUTE2) $(_BUILD_IPROUTE2)/.unpacked: $(_PACKAGE_IPROUTE2) tar -C $(_SOURCE) -xzf $(_PACKAGE_IPROUTE2) touch $(_BUILD_IPROUTE2)/.unpacked $(_BUILD_IPROUTE2)/.configured: $(_BUILD_IPROUTE2)/.unpacked (cd $(_BUILD_IPROUTE2); $(CROSS_CONFIGURE) --prefix=/usr); touch $(_BUILD_IPROUTE2)/.configured $(_BUILD_IPROUTE2)/.compiled: $(_BUILD_IPROUTE2)/.configured make -C $(_BUILD_IPROUTE2) $(CROSS_TOOLS) all touch $(_BUILD_IPROUTE2)/.compiled $(_BUILD_IPROUTE2)/.all_done: $(_BUILD_IPROUTE2)/.compiled $(CROSS_STRIP) --strip-all $(_BUILD_IPROUTE2)/ip/ip $(CROSS_STRIP) --strip-all $(_BUILD_IPROUTE2)/tc/tc touch $(_BUILD_IPROUTE2)/.all_done iproute2-install: $(_STAGE2) $(_BUILD_IPROUTE2)/.all_done cp $(_BUILD_IPROUTE2)/ip/ip $(_STAGE2)/sbin cp $(_BUILD_IPROUTE2)/tc/tc $(_STAGE2)/sbin iproute2-clean: rm -f $(_BUILD_IPROUTE2)/.configured $(_BUILD_IPROUTE2)/.compiled \ $(_BUILD_IPROUTE2)/.all_done iproute2-distclean: rm -rf $(_BUILD_IPROUTE2) # ##################################################################### _PACKAGE_PPPD=$(_DOWNLOAD_DIR)/ppp-2.4.2.tar.gz _DOWNLOAD_PPPD=ftp://ftp.samba.org/pub/ppp/ppp-2.4.2.tar.gz _BUILD_PPPD=$(_SOURCE)/ppp-2.4.2 pppd: pppd-clean $(_BUILD_PPPD)/.all_done pppd-fetch: $(_PACKAGE_PPPD) $(_PACKAGE_PPPD): $(WGET) -P $(_DOWNLOAD_DIR) $(_DOWNLOAD_PPPD) $(_BUILD_PPPD)/.unpacked: $(_PACKAGE_PPPD) tar -C $(_SOURCE) -xzf $(_PACKAGE_PPPD) touch $(_BUILD_PPPD)/.unpacked $(_BUILD_PPPD)/.patched: $(_BUILD_PPPD)/.unpacked (cd $(_BUILD_PPPD); cat $(_PATCHES)/???_ppp-*.patch | patch -p1 ); touch $(_BUILD_PPPD)/.patched $(_BUILD_PPPD)/.configured: $(_BUILD_PPPD)/.patched (cd $(_BUILD_PPPD); $(CROSS_CONFIGURE) --prefix=/usr); touch $(_BUILD_PPPD)/.configured $(_BUILD_PPPD)/.compiled: $(_BUILD_PPPD)/.configured make -C $(_BUILD_PPPD) $(CROSS_TOOLS) all touch $(_BUILD_PPPD)/.compiled $(_BUILD_PPPD)/.all_done: $(_BUILD_PPPD)/.compiled $(CROSS_STRIP) --strip-all $(_BUILD_PPPD)/chat/chat $(CROSS_STRIP) --strip-all $(_BUILD_PPPD)/pppd/pppd $(CROSS_STRIP) --strip-all $(_BUILD_PPPD)/pppd/plugins/rp-pppoe/rp-pppoe.so $(CROSS_STRIP) --strip-all $(_BUILD_PPPD)/pppstats/pppstats touch $(_BUILD_PPPD)/.all_done pppd-install: $(_STAGE2) $(_BUILD_PPPD)/.all_done cp $(_BUILD_PPPD)/chat/chat $(_STAGE2)/usr/bin cp $(_BUILD_PPPD)/pppd/pppd $(_STAGE2)/usr/sbin cp $(_BUILD_PPPD)/pppd/plugins/rp-pppoe/rp-pppoe.so $(_STAGE2)/etc/ppp/plugins/ cp $(_BUILD_PPPD)/pppstats/pppstats $(_STAGE2)/usr/bin pppd-clean: rm -f $(_BUILD_PPPD)/.configured $(_BUILD_PPPD)/.compiled $(_BUILD_PPPD)/.all_done pppd-distclean: rm -rf $(_BUILD_PPPD) # ##################################################################### # BUILD HOST TOOLCHAIN # ##################################################################### _PACKAGE_BINUTILS=$(_DOWNLOAD_DIR)/binutils-2.13.2.1.tar.bz2 _DOWNLOAD_BINUTILS=ftp://ftp.fu-berlin.de/unix/gnu/binutils/binutils-2.13.2.1.tar.bz2 _BUILD_BINUTILS_SRC=$(_SOURCE)/binutils-2.13.2.1 _BUILD_BINUTILS=$(_SOURCE)/binutils-2.13.2.1-host binutils: binutils-clean $(_BUILD_BINUTILS)/.all-done binutils-fetch: $(_PACKAGE_BINUTILS) $(_PACKAGE_BINUTILS): $(WGET) -P $(_DOWNLOAD_DIR) $(_DOWNLOAD_BINUTILS) $(_BUILD_BINUTILS_SRC)/.unpacked: $(_PACKAGE_BINUTILS) tar -C $(_SOURCE) -xjf $(_PACKAGE_BINUTILS) touch $(_BUILD_BINUTILS_SRC)/.unpacked $(_BUILD_BINUTILS_SRC)/.patched: $(_BUILD_BINUTILS_SRC)/.unpacked (cd $(_BUILD_BINUTILS_SRC); cat $(_PATCHES)/???_binutils-*.patch | patch -p1 ); touch $(_BUILD_BINUTILS_SRC)/.patched $(_BUILD_BINUTILS)/.configured: $(_BUILD_BINUTILS_SRC)/.patched mkdir -p $(_BUILD_BINUTILS) (cd $(_BUILD_BINUTILS); $(_BUILD_BINUTILS_SRC)/configure \ --build=i386-pc-linux-gnu \ --host=i386-pc-linux-gnu \ --target=mipsel-linux-uclibc \ --prefix=$(_TOOLCHAIN) \ --disable-nls \ --with-bcm4710a0 ); touch $(_BUILD_BINUTILS)/.configured $(_BUILD_BINUTILS)/.all-done: $(_BUILD_BINUTILS)/.configured make -C $(_BUILD_BINUTILS) all touch $(_BUILD_BINUTILS)/.all-done binutils-install: $(_BUILD_BINUTILS)/.all-done mkdir -p $(_TOOLCHAIN)/lib $(_TOOLCHAIN)/mipsel-linux-uclibc (cd $(_TOOLCHAIN)/mipsel-linux-uclibc; ln -s ../lib lib); make -C $(_BUILD_BINUTILS) install binutils-clean: rm -f $(_BUILD_BINUTILS)/.configured $(_BUILD_BINUTILS)/.compiled $(_BUILD_BINUTILS)/.all-done binutils-distclean: rm -rf $(_BUILD_BINUTILS) # ##################################################################### _PACKAGE_GCC=$(_DOWNLOAD_DIR)/gcc-3.2.3.tar.gz _DOWNLOAD_GCC=ftp://ftp.fu-berlin.de/unix/gnu/gcc/gcc-3.2.3.tar.gz _BUILD_GCC_SRC=$(_SOURCE)/gcc-3.2.3 _BUILD_GCC1=$(_BUILD_GCC_SRC)-initial gcc-initial: $(_BUILD_GCC1)/.all-done gcc-fetch: $(_PACKAGE_GCC) gcc-initial-fetch: $(_PACKAGE_GCC) $(_PACKAGE_GCC): $(WGET) -P $(_DOWNLOAD_DIR) $(_DOWNLOAD_GCC) $(_BUILD_GCC_SRC)/.unpacked: $(_PACKAGE_GCC) tar -C $(_SOURCE) -xzf $(_PACKAGE_GCC) touch $(_BUILD_GCC_SRC)/.unpacked $(_BUILD_GCC_SRC)/.patched: $(_BUILD_GCC_SRC)/.unpacked (cd $(_BUILD_GCC_SRC); cat $(_PATCHES)/???_gcc-*.patch | patch -p1 ); touch $(_BUILD_GCC_SRC)/.patched $(_BUILD_GCC1)/.configured: $(_BUILD_GCC_SRC)/.patched mkdir -p $(_BUILD_GCC1) (cd $(_BUILD_GCC1); $(_BUILD_GCC_SRC)/configure \ --build=i386-pc-linux-gnu \ --host=i386-pc-linux-gnu \ --target=mipsel-linux-uclibc \ --prefix=$(_TOOLCHAIN) \ --enable-languages=c \ --disable-shared \ --disable-threads \ --disable-nls \ --with-gnu-ld \ --with-gnu-as \ --with-bcm4710a0 ); touch $(_BUILD_GCC1)/.configured $(_BUILD_GCC1)/.all-done: $(_BUILD_GCC1)/.configured make -C $(_BUILD_GCC1) all-gcc touch $(_BUILD_GCC1)/.all-done gcc-initial-install: $(_BUILD_GCC1)/.all-done make -C $(_BUILD_GCC1) install-gcc gcc-initial-clean: rm -f $(_BUILD_GCC1)/.configured $(_BUILD_GCC1)/.compiled $(_BUILD_GCC1)/.all-done gcc-initial-distclean: rm -rf $(_BUILD_GCC1) # ##################################################################### _PACKAGE_UCLIBC=$(_DOWNLOAD_DIR)/uClibc-0.9.27.tar.bz2 _DOWNLOAD_UCLIBC=http://www.uclibc.org/downloads/uClibc-0.9.27.tar.bz2 _BUILD_UCLIBC=$(_SOURCE)/uClibc-0.9.27 uclibc: $(_BUILD_UCLIBC)/.all-done uclibc-fetch: $(_PACKAGE_UCLIBC) $(_PACKAGE_UCLIBC): $(WGET) -P $(_DOWNLOAD_DIR) $(_DOWNLOAD_UCLIBC) $(_BUILD_UCLIBC)/.unpacked: $(_PACKAGE_UCLIBC) tar -C $(_SOURCE) -xjf $(_PACKAGE_UCLIBC) touch $(_BUILD_UCLIBC)/.unpacked $(_BUILD_UCLIBC)/.configured: $(_BUILD_UCLIBC)/.unpacked cp $(_CONFIGS)/uclibc.conf $(_BUILD_UCLIBC)/.config sed -i -e 's:KERNEL_SOURCE=.*:KERNEL_SOURCE=\"$(_BUILD_KERNEL)\":g' $(_BUILD_UCLIBC)/.config sed -i -e 's:RUNTIME_PREFIX=.*:RUNTIME_PREFIX=\"$(_TOOLCHAIN)\":g' $(_BUILD_UCLIBC)/.config sed -i -e 's:DEVEL_PREFIX=.*:DEVEL_PREFIX=\"$(_TOOLCHAIN)\":g' $(_BUILD_UCLIBC)/.config make -C $(_BUILD_UCLIBC) oldconfig touch $(_BUILD_UCLIBC)/.configured $(_BUILD_UCLIBC)/.all-done: $(_BUILD_UCLIBC)/.configured make -C $(_BUILD_UCLIBC) CROSS=mipsel-linux-uclibc- DEVEL_PREFIX=$(_TOOLCHAIN) all make -C $(_BUILD_UCLIBC)/utils RUNTIME_PREFIX=$(_TOOLCHAIN) hostutils touch $(_BUILD_UCLIBC)/.all-done uclibc-install: $(_BUILD_UCLIBC)/.all-done make -C $(_BUILD_UCLIBC) install cp $(_BUILD_UCLIBC)/utils/ldd.host $(_TOOLCHAIN)/bin/mipsel-linux-uclibc-ldd uclibc-clean: rm -f $(_BUILD_UCLIBC)/.configured $$(_BUILD_UCLIBC)/.compiled $(_BUILD_UCLIBC)/.all-done uclibc-distclean: rm -rf $(_BUILD_UCLIBC) # ##################################################################### _BUILD_GCC2=$(_BUILD_GCC_SRC)-final gcc-final: $(_BUILD_GCC2)/.all-done $(_BUILD_GCC2)/.configured: $(_BUILD_GCC_SRC)/.patched mkdir -p $(_BUILD_GCC2) (cd $(_TOOLCHAIN)/mipsel-linux-uclibc; ln -s ../include sys-include); (cd $(_BUILD_GCC2); $(_BUILD_GCC_SRC)/configure \ --build=i386-pc-linux-gnu \ --host=i386-pc-linux-gnu \ --target=mipsel-linux-uclibc \ --prefix=$(_TOOLCHAIN) \ --enable-languages=c,c++ \ --enable-shared \ --disable-nls \ --with-gnu-ld \ --with-gnu-as \ --with-bcm4710a0 ); touch $(_BUILD_GCC2)/.configured $(_BUILD_GCC2)/.all-done: $(_BUILD_GCC2)/.configured make -C $(_BUILD_GCC2) all touch $(_BUILD_GCC2)/.all-done gcc-final-install: $(_BUILD_GCC2)/.all-done make -C $(_BUILD_GCC2) install set -e; (cd $(_TOOLCHAIN); \ ln -sf mipsel-linux-uclibc mipsel-linux; \ cd bin; \ for app in mipsel-linux-uclibc-* ; do \ ln -sf $${app} mipsel-linux$${app##mipsel-linux-uclibc}; \ done; \ ); gcc-final-clean: rm -f $(_BUILD_GCC2)/.configured $(_BUILD_GCC2)/.compiled $(_BUILD_GCC2)/.all-done gcc-final-distclean: rm -rf $(_BUILD_GCC2) # ##################################################################### # BUILD HOST UTILS # ##################################################################### _PACKAGE_CRAMFS=$(_DOWNLOAD_DIR)/cramfs-1.1.tar.gz _DOWNLOAD_CRAMFS=http://mesh.dl.sourceforge.net/sourceforge/cramfs/cramfs-1.1.tar.gz _BUILD_CRAMFS=$(_SOURCE)/cramfs-1.1 cramfs: cramfs-clean $(_BUILD_CRAMFS)/.all_done cramfs-fetch: $(_PACKAGE_CRAMFS) $(_PACKAGE_CRAMFS): $(WGET) -P $(_DOWNLOAD_DIR) $(_DOWNLOAD_CRAMFS) $(_BUILD_CRAMFS)/.unpacked: $(_PACKAGE_CRAMFS) tar -C $(_SOURCE) -xzf $(_PACKAGE_CRAMFS) touch $(_BUILD_CRAMFS)/.unpacked $(_BUILD_CRAMFS)/.all_done: $(_BUILD_CRAMFS)/.unpacked make -C $(_BUILD_CRAMFS) all touch $(_BUILD_CRAMFS)/.all_done cramfs-install: $(_BUILD_CRAMFS)/.all_done cramfs-clean: rm -f $(_BUILD_CRAMFS)/.all_done cramfs-distclean: rm -rf $(_BUILD_CRAMFS) # ##################################################################### _BUILD_TOOLS=$(_TOOLS) tools: tools-clean $(_BUILD_TOOLS)/.all-done tools-fetch: $(_BUILD_TOOLS)/.all-done: make -C $(_BUILD_TOOLS) all touch $(_BUILD_TOOLS)/.all-done tools-install: $(_BUILD_TOOLS)/.all-done tools-clean: rm -f $(_BUILD_TOOLS)/.all-done tools-distclean: tools-clean make -C $(_BUILD_TOOLS) clean # ##################################################################### # MAIN TARGETS # ##################################################################### toolchain: $(_TOOLCHAIN)/.all-done toolchain-fetch: binutils-fetch gcc-fetch uclibc-fetch kernel-fetch # binutils (+ extracted patches from broadcom hnd-tools + uclibc buildroot patches) $(_TOOLCHAIN)/.step1: binutils-install touch $(_TOOLCHAIN)/.step1 # static gcc (+ extracted patches from broadcom hnd-tools + uclibc buildroot patches) $(_TOOLCHAIN)/.step2: $(_TOOLCHAIN)/.step1 gcc-initial-install touch $(_TOOLCHAIN)/.step2 # kernel header $(_TOOLCHAIN)/.step3: $(_TOOLCHAIN)/.step2 $(_BUILD_KERNEL)/.configured touch $(_TOOLCHAIN)/.step3 # uclibc $(_TOOLCHAIN)/.step4: $(_TOOLCHAIN)/.step3 uclibc-install touch $(_TOOLCHAIN)/.step4 # shared gcc (+ extracted patches from broadcom hnd-tools + uclibc buildroot patches) $(_TOOLCHAIN)/.step5: $(_TOOLCHAIN)/.step4 gcc-final-install touch $(_TOOLCHAIN)/.step5 # final $(_TOOLCHAIN)/.all-done: $(_TOOLCHAIN)/.step5 touch $(_TOOLCHAIN)/.all-done # ##################################################################### _STAGE1_REAL_TARGETS:=$(patsubst %,%-install,$(_STAGE1_TARGETS)) _STAGE1_FETCH_TARGETS:=$(patsubst %,%-fetch,$(_STAGE1_TARGETS)) _STAGE1_CLEAN_TARGETS:=$(patsubst %,%-clean,$(_STAGE1_TARGETS)) _STAGE1_DISTCLEAN_TARGETS:=$(patsubst %,%-distclean,$(_STAGE1_TARGETS)) $(_STAGE1): mkdir -p $(_STAGE1) cp -r $(_STAGE1_SKEL)/* $(_STAGE1) $(_STAGE1_IMG): mkdir -p $(_STAGE1_IMG) stage1: $(_STAGE1) $(_STAGE1_IMG) $(_STAGE1_REAL_TARGETS) $(_BUILD_CRAMFS)/mkcramfs $(_STAGE1) $(_STAGE1_IMG)/stage1.cramfs $(_TOOLS)/trx $(_BUILD_KERNEL)/arch/mips/brcm-boards/bcm947xx/compressed/vmlinuz \ $(_STAGE1_IMG)/stage1.cramfs > \ $(_STAGE1_IMG)/firmware.trx $(_TOOLS)/gen_image $(_STAGE1_IMG)/firmware.trx > $(_STAGE1_IMG)/firmware.img stage1-fetch: $(_STAGE1_FETCH_TARGETS) stage1-clean: $(_STAGE1_CLEAN_TARGETS) rm -rf $(_STAGE1) $(_STAGE1_IMG) stage1-distclean: $(_STAGE1_DISTCLEAN_TARGETS) rm -rf $(_STAGE1) $(_STAGE1_IMG) # ##################################################################### _STAGE2_REAL_TARGETS:=$(patsubst %,%-install,$(_STAGE2_TARGETS)) _STAGE2_FETCH_TARGETS:=$(patsubst %,%-fetch,$(_STAGE2_TARGETS)) _STAGE2_CLEAN_TARGETS:=$(patsubst %,%-clean,$(_STAGE2_TARGETS)) _STAGE2_DISTCLEAN_TARGETS:=$(patsubst %,%-distclean,$(_STAGE2_TARGETS)) $(_STAGE2): mkdir -p $(_STAGE2) cp -r $(_STAGE2_SKEL)/* $(_STAGE2) stage2: $(_STAGE2) $(_STAGE2_REAL_TARGETS) cp -r $(_STAGE2_SKEL)/* $(_STAGE2) cp -r $(_TOOLCHAIN)/lib/*.so* $(_STAGE2)/lib/ stage2-fetch: $(_STAGE2_FETCH_TARGETS) stage2-clean: $(_STAGE2_CLEAN_TARGETS) stage2-distclean: $(_STAGE2_DISTCLEAN_TARGETS) rm -rf $(_STAGE2) # ##################################################################### # SUPPORT # ##################################################################### sync: mount /dev/sda1 /mnt/usbdisk rsync -a -c --delete --progress --stats $(_STAGE2)/ /mnt/usbdisk umount /mnt/usbdisk