# Copyright (C) 2008, 2010 Google Inc. # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # AC_INIT(android-tools,2.0) AC_PREREQ(2.59) AC_CONFIG_FILES([Makefile]) AC_PROG_INSTALL AC_CANONICAL_SYSTEM # We only allow the following 3 targets: # 1. arm-linux-androideabi (primary target) # 2. arm-eabi (for Android kernel) # 3. arm-newlib-eabi (for gcc testing) # 4.i[3456]86-*-linux-gnu, x86-*-linux-gnu (for x86 targets) GDB_TARGET=$target case $target in arm-unknown-linux-androideabi | arm-unknown-eabi) BUILD_ANDROID_GCC=yes GDB_TARGET=arm-elf-linux ;; arm-newlib-elf) BUILD_ANDROID_GCC=no ;; i[[3456]]86-*-linux-gnu | x86_64-*-linux-gnu) BUILD_ANDROID_GCC=yes ;; *) AC_MSG_ERROR(Unsupported target $target.); esac AC_SUBST(BUILD_ANDROID_GCC) AC_SUBST(GDB_TARGET) AC_ARG_PROGRAM # TOPLEVEL_CONFIGURE_ARGUMENTS lifted from top-level configure.ac in gcc. # Export original configure arguments for use by sub-configures. # Quote arguments with shell meta charatcers. TOPLEVEL_CONFIGURE_ARGUMENTS= TOPLEVEL_NO_GOLD_CONFIGURE_ARGUMENTS= set -- "$progname" "$@" for ac_arg do case "$ac_arg" in *" "*|*" "*|*[[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\']]*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` # if the argument is of the form -foo=baz, quote the baz part only ac_arg=`echo "'$ac_arg'" | sed "s/^'\([[-a-zA-Z0-9]]*=\)/\\1'/"` ;; *) ;; esac # Add the quoted argument to the list. TOPLEVEL_CONFIGURE_ARGUMENTS="$TOPLEVEL_CONFIGURE_ARGUMENTS $ac_arg" done if test "$silent" = yes; then TOPLEVEL_CONFIGURE_ARGUMENTS="$TOPLEVEL_CONFIGURE_ARGUMENTS --silent" fi # Remove the initial space we just introduced and, as these will be # expanded by make, quote '$'. TOPLEVEL_CONFIGURE_ARGUMENTS=`echo "x$TOPLEVEL_CONFIGURE_ARGUMENTS" | sed -e 's/^x *//' -e 's,\\$,$$,g'` AC_SUBST(TOPLEVEL_CONFIGURE_ARGUMENTS) # Base args. Strip norecursion, cache-file, srcdir, host, build, # target, nonopt, and variable assignments. These are the ones we # might not want to pass down to subconfigures. Also strip # program-prefix, program-suffix, and program-transform-name, so that # we can pass down a consistent program-transform-name. baseargs= keep_next=no skip_next=no eval "set -- $ac_configure_args" for ac_arg do if test X"$skip_next" = X"yes"; then skip_next=no continue fi if test X"$keep_next" = X"yes"; then case $ac_arg in *\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac baseargs="$baseargs '$ac_arg'" keep_next=no continue fi # Handle separated arguments. Based on the logic generated by # autoconf 2.59. case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) separate_arg=no ;; -*) separate_arg=yes ;; *) separate_arg=no ;; esac case "$ac_arg" in --no*) continue ;; --c* | \ --sr* | \ --ho* | \ --bu* | \ --t* | \ --program-* | \ -cache_file* | \ -srcdir* | \ -host* | \ -build* | \ -target* | \ -program-prefix* | \ -program-suffix* | \ -program-transform-name* ) skip_next=$separate_arg continue ;; -*) # An option. Add it. case $ac_arg in *\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac baseargs="$baseargs '$ac_arg'" keep_next=$separate_arg ;; *) # Either a variable assignment, or a nonopt (triplet). Don't # pass it down; let the Makefile handle this. continue ;; esac done # Remove the initial space we just introduced and, as these will be # expanded by make, quote '$'. baseargs=`echo "x$baseargs" | sed -e 's/^x *//' -e 's,\\$,$$,g'` # Add in --program-transform-name, after --program-prefix and # --program-suffix have been applied to it. Autoconf has already # doubled dollar signs and backslashes in program_transform_name; we want # the backslashes un-doubled, and then the entire thing wrapped in single # quotes, because this will be expanded first by make and then by the shell. # Also, because we want to override the logic in subdir configure scripts to # choose program_transform_name, replace any s,x,x, with s,y,y,. sed -e "s,\\\\\\\\,\\\\,g; s,','\\\\'',g; s/s,x,x,/s,y,y,/" < conftestsed.out ${program_transform_name} EOF_SED gcc_transform_name=`cat conftestsed.out` rm -f conftestsed.out baseargs="$baseargs --program-transform-name='${gcc_transform_name}'" if test "$silent" = yes; then baseargs="$baseargs --silent" fi AC_SUBST(baseargs) # Strip --{enable|disable}-{gold|ld}* from baseargs. These are used for the # gold binutils. Note that baseargs are quoted. gold_baseargs= for ac_arg in $baseargs do case $ac_arg in \'--enable-gold\' | \'--enable-gold=*\' | \'--disable-gold\' | \ \'--enable-ld\' | \'--enable-ld=*\' | \'--disable-ld\' ) ;; *) gold_baseargs="$gold_baseargs $ac_arg" ;; esac done AC_SUBST(gold_baseargs) ENABLE_GRAPHITE=no AC_ARG_ENABLE([graphite], AC_HELP_STRING([--enable-graphite], [Enable Graphite optimization @<:@default=yes@:>@])) if test x${enableval} != xno; then graphite=yes fi if test "$GCC_MIN_VERSION_4_5_0" == "no"; then graphite=no fi ENABLE_GRAPHITE=$graphite AC_SUBST(ENABLE_GRAPHITE) # package to source path case $srcdir in /* | [A-Za-z]:*) package_to_srcdir=$srcdir ;; *) package_to_srcdir=../$srcdir ;; esac AC_SUBST(package_to_srcdir) # # Specify tool component versions # # macro to check that we have a package. A package x exists if any one # of the following exists (x is in the format of "tool-version"): # 1. tool/x # 2. tool/x.tar.gz # 3. tool/x.tgz # 4. tool/x.tar.bz2 m4_pattern_allow([^AC_MSG_ERROR$]) AC_DEFUN([ANDROID_CHECK_PACKAGE], [x=$1; tool=$(echo "$x" | sed -e 's/-.*//'); version=$(echo "$x" | sed -e 's/[[^-]]*-//'); \ if test \( ! -d $srcdir/../$tool/$1 \) -a \( x"$version" != x"none" \) ; then if test -f $srcdir/../$tool/$1.tar ; then mkdir -p temp-src && tar -C temp-src -xf $srcdir/../$tool/$1.tar elif test -f $srcdir/../$tool/$1.tar.gz ; then mkdir -p temp-src && tar -C temp-src -xzf $srcdir/../$tool/$1.tar.gz elif test -f $srcdir/../$tool/$1.tgz ; then mkdir -p temp-src && tar -C temp-src -xzf $srcdir/../$tool/$1.tgz elif test -f $srcdir/../$tool/$1.tar.bz2 ; then mkdir -p temp-src && tar -C temp-src -xjf $srcdir/../$tool/$1.tar.bz2 elif test -f $srcdir/../tarballs/$1.tar ; then mkdir -p temp-src && tar -C temp-src -xf $srcdir/../tarballs/$1.tar elif test -f $srcdir/../tarballs/$1.tar.gz ; then mkdir -p temp-src && tar -C temp-src -xzf $srcdir/../tarballs/$1.tar.gz elif test -f $srcdir/../tarballs/$1.tgz ; then mkdir -p temp-src && tar -C temp-src -xzf $srcdir/../tarballs/$1.tgz elif test -f $srcdir/../tarballs/$1.tar.bz2 ; then mkdir -p temp-src && tar -C temp-src -xjf $srcdir/../tarballs/$1.tar.bz2 else AC_MSG_ERROR('package $1 does not exist.') fi fi ]) # binutils version (default is 2.17) AC_MSG_CHECKING([target binutils version to build]) AC_ARG_WITH([binutils-version], [ --with-binutils-version=VERSION use binutils-VERSION (default is 2.17)], [if test x"$withval" != x ; then BINUTILS_VERSION="$withval" fi], [BINUTILS_VERSION="2.17"]) AC_MSG_RESULT($BINUTILS_VERSION) AC_SUBST(BINUTILS_VERSION) ANDROID_CHECK_PACKAGE(binutils-${BINUTILS_VERSION}) # gold binutils version (default is the same version as the main # binutils package). GOLD_VERSION="$BINUTILS_VERSION" AC_MSG_CHECKING([target gold binutils version to build]) AC_ARG_WITH([gold-version], [ --with-gold-version=VERSION use binutils-VERSION for gold (default is the main binutils version)], [if test x"$withval" != x ; then GOLD_VERSION="$withval" fi]) AC_MSG_RESULT($GOLD_VERSION) AC_SUBST(GOLD_VERSION) # Skip check if we are using the main binutils for gold. if test x"$GOLD_VERSION" != x"$BINUTILS_VERSION" ; then ANDROID_CHECK_PACKAGE(binutils-${GOLD_VERSION}) fi # gcc version (default is 4.2.1) AC_MSG_CHECKING([target gcc version to build]) AC_ARG_WITH([gcc-version], [ --with-gcc-version=VERSION use gcc-VERSION (default is 4.2.1)], [if test x"$withval" != x ; then GCC_VERSION="$withval" fi], [GCC_VERSION="4.2.1"]) AC_MSG_RESULT($GCC_VERSION) AC_SUBST(GCC_VERSION) ANDROID_CHECK_PACKAGE(gcc-${GCC_VERSION}) # figure out if we need to build gmp and mpfr for gcc 4.3.0+ gcc_version_file="${srcdir}/../gcc/gcc-${GCC_VERSION}/gcc/BASE-VER" if test -f "${gcc_version_file}"; then GCC_MAJOR=`head -n 1 $gcc_version_file | sed -e "s/[[^0-9]].*//"` GCC_MINOR=`head -n 1 $gcc_version_file | \ sed -e "s/^[[0-9]]*\.//" -e "s/[[^0-9]].*//"` if test "$GCC_MAJOR" -gt 4 -o \ \( "$GCC_MAJOR" -eq 4 -a "$GCC_MINOR" -ge 3 \) ; then GCC_MIN_VERSION_4_3_0="yes" else GCC_MIN_VERSION_4_3_0="no" fi if test "$GCC_MAJOR" -gt 4 -o \ \( "$GCC_MAJOR" -eq 4 -a "$GCC_MINOR" -ge 5 \) ; then GCC_MIN_VERSION_4_5_0="yes" else GCC_MIN_VERSION_4_5_0="no" fi else # No version file, assume it is trunk GCC_MIN_VERSION_4_3_0="yes" GCC_MIN_VERSION_4_5_0="yes" fi AC_SUBST(GCC_MIN_VERSION_4_3_0) AC_SUBST(GCC_MIN_VERSION_4_5_0) # newlib version (default is 1.16.0) # newlib is only used for arm-newlib-eabi for testing if test x$target == xarm-newlib-elf ; then AC_MSG_CHECKING([target newlib version to build]) AC_ARG_WITH([newlib-version], [ --with-newlib-version=VERSION use newlib-VERSION (default is 1.16.0)], [if test x"$withval" != x ; then NEWLIB_VERSION="$withval" fi], [NEWLIB_VERSION="1.16.0"]) AC_MSG_RESULT($NEWLIB_VERSION) AC_SUBST(NEWLIB_VERSION) ANDROID_CHECK_PACKAGE(newlib-${NEWLIB_VERSION}) fi if test "$GCC_MIN_VERSION_4_3_0" == "yes"; then # gmp version (default is 4.2.2) # gmp is only used for gcc version higher than 4.3.0 AC_MSG_CHECKING([gmp version]) AC_ARG_WITH([gmp-version], [ --with-gmp-version=VERSION use gmp-VERSION (default is 4.2.2)], [if test x"$withval" != x ; then GMP_VERSION="$withval" fi], [GMP_VERSION="4.2.2"]) AC_MSG_RESULT($GMP_VERSION) ANDROID_CHECK_PACKAGE(gmp-${GMP_VERSION}) # mpfr version (default is 2.3.0) # mpfr is only used for gcc version higher than 4.3.0 AC_MSG_CHECKING([mpfr version]) AC_ARG_WITH([mpfr-version], [ --with-mpfr-version=VERSION use mpfr-VERSION (default is 2.3.0)], [if test x"$withval" != x ; then MPFR_VERSION="$withval" fi], [MPFR_VERSION="2.3.0"]) AC_MSG_RESULT($MPFR_VERSION) ANDROID_CHECK_PACKAGE(mpfr-${MPFR_VERSION}) fi AC_SUBST(GMP_VERSION) AC_SUBST(MPFR_VERSION) if test "$GCC_MIN_VERSION_4_5_0" == "yes"; then # mpc version (default is 0.8.1) # mpc is only used for gcc version higher than 4.5.0 AC_MSG_CHECKING([mpc version]) AC_ARG_WITH([mpc-version], [ --with-mpc-version=VERSION use mpc-VERSION (default is 0.8.1)], [if test x"$withval" != x; then MPC_VERSION="$withval" fi], [MPC_VERSION="0.8.1"]) AC_MSG_RESULT($MPC_VERSION) ANDROID_CHECK_PACKAGE(mpc-${MPC_VERSION}) fi AC_SUBST(MPC_VERSION) if test "$ENABLE_GRAPHITE" == "yes"; then # ppl version (default is 0.11.2) # ppl is only used for gcc 4.5+ with graphite optimization. AC_MSG_CHECKING([ppl version]) AC_ARG_WITH([ppl-version], [ --with-ppl-version=VERSION use ppl-VERSION (default is 0.11.2)], [if test x"$withval" != x ; then PPL_VERSION="$withval" fi], [PPL_VERSION="0.11.2"]) AC_MSG_RESULT($PPL_VERSION) ANDROID_CHECK_PACKAGE(ppl-${PPL_VERSION}) fi AC_SUBST(PPL_VERSION) if test "$ENABLE_GRAPHITE" == "yes"; then # cloog-ppl or cloog version (default is 0.15.9) # cloog is only used for gcc 4.5+ with graphite optimization. AC_MSG_CHECKING([cloog version]) AC_ARG_WITH([cloog-version], [ --with-cloog-version=VERSION use cloog-VERSION (default is 0.15.9)], [if test x"$withval" != x ; then CLOOG_VERSION="$withval" fi], [CLOOG_VERSION="0.15.9"]) AC_MSG_RESULT($CLOOG_VERSION) case $CLOOG_VERSION in 0.15*) # CLooG/PPL relies on the PPL for version 0.15.x CLOOG_VERSION="ppl-$CLOOG_VERSION" ;; 0.16*) # CLooG 0.16.x has its own embedded polyhedral library ;; *) AC_MSG_ERROR(Unsupported cloog version); esac ANDROID_CHECK_PACKAGE(cloog-${CLOOG_VERSION}) fi AC_SUBST(CLOOG_VERSION) # gdb version (default is 6.6) AC_MSG_CHECKING([target gdb version to build]) AC_ARG_WITH([gdb-version], [ --with-gdb-version=VERSION use gdb-VERSION (default is 6.6)], [if test x"$withval" != x ; then GDB_VERSION="$withval" fi], [GDB_VERSION="6.6"]) AC_MSG_RESULT($GDB_VERSION) AC_SUBST(GDB_VERSION) ANDROID_CHECK_PACKAGE(gdb-${GDB_VERSION}) # Sysroot location AC_ARG_WITH([sysroot], [ --with-sysroot=DIR use target sysroot in DIR], [if test x"$withval" != x ; then if test $build != $host ; then case "$withval" in "$prefix"|"${prefix%/}/"*) ;; *) AC_MSG_ERROR('Target sysroot must be a subdirectory of for canadian cross build $prefix ; $withval') ;; esac fi sysroot="$withval" fi], [if test $build != $host ; then AC_MSG_ERROR('Target sysroot is not set for canadian cross build') fi]) AC_SUBST(sysroot) # Specify a location for mpc AC_ARG_WITH(mpc, [ --with-mpc=PATH specify prefix directory for installed MPC package.], [if test -d "$withval" ; then have_mpc="$withval" have_mpfr="$withval" have_gmp="$withval" elif test x"$withval" != x"no"; then AC_MSG_ERROR(invalid value for --with-mpc) else have_mpc=no fi], [have_mpc=no]) AC_SUBST(have_mpc) # Specify a location for mpfr AC_ARG_WITH(mpfr, [ --with-mpfr=PATH specify prefix directory for installed MPFR package.], [if test -d "$withval" ; then have_mpfr="$withval" have_gmp="$withval" elif test x"$withval" != x"no"; then AC_MSG_ERROR(invalid value for --with-mpfr) else have_mpfr=no fi], [have_mpfr=no]) AC_SUBST(have_mpfr) # Specify a location for gmp AC_ARG_WITH(gmp, [ --with-gmp=PATH specify prefix directory for the installed GMP package.], [if test -d "$withval" ; then have_gmp="$withval" elif test x"$withval" != x"no"; then AC_MSG_ERROR(invalid value for --with-gmp) else have_gmp=no fi], [have_gmp=no]) AC_SUBST(have_gmp) # Specify a location for ppl AC_ARG_WITH(ppl, [ --with-ppl=PATH specify prefix directory for the installed PPL package.], [if test -d "$withval" ; then have_ppl="$withval" elif test x"$withval" != x"no"; then AC_MSG_ERROR(invalid value for --with-ppl) else have_ppl=no fi], [have_ppl=no]) AC_SUBST(have_ppl) # Specify a location for cloog AC_ARG_WITH(cloog, [ --with-cloog=PATH specify prefix directory for the installed CLooG package.], [if test -d "$withval" ; then have_cloog="$withval" elif test x"$withval" != x"no"; then AC_MSG_ERROR(invalid value for --with-cloog) else have_cloog=no fi], [have_cloog=no]) AC_SUBST(have_cloog) AC_OUTPUT