#!/bin/bash builddir=./build prepare() { test -d $builddir || mkdir $builddir #Get the OpenWrt Core Source for Firmware svn checkout -r 35298 svn://svn.openwrt.org/openwrt/branches/attitude_adjustment/ $target # overwrite feeds (from r38172) to support commit ids in feeds.conf cp ./build_patches/openwrt/feeds $target/scripts/feeds #apply own feeds.conf cp ./build_patches/feeds.conf $target/feeds.conf test -d $target/feeds && /bin/rm -rf $target/feeds $target/scripts/feeds update $target/scripts/feeds install -p packagesol nodewatcher $target/scripts/feeds install -p fastd fastd libuecc $target/scripts/feeds install -p routing alfred kmod-batman-adv kmod-batgat $target/scripts/feeds install -p packages bridge ethtool gpioctl-sysfs horst libugpio mii-tool wavemon kmod-gpiotoggling #fix for building toolchain on texinfo>=5 cp -a build_patches/toolchain $target # This changes the default behavior of sysupgrade to not save the config cat build_patches/sysupgrade_no_config_save.patch | patch -p0 -d $target # This adds the sysctl load just before the network comes up cat build_patches/invoke_sysctl_before_network.patch | patch -p0 -d $target # use nbd's backport of mac80211 /bin/rm -rf $target/package/mac80211 /bin/rm -rf $target/package/hostapd git clone git://nbd.name/aa-mac80211.git $target/package/aa-mac80211 git --git-dir=$target/package/aa-mac80211/.git --work-tree=$target/package/aa-mac80211/ \ checkout 767acbf0045924a0619cd494ec72edbbdad7a95e mv $target/package/aa-mac80211/mac80211 $target/package/mac80211 mv $target/package/aa-mac80211/hostapd $target/package/hostapd svn up -r 37378 $target/target/linux/generic/files/include/linux/ath9k_platform.h #backport the latests kernel fixes (needed for newer batman) svn up -r 37768 $target/target/linux/generic/patches-3.3 #backport kernelpatches from openwrt r36664 cp build_patches/linux/ar71xx/patches-3.3/* $target/target/linux/ar71xx/patches-3.3 #saves ~200MB for each build test -d ./dl || mkdir ./dl ln -s ../../dl $target/dl board_prepare } prebuild() { #create filesdir for our config /bin/rm -rf $target/files mkdir $target/files cp -r ./bsp/default/root_file_system/* $target/files/ board_prebuild for template in $(find $target/files -name *.tpl) do echo "Translating $template .." $tpl_translate $template > $(dirname $template)/$(basename $template .tpl) /bin/rm $template done #insert actual firware version informations into release file version=$(git describe --tags --dirty) echo "FIRMWARE_VERSION=\"$version\"" > $target/files/etc/firmware_release echo "RELEASE_DATE=\"build date: "`date`"\"" >> $target/files/etc/firmware_release echo "FIRMWARE_REVISION=\"build date: "`date`"\"" >> $target/files/etc/firmware_release echo "OPENWRT_CORE_REVISION=\""`svn info $target |grep Revision: |cut -c11-`"\"" >> $target/files/etc/firmware_release echo "OPENWRT_FEEDS_PACKAGES_REVISION=\""`svn info $target/feeds/packages |grep Revision: |cut -c11-`"\"" >> $target/files/etc/firmware_release } build() { prebuild opath=$(pwd) cd $target cpus=$(grep processor /proc/cpuinfo | wc -l) case "$1" in "debug") make V=99 ;; "fast") ionice -c 2 -- nice -n 1 -- make -j$[$cpus*2] ;; *) ionice -c 3 -- nice -n 10 -- make -j$[$cpus+1] ;; esac # actually this does northing! # rm -rf ./build_dir/files/ cd $opath if [ ! -d bin ]; then mkdir bin fi postbuild } postbuild() { board_postbuild } flash() { # some flash tools need an arguement.. board_flash $1 } clean() { board_clean /bin/rm -rf bin $builddir } buildall() { for bsp in $(/bin/ls bsp/*.bsp) do ./buildscript selectcommunity $1 ./buildscript selectbsp $bsp ./buildscript prepare ./buildscript build done } routers() { echo "router-types: " echo " dir300" echo " dir300b_adhoc" echo " dir300b_ap" echo " fonera" echo " wrt54g_ap" echo " wrt54g_adhoc" echo " wr741nd" echo " wr1043nd" } if [ "$1" != "selectbsp" -a "$1" != "selectcommunity" -a "$1" != "buildall" ]; then if [ ! -h selected_bsp ]; then echo "Please select a Board-Support-Package using:" echo "$0 selectbsp" exit fi if [ ! -h selected_community ]; then echo "Please select a community file using:" echo "$0 selectcommunity" exit fi echo "Working with $(/bin/ls -l selected_bsp | awk '{ print $11 }') and" \ "$(/bin/ls -l selected_community | awk '{ print $11 }')" . selected_bsp tpl_translate=$(awk -F= 'BEGIN{printf("sed")} /^.+$/{gsub("/", "\\/", $0); printf(" -es/\\${%s}/%s/g",$1,$2)}' selected_community) echo fi case "$1" in "selectbsp") if [ "$2" = "help" ] || [ "$2" = "" ]; then echo "Select a Board-Support-Package:" echo echo "Usage: $0 $1 bsp" echo "bsp: " /bin/ls bsp/*.bsp else if [ ! -f $2 ]; then echo "Could not find $2" else /bin/rm -rf selected_bsp /bin/ln -s $2 selected_bsp fi fi ;; "selectcommunity") if [ "$2" = "help" ] || [ "$2" = "" ]; then echo "Select a Community-File:" echo echo "Usage: $0 $1 community.cfg" echo "community.cfg: " /bin/ls community/*.cfg else if [ ! -f $2 ]; then echo "Could not find $2" else /bin/rm -rf selected_community /bin/ln -s $2 selected_community fi fi ;; "prepare") if [ "$2" = "help" ] || [ "$2" = "x" ]; then echo "This option fetches the sources for the images and configurates the build so that it can be compiled" echo "Usage: $0 $1" else prepare fi ;; "build") if [ "$2" = "help" ] || [ "$2" = "x" ]; then echo "This option compiles the firmware" echo "Normaly the build uses lower IO and System priorities, " echo "you can append \"fast\" option, to use normal user priorities" echo "Usage: $0 $1 [fast|debug]" else build "$2" fi ;; "download") if [ "$2" = "help" ] || [ "$2" = "" ]; then echo "This option downloads the ready configured images from an external location if needet." echo "Usage: $0 $1 http://downloadfolder router-type" echo "Common downloadfolder for firmware version 0.3 is http://dev.freifunk-ol.de/firmware/0.3/" routers echo echo echo "This function is broken!" else exit mkdir ./bin cd ./bin wget "$2/$3/openwrt-$3-root.squashfs" wget "$2/$3/openwrt-$3-vmlinux.lzma" cd .. fi ;; "flash") if [ "$2" = "help" ] || [ "$2" = "x" ]; then echo "This option flashes the router." echo "$0 $1 net-dev" routers echo "net-dev:" echo " ethX" else flash "$2" fi ;; "clean") if [ "$2" = "help" ] || [ "$2" = "x" ]; then echo "This option cleans all build files." echo "$0 $1 all" else clean fi ;; "buildall") if [ "$2" = "help" ] || [ "$2" = "" ]; then echo "This option builds the firmware for all routers of a given community." echo "Usage: $0 $1 community.cfg" echo "community.cfg: " /bin/ls community/*.cfg else buildall $2 fi ;; *) echo "This is the Build Environment Script of the Freifunk Community Oldenburg." echo "Usage: $0 command" echo "command:" echo " selectcommunity [communityfile]" echo " selectbsp [bsp file]" echo " prepare" echo " build" echo " flash" echo " download" echo "" echo "If you need help to one of these options just type $0 command help" ;; esac # vim: noexpandtab