firmware/buildscript

281 lines
7.3 KiB
Plaintext
Raw Normal View History

#!/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
2013-07-14 13:59:22 +02:00
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