Support building gold from a separate directory.
[android/toolchain/build.git] / configure.ac
1 #   Copyright (C) 2008, 2010 Google Inc.
2 #
3 # This file is free software; you can redistribute it and/or modify it
4 # under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 2 of the License, or
6 # (at your option) any later version.
7 #
8 # This program is distributed in the hope that it will be useful, but
9 # WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 # General Public License for more details.
12 #
13
14 AC_INIT(android-tools,2.0)
15 AC_PREREQ(2.59)
16
17 AC_CONFIG_FILES([Makefile])
18
19 AC_CANONICAL_SYSTEM
20
21 # We only allow the following 3 targets:
22 # 1. arm-linux-androideabi (primary target)
23 # 2. arm-eabi (for Android kernel)
24 # 3. arm-newlib-eabi (for gcc testing)
25 # 4.i[3456]86-*-linux-gnu, x86-*-linux-gnu (for x86 targets)
26
27 GDB_TARGET=$target
28 case $target in
29   arm-unknown-linux-androideabi | arm-unknown-eabi)
30     BUILD_ANDROID_GCC=yes
31     GDB_TARGET=arm-elf-linux
32     ;;
33   arm-newlib-elf)
34     BUILD_ANDROID_GCC=no
35     ;;
36   i[[3456]]86-*-linux-gnu | x86_64-*-linux-gnu)
37     BUILD_ANDROID_GCC=yes
38     ;;
39   *)
40     AC_MSG_ERROR(Unsupported target $target.);
41 esac
42 AC_SUBST(BUILD_ANDROID_GCC)
43 AC_SUBST(GDB_TARGET)
44 AC_ARG_PROGRAM
45
46 # TOPLEVEL_CONFIGURE_ARGUMENTS lifted from top-level configure.ac in gcc.
47
48 # Export original configure arguments for use by sub-configures.
49 # Quote arguments with shell meta charatcers.
50 TOPLEVEL_CONFIGURE_ARGUMENTS=
51 TOPLEVEL_NO_GOLD_CONFIGURE_ARGUMENTS=
52
53 set -- "$progname" "$@"
54 for ac_arg
55 do
56   case "$ac_arg" in
57   *" "*|*"      "*|*[[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\']]*)
58     ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"`
59     # if the argument is of the form -foo=baz, quote the baz part only
60     ac_arg=`echo "'$ac_arg'" | sed "s/^'\([[-a-zA-Z0-9]]*=\)/\\1'/"` ;;
61   *) ;;
62   esac
63   # Add the quoted argument to the list.
64   TOPLEVEL_CONFIGURE_ARGUMENTS="$TOPLEVEL_CONFIGURE_ARGUMENTS $ac_arg"
65 done
66 if test "$silent" = yes; then
67   TOPLEVEL_CONFIGURE_ARGUMENTS="$TOPLEVEL_CONFIGURE_ARGUMENTS --silent"
68 fi
69 # Remove the initial space we just introduced and, as these will be
70 # expanded by make, quote '$'.
71 TOPLEVEL_CONFIGURE_ARGUMENTS=`echo "x$TOPLEVEL_CONFIGURE_ARGUMENTS" | sed -e 's/^x *//' -e 's,\\$,$$,g'`
72 AC_SUBST(TOPLEVEL_CONFIGURE_ARGUMENTS)
73
74 # Base args.  Strip norecursion, cache-file, srcdir, host, build,
75 # target, nonopt, and variable assignments.  These are the ones we
76 # might not want to pass down to subconfigures.  Also strip
77 # program-prefix, program-suffix, and program-transform-name, so that
78 # we can pass down a consistent program-transform-name.
79 baseargs=
80 keep_next=no
81 skip_next=no
82 eval "set -- $ac_configure_args"
83 for ac_arg
84 do
85   if test X"$skip_next" = X"yes"; then
86     skip_next=no
87     continue
88   fi
89   if test X"$keep_next" = X"yes"; then
90     case $ac_arg in
91       *\'*)
92         ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
93     esac
94     baseargs="$baseargs '$ac_arg'"
95     keep_next=no
96     continue
97   fi
98
99   # Handle separated arguments.  Based on the logic generated by
100   # autoconf 2.59.
101   case $ac_arg in
102     *=* | --config-cache | -C | -disable-* | --disable-* \
103       | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
104       | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
105       | -with-* | --with-* | -without-* | --without-* | --x)
106       separate_arg=no
107       ;;
108     -*)
109       separate_arg=yes
110       ;;
111     *)
112       separate_arg=no
113       ;;
114   esac
115
116   case "$ac_arg" in
117     --no*)
118       continue
119       ;;
120     --c* | \
121     --sr* | \
122     --ho* | \
123     --bu* | \
124     --t* | \
125     --program-* | \
126     -cache_file* | \
127     -srcdir* | \
128     -host* | \
129     -build* | \
130     -target* | \
131     -program-prefix* | \
132     -program-suffix* | \
133     -program-transform-name* )
134       skip_next=$separate_arg
135       continue
136       ;;
137     -*)
138       # An option.  Add it.
139       case $ac_arg in
140         *\'*)
141           ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
142       esac
143       baseargs="$baseargs '$ac_arg'"
144       keep_next=$separate_arg
145       ;;
146     *)
147       # Either a variable assignment, or a nonopt (triplet).  Don't
148       # pass it down; let the Makefile handle this.
149       continue
150       ;;
151   esac
152 done
153 # Remove the initial space we just introduced and, as these will be
154 # expanded by make, quote '$'.
155 baseargs=`echo "x$baseargs" | sed -e 's/^x *//' -e 's,\\$,$$,g'`
156
157 # Add in --program-transform-name, after --program-prefix and
158 # --program-suffix have been applied to it.  Autoconf has already
159 # doubled dollar signs and backslashes in program_transform_name; we want
160 # the backslashes un-doubled, and then the entire thing wrapped in single
161 # quotes, because this will be expanded first by make and then by the shell.
162 # Also, because we want to override the logic in subdir configure scripts to
163 # choose program_transform_name, replace any s,x,x, with s,y,y,.
164 sed -e "s,\\\\\\\\,\\\\,g; s,','\\\\'',g; s/s,x,x,/s,y,y,/" <<EOF_SED > conftestsed.out
165 ${program_transform_name}
166 EOF_SED
167 gcc_transform_name=`cat conftestsed.out`
168 rm -f conftestsed.out
169 baseargs="$baseargs --program-transform-name='${gcc_transform_name}'"
170 if test "$silent" = yes; then
171   baseargs="$baseargs --silent"
172 fi
173
174 AC_SUBST(baseargs)
175
176 # Strip --{enable|disable}-{gold|ld}* from baseargs.  These are used for the
177 # gold binutils.  Note that baseargs are quoted.
178 gold_baseargs=
179 for ac_arg in $baseargs
180 do
181   case $ac_arg in
182   \'--enable-gold\' | \'--enable-gold=*\' | \'--disable-gold\' | \
183    \'--enable-ld\' | \'--enable-ld=*\' | \'--disable-ld\' )
184     ;;
185   *)
186     gold_baseargs="$gold_baseargs $ac_arg"
187     ;;
188   esac
189 done
190
191 AC_SUBST(gold_baseargs)
192
193 #
194 # Check for Canadian cross, which is not supported.
195 #
196 AC_MSG_CHECKING([for Canadian cross])
197 if test $build != $host ; then
198   AC_MSG_ERROR(Canadian cross build not supported.)
199 fi
200 AC_MSG_RESULT(no)
201
202 # package to source path
203 case $srcdir in
204  /* | [A-Za-z]:*) package_to_srcdir=$srcdir ;;
205  *) package_to_srcdir=../$srcdir ;;
206 esac
207 AC_SUBST(package_to_srcdir)
208 #
209 # Specify tool component versions
210 #
211
212 # macro to check that we have a package. A package x exists if any one
213 # of the following exists (x is in the format of "tool-version"):
214 # 1. tool/x
215 # 2. tool/x.tar.gz
216 # 3. tool/x.tgz
217 # 4. tool/x.tar.bz2
218 m4_pattern_allow([^AC_MSG_ERROR$])
219 AC_DEFUN([ANDROID_CHECK_PACKAGE],
220 [x=$1; tool=$(echo "$x" | sed -e 's/-.*//'); \
221 if test ! -d $srcdir/../$tool/$1 ; then
222   if test -f $srcdir/../$tool/$1.tar ; then
223     mkdir -p temp-src && tar -C temp-src -xf $srcdir/../$tool/$1.tar
224   elif test -f $srcdir/../$tool/$1.tar.gz ; then
225     mkdir -p temp-src && tar -C temp-src -xzf $srcdir/../$tool/$1.tar.gz
226   elif test -f $srcdir/../$tool/$1.tgz ; then
227     mkdir -p temp-src && tar -C temp-src -xzf $srcdir/../$tool/$1.tgz
228   elif test -f $srcdir/../$tool/$1.tar.bz2 ; then
229     mkdir -p temp-src && tar -C temp-src -xjf $srcdir/../$tool/$1.tar.bz2
230   elif test -f $srcdir/../tarballs/$1.tar ; then
231     mkdir -p temp-src && tar -C temp-src -xf $srcdir/../tarballs/$1.tar
232   elif test -f $srcdir/../tarballs/$1.tar.gz ; then
233     mkdir -p temp-src && tar -C temp-src -xzf $srcdir/../tarballs/$1.tar.gz
234   elif test -f $srcdir/../tarballs/$1.tgz ; then
235     mkdir -p temp-src && tar -C temp-src -xzf $srcdir/../tarballs/$1.tgz
236   elif test -f $srcdir/../tarballs/$1.tar.bz2 ; then
237     mkdir -p temp-src && tar -C temp-src -xjf $srcdir/../tarballs/$1.tar.bz2
238   else
239     AC_MSG_ERROR('package $1 does not exist.')
240   fi
241 fi ])
242
243 # binutils version (default is 2.17)
244 AC_MSG_CHECKING([target binutils version to build])
245 AC_ARG_WITH([binutils-version],
246   [  --with-binutils-version=VERSION
247                           use binutils-VERSION (default is 2.17)],
248   [if test x"$withval" != x ; then
249      BINUTILS_VERSION="$withval"
250    fi],
251 [BINUTILS_VERSION="2.17"])
252 AC_MSG_RESULT($BINUTILS_VERSION)
253 AC_SUBST(BINUTILS_VERSION)
254 ANDROID_CHECK_PACKAGE(binutils-${BINUTILS_VERSION})
255
256 # gold binutils version (default is the same version as the main
257 # binutils package).
258 GOLD_VERSION="$BINUTILS_VERSION"
259 AC_MSG_CHECKING([target gold binutils version to build])
260 AC_ARG_WITH([gold-version],
261   [  --with-gold-version=VERSION
262                           use binutils-VERSION for gold (default is the main binutils version)],
263   [if test x"$withval" != x ; then
264      GOLD_VERSION="$withval"
265    fi])
266 AC_MSG_RESULT($GOLD_VERSION)
267 AC_SUBST(GOLD_VERSION)
268
269 # Skip check if we are using the main binutils for gold.
270 if test x"$GOLD_VERSION" != x"$BINUTILS_VERSION" ; then
271   ANDROID_CHECK_PACKAGE(binutils-${GOLD_VERSION})
272 fi
273
274 # gcc version (default is 4.2.1)
275 AC_MSG_CHECKING([target gcc version to build])
276 AC_ARG_WITH([gcc-version],
277   [  --with-gcc-version=VERSION
278                           use gcc-VERSION (default is 4.2.1)],
279   [if test x"$withval" != x ; then
280      GCC_VERSION="$withval"
281    fi],
282 [GCC_VERSION="4.2.1"])
283 AC_MSG_RESULT($GCC_VERSION)
284 AC_SUBST(GCC_VERSION)
285 ANDROID_CHECK_PACKAGE(gcc-${GCC_VERSION})
286
287 # figure out if we need to build gmp and mpfr for gcc 4.3.0+ 
288 gcc_version_file="${srcdir}/../gcc/gcc-${GCC_VERSION}/gcc/BASE-VER"
289 if test -f "${gcc_version_file}"; then
290   GCC_MAJOR=`head -n 1 $gcc_version_file | sed  -e "s/[[^0-9]].*//"`
291   GCC_MINOR=`head -n 1 $gcc_version_file | \
292             sed  -e "s/^[[0-9]]*\.//" -e "s/[[^0-9]].*//"`
293   if test "$GCC_MAJOR" -gt 4 -o \
294           \( "$GCC_MAJOR" -eq 4 -a "$GCC_MINOR" -ge 3 \) ; then
295     GCC_MIN_VERSION_4_3_0="yes"
296   else
297     GCC_MIN_VERSION_4_3_0="no"
298   fi
299   if test "$GCC_MAJOR" -gt 4 -o \
300               \( "$GCC_MAJOR" -eq 4 -a "$GCC_MINOR" -ge 5 \) ; then
301     GCC_MIN_VERSION_4_5_0="yes"
302   else
303     GCC_MIN_VERSION_4_5_0="no"
304   fi
305 else
306   # No version file, assume it is trunk
307   GCC_MIN_VERSION_4_3_0="yes"
308   GCC_MIN_VERSION_4_5_0="yes"
309 fi
310 AC_SUBST(GCC_MIN_VERSION_4_3_0)
311 AC_SUBST(GCC_MIN_VERSION_4_5_0)
312
313 # newlib version (default is 1.16.0)
314 # newlib is only used for arm-newlib-eabi for testing
315 if test x$target == xarm-newlib-elf ; then 
316 AC_MSG_CHECKING([target newlib version to build])
317 AC_ARG_WITH([newlib-version],
318   [  --with-newlib-version=VERSION
319                           use newlib-VERSION (default is 1.16.0)],
320   [if test x"$withval" != x ; then
321      NEWLIB_VERSION="$withval"
322    fi],
323 [NEWLIB_VERSION="1.16.0"])
324 AC_MSG_RESULT($NEWLIB_VERSION)
325 AC_SUBST(NEWLIB_VERSION)
326 ANDROID_CHECK_PACKAGE(newlib-${NEWLIB_VERSION})
327 fi
328
329 if test "$GCC_MIN_VERSION_4_3_0" == "yes"; then
330 # gmp version (default is 4.2.2)
331 # gmp is only used for gcc version higher than 4.3.0
332 AC_MSG_CHECKING([gmp version])
333 AC_ARG_WITH([gmp-version],
334   [  --with-gmp-version=VERSION
335                           use gmp-VERSION (default is 4.2.2)],
336   [if test x"$withval" != x ; then
337      GMP_VERSION="$withval"
338    fi],
339 [GMP_VERSION="4.2.2"])
340 AC_MSG_RESULT($GMP_VERSION)
341 ANDROID_CHECK_PACKAGE(gmp-${GMP_VERSION})
342
343 # mpfr version (default is 2.3.0)
344 # mpfr is only used for gcc version higher than 4.3.0
345 AC_MSG_CHECKING([mpfr version])
346 AC_ARG_WITH([mpfr-version],
347   [  --with-mpfr-version=VERSION
348                           use mpfr-VERSION (default is 2.3.0)],
349   [if test x"$withval" != x ; then
350      MPFR_VERSION="$withval"
351    fi],
352 [MPFR_VERSION="2.3.0"])
353 AC_MSG_RESULT($MPFR_VERSION)
354 ANDROID_CHECK_PACKAGE(mpfr-${MPFR_VERSION})
355
356 fi
357 AC_SUBST(GMP_VERSION)
358 AC_SUBST(MPFR_VERSION)
359
360 if test "$GCC_MIN_VERSION_4_5_0" == "yes"; then
361 # mpc version (default is 0.8.1)
362 # mpc is only used for gcc version higher than 4.5.0
363 AC_MSG_CHECKING([mpc version])
364 AC_ARG_WITH([mpc-version],
365   [  --with-mpc-version=VERSION
366                           use mpc-VERSION (default is 0.8.1)],
367   [if test x"$withval" != x; then
368      MPC_VERSION="$withval"
369    fi],
370 [MPC_VERSION="0.8.1"])
371 AC_MSG_RESULT($MPC_VERSION)
372 ANDROID_CHECK_PACKAGE(mpc-${MPC_VERSION})
373 fi
374 AC_SUBST(MPC_VERSION)
375
376 # gdb version (default is 6.6)
377 AC_MSG_CHECKING([target gdb version to build])
378 AC_ARG_WITH([gdb-version],
379   [  --with-gdb-version=VERSION
380                           use gdb-VERSION (default is 6.6)],
381   [if test x"$withval" != x ; then
382      GDB_VERSION="$withval"
383    fi],
384 [GDB_VERSION="6.6"])
385 AC_MSG_RESULT($GDB_VERSION)
386 AC_SUBST(GDB_VERSION)
387 ANDROID_CHECK_PACKAGE(gdb-${GDB_VERSION})
388
389 AC_OUTPUT