build-avr-toolchain 5.4 KB

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