289e4874c3df30a00b5d25b130f40422984f8ccc
[android/toolchain/build.git] / configure.ac
1 #   Copyright (C) 2008, 2010, 2011 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 AC_PROG_INSTALL
19
20 AC_CANONICAL_SYSTEM
21
22 # Get 'install' or 'install-sh' and its variants.
23 AC_PROG_INSTALL
24
25 # We only allow the following 3 targets:
26 # 1. arm-linux-androideabi (primary target)
27 # 2. arm-eabi (for Android kernel)
28 # 3. arm-newlib-eabi (for gcc testing)
29 # 4.i[3456]86-*-linux-gnu, x86-*-linux-gnu (for x86 targets)
30
31 GDB_TARGET=$target
32 case $target in
33   arm-unknown-linux-androideabi | arm-unknown-eabi)
34     BUILD_ANDROID_GCC=yes
35     GDB_TARGET=arm-elf-linux
36     ;;
37   arm-newlib-elf)
38     BUILD_ANDROID_GCC=no
39     ;;
40   i[[3456]]86-*-linux-gnu | x86_64-*-linux-gnu)
41     BUILD_ANDROID_GCC=yes
42     ;;
43   *)
44     AC_MSG_ERROR(Unsupported target $target.);
45 esac
46 AC_SUBST(BUILD_ANDROID_GCC)
47 AC_SUBST(GDB_TARGET)
48 AC_ARG_PROGRAM
49
50 # TOPLEVEL_CONFIGURE_ARGUMENTS lifted from top-level configure.ac in gcc.
51
52 # Export original configure arguments for use by sub-configures.
53 # Quote arguments with shell meta charatcers.
54 TOPLEVEL_CONFIGURE_ARGUMENTS=
55 TOPLEVEL_NO_GOLD_CONFIGURE_ARGUMENTS=
56
57 set -- "$progname" "$@"
58 for ac_arg
59 do
60   case "$ac_arg" in
61   *" "*|*"      "*|*[[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\']]*)
62     ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"`
63     # if the argument is of the form -foo=baz, quote the baz part only
64     ac_arg=`echo "'$ac_arg'" | sed "s/^'\([[-a-zA-Z0-9]]*=\)/\\1'/"` ;;
65   *) ;;
66   esac
67   # Add the quoted argument to the list.
68   TOPLEVEL_CONFIGURE_ARGUMENTS="$TOPLEVEL_CONFIGURE_ARGUMENTS $ac_arg"
69 done
70 if test "$silent" = yes; then
71   TOPLEVEL_CONFIGURE_ARGUMENTS="$TOPLEVEL_CONFIGURE_ARGUMENTS --silent"
72 fi
73 # Remove the initial space we just introduced and, as these will be
74 # expanded by make, quote '$'.
75 TOPLEVEL_CONFIGURE_ARGUMENTS=`echo "x$TOPLEVEL_CONFIGURE_ARGUMENTS" | sed -e 's/^x *//' -e 's,\\$,$$,g'`
76 AC_SUBST(TOPLEVEL_CONFIGURE_ARGUMENTS)
77
78 # Base args.  Strip norecursion, cache-file, srcdir, host, build,
79 # target, nonopt, and variable assignments.  These are the ones we
80 # might not want to pass down to subconfigures.  Also strip
81 # program-prefix, program-suffix, and program-transform-name, so that
82 # we can pass down a consistent program-transform-name.
83 baseargs=
84 keep_next=no
85 skip_next=no
86 eval "set -- $ac_configure_args"
87 for ac_arg
88 do
89   if test X"$skip_next" = X"yes"; then
90     skip_next=no
91     continue
92   fi
93   if test X"$keep_next" = X"yes"; then
94     case $ac_arg in
95       *\'*)
96         ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
97     esac
98     baseargs="$baseargs '$ac_arg'"
99     keep_next=no
100     continue
101   fi
102
103   # Handle separated arguments.  Based on the logic generated by
104   # autoconf 2.59.
105   case $ac_arg in
106     *=* | --config-cache | -C | -disable-* | --disable-* \
107       | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
108       | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
109       | -with-* | --with-* | -without-* | --without-* | --x)
110       separate_arg=no
111       ;;
112     -*)
113       separate_arg=yes
114       ;;
115     *)
116       separate_arg=no
117       ;;
118   esac
119
120   case "$ac_arg" in
121     --no*)
122       continue
123       ;;
124     --c* | \
125     --sr* | \
126     --ho* | \
127     --bu* | \
128     --t* | \
129     --program-* | \
130     -cache_file* | \
131     -srcdir* | \
132     -host* | \
133     -build* | \
134     -target* | \
135     -program-prefix* | \
136     -program-suffix* | \
137     -program-transform-name* )
138       skip_next=$separate_arg
139       continue
140       ;;
141     -*)
142       # An option.  Add it.
143       case $ac_arg in
144         *\'*)
145           ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
146       esac
147       baseargs="$baseargs '$ac_arg'"
148       keep_next=$separate_arg
149       ;;
150     *)
151       # Either a variable assignment, or a nonopt (triplet).  Don't
152       # pass it down; let the Makefile handle this.
153       continue
154       ;;
155   esac
156 done
157 # Remove the initial space we just introduced and, as these will be
158 # expanded by make, quote '$'.
159 baseargs=`echo "x$baseargs" | sed -e 's/^x *//' -e 's,\\$,$$,g'`
160
161 # Add in --program-transform-name, after --program-prefix and
162 # --program-suffix have been applied to it.  Autoconf has already
163 # doubled dollar signs and backslashes in program_transform_name; we want
164 # the backslashes un-doubled, and then the entire thing wrapped in single
165 # quotes, because this will be expanded first by make and then by the shell.
166 # Also, because we want to override the logic in subdir configure scripts to
167 # choose program_transform_name, replace any s,x,x, with s,y,y,.
168 sed -e "s,\\\\\\\\,\\\\,g; s,','\\\\'',g; s/s,x,x,/s,y,y,/" <<EOF_SED > conftestsed.out
169 ${program_transform_name}
170 EOF_SED
171 gcc_transform_name=`cat conftestsed.out`
172 rm -f conftestsed.out
173 baseargs="$baseargs --program-transform-name='${gcc_transform_name}'"
174 if test "$silent" = yes; then
175   baseargs="$baseargs --silent"
176 fi
177
178 AC_SUBST(baseargs)
179
180 # Strip --{enable|disable}-{gold|ld}* from baseargs.  These are used for the
181 # gold binutils.  Note that baseargs are quoted.
182 gold_baseargs=
183 for ac_arg in $baseargs
184 do
185   case $ac_arg in
186   \'--enable-gold\' | \'--enable-gold=*\' | \'--disable-gold\' | \
187    \'--enable-ld\' | \'--enable-ld=*\' | \'--disable-ld\' )
188     ;;
189   *)
190     gold_baseargs="$gold_baseargs $ac_arg"
191     ;;
192   esac
193 done
194
195 AC_SUBST(gold_baseargs)
196
197 ENABLE_GRAPHITE=no
198 AC_ARG_ENABLE([graphite],
199               AC_HELP_STRING([--enable-graphite],
200                              [Enable Graphite optimization @<:@default=no@:>@]))
201 if test x${enableval} != xyes; then
202   graphite=no
203 fi
204 if test "$GCC_MIN_VERSION_4_5_0" == "no"; then
205   graphite=no
206 fi
207 ENABLE_GRAPHITE=$graphite
208 AC_SUBST(ENABLE_GRAPHITE)
209
210 # package to source path
211 case $srcdir in
212  /* | [A-Za-z]:*) package_to_srcdir=$srcdir ;;
213  *) package_to_srcdir=../$srcdir ;;
214 esac
215 AC_SUBST(package_to_srcdir)
216 #
217 # Specify tool component versions
218 #
219
220 # macro to check that we have a package. A package x exists if any one
221 # of the following exists (x is in the format of "tool-version"):
222 # 1. tool/x
223 # 2. tool/x.tar.gz
224 # 3. tool/x.tgz
225 # 4. tool/x.tar.bz2
226 m4_pattern_allow([^AC_MSG_ERROR$])
227 AC_DEFUN([ANDROID_CHECK_PACKAGE],
228 [x=$1; tool=$(echo "$x" | sed -e 's/-.*//'); version=$(echo "$x" | sed -e 's/[[^-]]*-//'); \
229 if test \( ! -d $srcdir/../$tool/$1 \) -a \( x"$version" != x"none"  \) ; then
230   if test -f $srcdir/../$tool/$1.tar ; then
231     mkdir -p temp-src && tar -C temp-src -xf $srcdir/../$tool/$1.tar
232   elif test -f $srcdir/../$tool/$1.tar.gz ; then
233     mkdir -p temp-src && tar -C temp-src -xzf $srcdir/../$tool/$1.tar.gz
234   elif test -f $srcdir/../$tool/$1.tgz ; then
235     mkdir -p temp-src && tar -C temp-src -xzf $srcdir/../$tool/$1.tgz
236   elif test -f $srcdir/../$tool/$1.tar.bz2 ; then
237     mkdir -p temp-src && tar -C temp-src -xjf $srcdir/../$tool/$1.tar.bz2
238   elif test -f $srcdir/../tarballs/$1.tar ; then
239     mkdir -p temp-src && tar -C temp-src -xf $srcdir/../tarballs/$1.tar
240   elif test -f $srcdir/../tarballs/$1.tar.gz ; then
241     mkdir -p temp-src && tar -C temp-src -xzf $srcdir/../tarballs/$1.tar.gz
242   elif test -f $srcdir/../tarballs/$1.tgz ; then
243     mkdir -p temp-src && tar -C temp-src -xzf $srcdir/../tarballs/$1.tgz
244   elif test -f $srcdir/../tarballs/$1.tar.bz2 ; then
245     mkdir -p temp-src && tar -C temp-src -xjf $srcdir/../tarballs/$1.tar.bz2
246   else
247     AC_MSG_ERROR('package $1 does not exist.')
248   fi
249 fi ])
250
251 # binutils version (default is 2.17)
252 AC_MSG_CHECKING([target binutils version to build])
253 AC_ARG_WITH([binutils-version],
254   [  --with-binutils-version=VERSION
255                           use binutils-VERSION (default is 2.17)],
256   [if test x"$withval" != x ; then
257      BINUTILS_VERSION="$withval"
258    fi],
259 [BINUTILS_VERSION="2.17"])
260 AC_MSG_RESULT($BINUTILS_VERSION)
261 AC_SUBST(BINUTILS_VERSION)
262 ANDROID_CHECK_PACKAGE(binutils-${BINUTILS_VERSION})
263
264 # gold binutils version (default is the same version as the main
265 # binutils package).
266 GOLD_VERSION="$BINUTILS_VERSION"
267 AC_MSG_CHECKING([target gold binutils version to build])
268 AC_ARG_WITH([gold-version],
269   [  --with-gold-version=VERSION
270                           use binutils-VERSION for gold (default is the main binutils version)],
271   [if test x"$withval" != x ; then
272      GOLD_VERSION="$withval"
273    fi])
274 AC_MSG_RESULT($GOLD_VERSION)
275 AC_SUBST(GOLD_VERSION)
276
277 # Skip check if we are using the main binutils for gold.
278 if test x"$GOLD_VERSION" != x"$BINUTILS_VERSION" ; then
279   ANDROID_CHECK_PACKAGE(binutils-${GOLD_VERSION})
280 fi
281
282 # gcc version (default is 4.2.1)
283 AC_MSG_CHECKING([target gcc version to build])
284 AC_ARG_WITH([gcc-version],
285   [  --with-gcc-version=VERSION
286                           use gcc-VERSION (default is 4.2.1)],
287   [if test x"$withval" != x ; then
288      GCC_VERSION="$withval"
289    fi],
290 [GCC_VERSION="4.2.1"])
291 AC_MSG_RESULT($GCC_VERSION)
292 AC_SUBST(GCC_VERSION)
293 ANDROID_CHECK_PACKAGE(gcc-${GCC_VERSION})
294
295 # figure out if we need to build gmp and mpfr for gcc 4.3.0+ 
296 gcc_version_file="${srcdir}/../gcc/gcc-${GCC_VERSION}/gcc/BASE-VER"
297 if test -f "${gcc_version_file}"; then
298   GCC_MAJOR=`head -n 1 $gcc_version_file | sed  -e "s/[[^0-9]].*//"`
299   GCC_MINOR=`head -n 1 $gcc_version_file | \
300             sed  -e "s/^[[0-9]]*\.//" -e "s/[[^0-9]].*//"`
301   if test "$GCC_MAJOR" -gt 4 -o \
302           \( "$GCC_MAJOR" -eq 4 -a "$GCC_MINOR" -ge 3 \) ; then
303     GCC_MIN_VERSION_4_3_0="yes"
304   else
305     GCC_MIN_VERSION_4_3_0="no"
306   fi
307   if test "$GCC_MAJOR" -gt 4 -o \
308               \( "$GCC_MAJOR" -eq 4 -a "$GCC_MINOR" -ge 5 \) ; then
309     GCC_MIN_VERSION_4_5_0="yes"
310   else
311     GCC_MIN_VERSION_4_5_0="no"
312   fi
313 else
314   # No version file, assume it is trunk
315   GCC_MIN_VERSION_4_3_0="yes"
316   GCC_MIN_VERSION_4_5_0="yes"
317 fi
318 AC_SUBST(GCC_MIN_VERSION_4_3_0)
319 AC_SUBST(GCC_MIN_VERSION_4_5_0)
320
321 # newlib version (default is 1.16.0)
322 # newlib is only used for arm-newlib-eabi for testing
323 if test x$target == xarm-newlib-elf ; then 
324 AC_MSG_CHECKING([target newlib version to build])
325 AC_ARG_WITH([newlib-version],
326   [  --with-newlib-version=VERSION
327                           use newlib-VERSION (default is 1.16.0)],
328   [if test x"$withval" != x ; then
329      NEWLIB_VERSION="$withval"
330    fi],
331 [NEWLIB_VERSION="1.16.0"])
332 AC_MSG_RESULT($NEWLIB_VERSION)
333 AC_SUBST(NEWLIB_VERSION)
334 ANDROID_CHECK_PACKAGE(newlib-${NEWLIB_VERSION})
335 fi
336
337 if test "$GCC_MIN_VERSION_4_3_0" == "yes"; then
338 # gmp version (default is 4.2.2)
339 # gmp is only used for gcc version higher than 4.3.0
340 AC_MSG_CHECKING([gmp version])
341 AC_ARG_WITH([gmp-version],
342   [  --with-gmp-version=VERSION
343                           use gmp-VERSION (default is 4.2.2)],
344   [if test x"$withval" != x ; then
345      GMP_VERSION="$withval"
346    fi],
347 [GMP_VERSION="4.2.2"])
348 AC_MSG_RESULT($GMP_VERSION)
349 ANDROID_CHECK_PACKAGE(gmp-${GMP_VERSION})
350
351 # mpfr version (default is 2.3.0)
352 # mpfr is only used for gcc version higher than 4.3.0
353 AC_MSG_CHECKING([mpfr version])
354 AC_ARG_WITH([mpfr-version],
355   [  --with-mpfr-version=VERSION
356                           use mpfr-VERSION (default is 2.3.0)],
357   [if test x"$withval" != x ; then
358      MPFR_VERSION="$withval"
359    fi],
360 [MPFR_VERSION="2.3.0"])
361 AC_MSG_RESULT($MPFR_VERSION)
362 ANDROID_CHECK_PACKAGE(mpfr-${MPFR_VERSION})
363
364 fi
365 AC_SUBST(GMP_VERSION)
366 AC_SUBST(MPFR_VERSION)
367
368 if test "$GCC_MIN_VERSION_4_5_0" == "yes"; then
369 # mpc version (default is 0.8.1)
370 # mpc is only used for gcc version higher than 4.5.0
371 AC_MSG_CHECKING([mpc version])
372 AC_ARG_WITH([mpc-version],
373   [  --with-mpc-version=VERSION
374                           use mpc-VERSION (default is 0.8.1)],
375   [if test x"$withval" != x; then
376      MPC_VERSION="$withval"
377    fi],
378 [MPC_VERSION="0.8.1"])
379 AC_MSG_RESULT($MPC_VERSION)
380 ANDROID_CHECK_PACKAGE(mpc-${MPC_VERSION})
381 fi
382 AC_SUBST(MPC_VERSION)
383
384 if test "$ENABLE_GRAPHITE" == "yes"; then
385 # ppl version (default is 0.11.2)
386 # ppl is only used for gcc 4.5+ with graphite optimization.
387 AC_MSG_CHECKING([ppl version])
388 AC_ARG_WITH([ppl-version],
389   [  --with-ppl-version=VERSION
390                           use ppl-VERSION (default is 0.11.2)],
391   [if test x"$withval" != x ; then
392      PPL_VERSION="$withval"
393    fi],
394 [PPL_VERSION="0.11.2"])
395 AC_MSG_RESULT($PPL_VERSION)
396 ANDROID_CHECK_PACKAGE(ppl-${PPL_VERSION})
397 fi
398 AC_SUBST(PPL_VERSION)
399
400 if test "$ENABLE_GRAPHITE" == "yes"; then
401 # cloog-ppl or cloog version (default is 0.15.9)
402 # cloog is only used for gcc 4.5+ with graphite optimization.
403 AC_MSG_CHECKING([cloog version])
404 AC_ARG_WITH([cloog-version],
405   [  --with-cloog-version=VERSION
406                           use cloog-VERSION (default is 0.15.9)],
407   [if test x"$withval" != x ; then
408      CLOOG_VERSION="$withval"
409    fi],
410 [CLOOG_VERSION="0.15.9"])
411 AC_MSG_RESULT($CLOOG_VERSION)
412 case $CLOOG_VERSION in
413   0.15*)
414     # CLooG/PPL relies on the PPL for version 0.15.x
415     CLOOG_VERSION="ppl-$CLOOG_VERSION"
416     ;;
417   0.16*)
418     # CLooG 0.16.x has its own embedded polyhedral library
419     ;;
420   *)
421     AC_MSG_ERROR(Unsupported cloog version);
422 esac
423 ANDROID_CHECK_PACKAGE(cloog-${CLOOG_VERSION})
424 fi
425 AC_SUBST(CLOOG_VERSION)
426
427 # gdb version (default is 6.6)
428 AC_MSG_CHECKING([target gdb version to build])
429 AC_ARG_WITH([gdb-version],
430   [  --with-gdb-version=VERSION
431                           use gdb-VERSION (default is 6.6)],
432   [if test x"$withval" != x ; then
433      GDB_VERSION="$withval"
434    fi],
435 [GDB_VERSION="6.6"])
436 AC_MSG_RESULT($GDB_VERSION)
437 AC_SUBST(GDB_VERSION)
438 ANDROID_CHECK_PACKAGE(gdb-${GDB_VERSION})
439
440 # Sysroot location
441 AC_ARG_WITH([sysroot],
442   [  --with-sysroot=DIR
443                           use target sysroot in DIR],
444   [if test x"$withval" != x ; then
445      if test $build != $host ; then
446        case "$withval" in
447          "$prefix"|"${prefix%/}/"*)
448            ;;
449          *)
450            AC_MSG_ERROR('Target sysroot must be a subdirectory of <prefix> for canadian cross build $prefix ; $withval')
451            ;;
452        esac
453      fi
454
455      sysroot="$withval"
456    fi],
457 [if test $build != $host ; then
458    AC_MSG_ERROR('Target sysroot is not set for canadian cross build')
459  fi])
460 AC_SUBST(sysroot)
461
462 # Specify a location for mpc
463 AC_ARG_WITH(mpc, [  --with-mpc=PATH
464                           specify prefix directory for installed MPC package.],
465   [if test -d "$withval" ; then
466      have_mpc="$withval"
467      have_mpfr="$withval"
468      have_gmp="$withval"
469    elif test x"$withval" != x"no"; then
470      AC_MSG_ERROR(invalid value for --with-mpc)
471    else
472      have_mpc=no
473    fi],
474   [have_mpc=no])
475 AC_SUBST(have_mpc)
476
477 # Specify a location for mpfr
478 AC_ARG_WITH(mpfr, [  --with-mpfr=PATH
479                           specify prefix directory for installed MPFR package.],
480   [if test -d "$withval" ; then
481      have_mpfr="$withval"
482      have_gmp="$withval"
483    elif test x"$withval" != x"no"; then
484      AC_MSG_ERROR(invalid value for --with-mpfr)
485    else
486      have_mpfr=no
487    fi],
488   [have_mpfr=no])
489 AC_SUBST(have_mpfr)
490
491 # Specify a location for gmp
492 AC_ARG_WITH(gmp, [  --with-gmp=PATH
493                           specify prefix directory for the installed GMP package.],
494   [if test -d "$withval" ; then
495      have_gmp="$withval"
496    elif test x"$withval" != x"no"; then
497      AC_MSG_ERROR(invalid value for --with-gmp)
498    else
499      have_gmp=no
500    fi],
501   [have_gmp=no])
502 AC_SUBST(have_gmp)
503
504 # Specify a location for ppl
505 AC_ARG_WITH(ppl, [  --with-ppl=PATH
506                           specify prefix directory for the installed PPL package.],
507   [if test -d "$withval" ; then
508      have_ppl="$withval"
509    elif test x"$withval" != x"no"; then
510      AC_MSG_ERROR(invalid value for --with-ppl)
511    else
512      have_ppl=no
513    fi],
514   [have_ppl=no])
515 AC_SUBST(have_ppl)
516
517 # Specify a location for cloog
518 AC_ARG_WITH(cloog, [  --with-cloog=PATH
519                           specify prefix directory for the installed CLooG package.],
520   [if test -d "$withval" ; then
521      have_cloog="$withval"
522    elif test x"$withval" != x"no"; then
523      AC_MSG_ERROR(invalid value for --with-cloog)
524    else
525      have_cloog=no
526    fi],
527   [have_cloog=no])
528 AC_SUBST(have_cloog)
529
530 AC_OUTPUT