build-avr-toolchain 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. #!/bin/bash
  2. # http://www.nongnu.org/avr-libc/user-manual/install_tools.html
  3. # Stop on errors
  4. set -e
  5. if [ ! -f .prereq ];then ./prerequise.sh ;fi
  6. archi=$(uname -m | awk {'print$1'} | head -c3)
  7. source avr-file-names
  8. function binutils (){
  9. # Figure out which version of the patch to use
  10. OLD_PATCH_CUTOFF="2.32"
  11. OLD_PATCH_CUTOFF_MAJ=${OLD_PATCH_CUTOFF%%.*}
  12. OLD_PATCH_CUTOFF_MIN=${OLD_PATCH_CUTOFF#*.}
  13. BINUTILS_VER=${NAME_BINUTILS#binutils-}
  14. BINUTILS_VER_MAJ=${BINUTILS_VER%%.*}
  15. BINUTILS_VER_MIN_TMP=${BINUTILS_VER#*.}
  16. BINUTILS_VER_MIN=${BINUTILS_VER_MIN_TMP%.*}
  17. if [ $BINUTILS_VER_MAJ -eq "1" ]; then
  18. echo "ERROR: Binutils version 1.xx is too old -- use at least version 2.xx"
  19. exit 1;
  20. fi
  21. if [ $BINUTILS_VER_MAJ -gt $OLD_PATCH_CUTOFF_MAJ ] || \
  22. ( [ $BINUTILS_VER_MAJ -eq $OLD_PATCH_CUTOFF_MAJ ] && [ $BINUTILS_VER_MIN -gt $OLD_PATCH_CUTOFF_MIN ] ) ; then
  23. NAME_BINUTILS_SIZE_PATCH="avr-binutils-size-2.33.patch";
  24. else
  25. NAME_BINUTILS_SIZE_PATCH="avr-binutils-size-2.32.patch";
  26. fi
  27. TIME_START=$(date +%s)
  28. makeDir()
  29. {
  30. rm -rf "$1/"
  31. mkdir -p "$1"
  32. }
  33. echo "Downloading sources..."
  34. if [ ! -f $NAME_BINUTILS.tar.xz ]; then
  35. wget http://wareck.free.fr/cross_compilation/avr_toolchain/$NAME_BINUTILS.tar.xz
  36. fi
  37. # Make AVR-Binutils
  38. NAME_BINUTILS_BLD=${NAME_BINUTILS}_bld
  39. echo "Making Binutils in $NAME_BINUTILS_BLD..."
  40. echo "Extracting..."
  41. rm -rf $NAME_BINUTILS/
  42. tar xJf $NAME_BINUTILS.tar.xz
  43. # Patch the size function
  44. cd $NAME_BINUTILS/binutils
  45. patch -p 1 < ../../pack/$NAME_BINUTILS_SIZE_PATCH
  46. cd ../..
  47. makeDir $NAME_BINUTILS_BLD
  48. cd $NAME_BINUTILS_BLD
  49. ../$NAME_BINUTILS/configure --prefix=$PREFIX --target=avr --disable-nls
  50. make -j $JOBCOUNT
  51. sudo make install-strip
  52. cd ..
  53. TIME_END=$(date +%s)
  54. TIME_RUN=$(($TIME_END - $TIME_START))
  55. echo ""
  56. echo "Done in $TIME_RUN seconds"
  57. }
  58. function avr-gcc () {
  59. source avr-file-names
  60. TIME_START=$(date +%s)
  61. makeDir()
  62. {
  63. rm -rf "$1/"
  64. mkdir -p "$1"
  65. }
  66. echo "Downloading sources..."
  67. if [ ! -f $NAME_GCC.tar.xz ]; then
  68. wget http://wareck.free.fr/cross_compilation/avr_toolchain/$NAME_GCC.tar.xz
  69. fi
  70. # Make AVR-GCC
  71. NAME_GCC_BLD=${NAME_GCC}_bld
  72. echo "Making GCC in $NAME_GCC_BLD..."
  73. echo "Extracting..."
  74. rm -rf $NAME_GCC/
  75. tar xJf $NAME_GCC.tar.xz
  76. # Patch the download_prerequisites script
  77. cd $NAME_GCC
  78. sed -i 's/ftp/https/g' ./contrib/download_prerequisites
  79. ./contrib/download_prerequisites
  80. cd ..
  81. makeDir $NAME_GCC_BLD
  82. cd $NAME_GCC_BLD
  83. ../$NAME_GCC/configure --prefix=$PREFIX --target=avr --enable-languages=c,c++ --disable-nls --disable-libssp --disable-libada --with-dwarf2 --disable-shared --enable-static
  84. make -j $JOBCOUNT
  85. sudo make install-strip
  86. cd ..
  87. TIME_END=$(date +%s)
  88. TIME_RUN=$(($TIME_END - $TIME_START))
  89. echo ""
  90. echo "Done in $TIME_RUN seconds"
  91. }
  92. function avr-gdb () {
  93. source avr-file-names
  94. TIME_START=$(date +%s)
  95. makeDir()
  96. {
  97. rm -rf "$1/"
  98. mkdir -p "$1"
  99. }
  100. echo "Downloading sources..."
  101. if [ ! -f $NAME_GDB.tar.xz ]; then
  102. wget http://wareck.free.fr/cross_compilation/avr_toolchain/$NAME_GDB.tar.xz
  103. fi
  104. # Make AVR-libc
  105. NAME_GDB_BLD=${NAME_GDB}_bld
  106. echo "Making AVR-GDB in $NAME_GDB_BLD..."
  107. echo "Extracting..."
  108. rm -rf $NAME_GDB/
  109. tar xJf $NAME_GDB.tar.xz
  110. makeDir $NAME_GDB_BLD
  111. cd $NAME_GDB_BLD
  112. ../$NAME_GDB/configure --prefix=$PREFIX --target=avr
  113. make -j $JOBCOUNT
  114. sudo make install
  115. cd ..
  116. TIME_END=$(date +%s)
  117. TIME_RUN=$(($TIME_END - $TIME_START))
  118. echo ""
  119. echo "Done in $TIME_RUN seconds"
  120. }
  121. function avr-libc () {
  122. source avr-file-names
  123. TIME_START=$(date +%s)
  124. makeDir()
  125. {
  126. rm -rf "$1/"
  127. mkdir -p "$1"
  128. }
  129. echo "Downloading sources..."
  130. if [ ! -f $NAME_LIBC.tar.xz ]; then
  131. wget http://wareck.free.fr/cross_compilation/avr_toolchain/$NAME_LIBC.tar.xz
  132. fi
  133. # Make AVR-libc
  134. NAME_LIBC_BLD=${NAME_LIBC}_bld
  135. echo "Making AVR-LIBC in $NAME_LIBC_BLD..."
  136. echo "Extracting..."
  137. rm -rf $NAME_LIBC/
  138. tar xJf $NAME_LIBC.tar.xz
  139. makeDir $NAME_LIBC_BLD
  140. AR='avr-ar'
  141. AS='avr-as'
  142. CC='avr-gcc'
  143. CCAS='gcc'
  144. cd $NAME_LIBC_BLD
  145. ../$NAME_LIBC/configure --prefix=$PREFIX --build=$(../$NAME_LIBC/config.guess) --host=avr
  146. make -j $JOBCOUNT
  147. sudo env "PATH=$PATH" make install-strip
  148. cd ..
  149. TIME_END=$(date +%s)
  150. TIME_RUN=$(($TIME_END - $TIME_START))
  151. echo ""
  152. echo "Done in $TIME_RUN seconds"
  153. }
  154. function build-simu (){
  155. source avr-file-names
  156. TIME_START=$(date +%s)
  157. echo "Downloading sources..."
  158. wget -c http://wareck.free.fr/cross_compilation/avr_toolchain/simulavr.tar.xz
  159. tar xfJ simulavr.tar.xz
  160. # Make simulavr
  161. echo "Making simulavr in $NAME_SIMULAVR..."
  162. cd $NAME_SIMULAVR/
  163. git checkout traumflug
  164. cp ../pack/simulavr_patch1.patch .
  165. cp ../pack/simulavr_patch2.patch .
  166. patch -p1 < simulavr_patch1.patch
  167. patch -p1 < simulavr_patch2.patch
  168. ./bootstrap
  169. ./configure --enable-tcl --prefix=$PREFIX
  170. make
  171. sudo make install-strip
  172. cd ..
  173. TIME_END=$(date +%s)
  174. TIME_RUN=$(($TIME_END - $TIME_START))
  175. echo ""
  176. echo "Done in $TIME_RUN seconds"
  177. }
  178. function avdude(){
  179. source avr-file-names
  180. TIME_START=$(date +%s)
  181. makeDir()
  182. {
  183. rm -rf "$1/"
  184. mkdir -p "$1"
  185. }
  186. echo "Downloading sources..."
  187. if [ ! -f $NAME_AVRDUDE.tar.xz ]; then
  188. wget http://wareck.free.fr/cross_compilation/avr_toolchain/$NAME_AVRDUDE.tar.xz
  189. fi
  190. # Make avrdude
  191. NAME_AVRDUDE_BLD=${NAME_AVRDUDE}_bld
  192. echo "Making AVRDUDE in $NAME_AVRDUDE_BLD..."
  193. echo "Extracting..."
  194. rm -rf $NAME_AVRDUDE/
  195. tar xJf $NAME_AVRDUDE.tar.xz
  196. makeDir $NAME_AVRDUDE_BLD
  197. cd $NAME_AVRDUDE_BLD
  198. if [ $archi = "arm" ]
  199. then
  200. ../$NAME_AVRDUDE/configure --prefix=$PREFIX --enable-linuxgpio=yes
  201. else
  202. ../$NAME_AVRDUDE/configure --prefix=$PREFIX
  203. fi
  204. make -j $JOBCOUNT
  205. sudo make install-strip
  206. cd ..
  207. TIME_END=$(date +%s)
  208. TIME_RUN=$(($TIME_END - $TIME_START))
  209. echo ""
  210. echo "Done in $TIME_RUN seconds"
  211. }
  212. binutils
  213. avr-gcc
  214. avr-gdb
  215. avr-libc
  216. build-simu
  217. avdude