3 # Abort execution as soon as an error is encountered
4 # That way the script do not let the user think the process completed correctly
5 # and leave the opportunity to fix the problem and restart compilation where
9 # this is where this script will store downloaded files and check for already
11 dlwhere
="${RBDEV_DOWNLOAD:-/tmp/rbdev-dl}"
13 # will append the target string to the prefix dir mentioned here
14 # Note that the user running this script must be able to do make install in
15 # this given prefix directory. Also make sure that this given root dir
17 prefix
="${RBDEV_PREFIX:-/usr/local}"
19 # This directory is used to extract all files and to build everything in. It
20 # must not exist before this script is invoked (as a security measure).
21 builddir
="${RBDEV_BUILD:-/tmp/rbdev-build}"
23 # This script needs to use GNU Make. On Linux systems, GNU Make is invoked
24 # by running the "make" command, on most BSD systems, GNU Make is invoked
25 # by running the "gmake" command. Set the "make" variable accordingly.
26 if [ -f "`which gmake 2>/dev/null`" ]; then
32 if [ -z $GNU_MIRROR ] ; then
33 GNU_MIRROR
=http
://mirrors.kernel.org
/gnu
36 # These are the tools this script requires and depends upon.
37 reqtools
="gcc bzip2 make patch makeinfo"
39 ##############################################################################
48 # echo "Checks for $file in $path" >&2
49 if test -f "$path/$file"; then
65 if test -z "$tool"; then
67 if test -n "$tool"; then
69 echo "ROCKBOXDEV: Downloading $2/$1 using wget"
70 $tool -O $dlwhere/$1 $2/$1
74 echo "ROCKBOXDEV: Downloading $2/$1 using curl"
75 $tool -Lo $dlwhere/$1 $2/$1
78 if [ $?
-ne 0 ] ; then
79 echo "ROCKBOXDEV: couldn't download the file!"
80 echo "ROCKBOXDEV: check your internet connection"
84 if test -z "$tool"; then
85 echo "ROCKBOXDEV: No downloader tool found!"
86 echo "ROCKBOXDEV: Please install curl or wget and re-run the script"
100 patch_url
="http://www.rockbox.org/gcc"
104 file="gcc-core-$version.tar.bz2"
105 url
="$GNU_MIRROR/gcc/gcc-$version"
109 file="binutils-$version.tar.bz2"
110 url
="$GNU_MIRROR/binutils"
114 echo "ROCKBOXDEV: Bad toolname $toolname"
119 # create build directory
120 if test -d $builddir; then
121 if test ! -w $builddir; then
122 echo "ROCKBOXDEV: No write permission for $builddir"
129 # download source tarball
130 if test ! -f "$dlwhere/$file"; then
131 getfile
"$file" "$url"
135 if test -n "$patch"; then
136 if test ! -f "$dlwhere/$patch"; then
137 getfile
"$patch" "$patch_url"
143 echo "ROCKBOXDEV: extracting $file"
144 tar xjf
$dlwhere/$file
146 # do we have a patch?
147 if test -n "$patch"; then
148 echo "ROCKBOXDEV: applying patch $patch"
151 (cd $builddir/$toolname-$version && patch -p1 < "$dlwhere/$patch")
153 # check if the patch applied cleanly
154 if [ $?
-gt 0 ]; then
155 echo "ROCKBOXDEV: failed to apply patch $patch"
160 # kludge to avoid having to install GMP and MPFR for new gcc
161 if test -n "$needs_gmp"; then
163 if test ! -d gmp
; then
164 echo "ROCKBOXDEV: Getting GMP"
165 if test ! -f $dlwhere/gmp-5.0
.1.
tar.bz2
; then
166 getfile
"gmp-5.0.1.tar.bz2" "$GNU_MIRROR/gmp"
168 tar xjf
$dlwhere/gmp-5.0
.1.
tar.bz2
172 if test ! -d mpfr
; then
173 echo "ROCKBOXDEV: Getting MPFR"
174 if test ! -f $dlwhere/mpfr-2.4
.2.
tar.bz2
; then
175 getfile
"mpfr-2.4.2.tar.bz2" "$GNU_MIRROR/mpfr"
177 tar xjf
$dlwhere/mpfr-2.4
.2.
tar.bz2
178 ln -s mpfr-2.4
.2 mpfr
183 echo "ROCKBOXDEV: mkdir build-$toolname"
184 mkdir build-
$toolname
186 echo "ROCKBOXDEV: cd build-$toolname"
189 echo "ROCKBOXDEV: $toolname/configure"
190 CFLAGS
=-U_FORTIFY_SOURCE ..
/$toolname-$version/configure
--target=$target --prefix=$prefix --enable-languages=c
--disable-libssp --disable-docs $configure_params
192 echo "ROCKBOXDEV: $toolname/make"
195 echo "ROCKBOXDEV: $toolname/make install"
201 ##############################################################################
204 # Verify required tools
205 for t
in $reqtools; do
207 if test -z "$tool"; then
208 echo "ROCKBOXDEV: \"$t\" is required for this script to work."
209 echo "ROCKBOXDEV: Please install \"$t\" and re-run the script."
214 echo "Download directory : $dlwhere (set RBDEV_DOWNLOAD to change)"
215 echo "Install prefix : $prefix (set RBDEV_PREFIX to change)"
216 echo "Build dir : $builddir (set RBDEV_BUILD to change)"
217 echo "Make options : $MAKEFLAGS (set MAKEFLAGS to change)"
220 # Verify download directory
221 if test -d "$dlwhere"; then
222 if ! test -w "$dlwhere"; then
223 echo "ROCKBOXDEV: No write permission for $dlwhere"
228 if test $?
-ne 0; then
229 echo "ROCKBOXDEV: Failed creating directory $dlwhere"
234 # Verify the prefix dir
235 if test ! -d $prefix; then
237 if test $?
-ne 0; then
238 echo "ROCKBOXDEV: Failed creating directory $prefix"
242 if test ! -w $prefix; then
243 echo "ROCKBOXDEV: No write permission for $prefix"
247 echo "Select target arch:"
248 echo "s - sh (Archos models)"
249 echo "m - m68k (iriver h1x0/h3x0, iaudio m3/m5/x5 and mpio hd200)"
250 echo "e - arm-eabi (ipods, iriver H10, Sansa, D2, Gigabeat, etc)"
251 echo "a - arm (older ARM toolchain, deprecated) "
252 echo "i - mips (Jz4740 and ATJ-based players)"
253 echo "separate multiple targets with spaces"
254 echo "(Example: \"s m a\" will build sh, m86k and arm)"
260 # add target dir to path to ensure the new binutils are used in gcc build
261 PATH
="$prefix/bin:${PATH}"
268 build
"binutils" "sh-elf" "2.16.1"
269 build
"gcc" "sh-elf" "4.0.3" "gcc-4.0.3-rockbox-1.diff"
273 build
"binutils" "mipsel-elf" "2.17" "" "--disable-werror"
275 if [ "$system" = "Interix" ]; then
276 patch="gcc-4.1.2-interix.diff"
278 build
"gcc" "mipsel-elf" "4.1.2" "$patch"
282 build
"binutils" "m68k-elf" "2.16.1"
285 CYGWIN
* | Darwin | FreeBSD | Interix | SunOS
)
286 patch="gcc-3.4.6.patch"
290 if [ "$machine" = "x86_64" ]; then
291 patch="gcc-3.4.6-amd64.patch"
295 build
"gcc" "m68k-elf" "3.4.6" "$patch"
299 build
"binutils" "arm-elf" "2.16.1"
300 build
"gcc" "arm-elf" "4.0.3" "rockbox-multilibs-arm-elf-gcc-4.0.3_3.diff"
304 build
"binutils" "arm-elf-eabi" "2.20.1" "binutils-2.20.1-ld-thumb-interwork-long-call.diff"
305 build
"gcc" "arm-elf-eabi" "4.4.4" "rockbox-multilibs-noexceptions-arm-elf-eabi-gcc-4.4.2_1.diff" "" "needs_gmp"
309 echo "ROCKBOXDEV: Unsupported architecture option: $arch"
316 echo "ROCKBOXDEV: Done!"
318 echo "ROCKBOXDEV: Make sure your PATH includes $prefix/bin"