Fix binutils-2.24 detection
[android/toolchain/build.git] / configure.ac
index d0d8ee3..b316a7e 100644 (file)
@@ -1,4 +1,4 @@
-#   Copyright (C) 2008 Google Inc.
+#   Copyright (C) 2008, 2010, 2011 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
 # General Public License for more details.
 #
 
-AC_INIT(android-tools,1.0)
+AC_INIT(android-tools,2.0)
 AC_PREREQ(2.59)
 
 AC_CONFIG_FILES([Makefile])
 
 AC_CANONICAL_SYSTEM
 
+# Get 'install' or 'install-sh' and its variants.
+AC_PROG_INSTALL
+
 # We only allow the following 3 targets:
-# 1. arm-android-eabi (primary target)
-# 2. arm-eabi (to be phased out.)
+# 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)
+# 4. i[3456]86-*-linux-gnu, x86-*-linux-gnu, i[3456]86-*-linux-android, x86-*-linux-android (for x86 targets)
+# 5. mips*-*-linux* (for mips targets)
 
 GDB_TARGET=$target
 case $target in
-  arm-android-eabi | arm-unknown-eabi)
+  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)
+  i[[3456]]86-*-linux-gnu | x86_64-*-linux-gnu | i[[3456]]86-*-linux-android | x86_64-*-linux-android)
+    BUILD_ANDROID_GCC=yes
+    ;;
+  mips*-*-linux*)
     BUILD_ANDROID_GCC=yes
     ;;
   *)
@@ -48,6 +55,8 @@ AC_ARG_PROGRAM
 # 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
@@ -77,6 +86,8 @@ AC_SUBST(TOPLEVEL_CONFIGURE_ARGUMENTS)
 baseargs=
 keep_next=no
 skip_next=no
+enable_gold=
+enable_ld_default=
 eval "set -- $ac_configure_args"
 for ac_arg
 do
@@ -133,6 +144,26 @@ do
       continue
       ;;
     -*)
+      # Strip argument from --enable-gold=*, since our binutils and
+      # gcc-4.6 take different arguments for dual linker support. We will
+      # pass --enable-gold=both/gold to binutils and --enable-gold=default
+      # gcc-4.6 if dual linker is needed.
+      case "$ac_arg" in
+        --enable-gold | --enable-gold=* )
+          enable_gold="$ac_arg"
+          ac_arg="--enable-gold"
+          ;;
+        --disable-gold )
+          enable_gold=
+          ;;
+        --enable-ld=default )
+          enable_ld_default=yes
+          ;;
+        --disable-ld )
+          enable_ld_default=
+          ;;
+      esac
+
       # An option.  Add it.
       case $ac_arg in
        *\'*)
@@ -170,15 +201,44 @@ if test "$silent" = yes; then
 fi
 
 AC_SUBST(baseargs)
+AC_SUBST(enable_gold)
+AC_SUBST(enable_ld_default)
 
+# Strip --with-sysroot, which is really "target" sysroot, from baseargs
+# to form host_baseargs for building host libraries.  Passing target
+# --with-sysroot is detrimantal (*1). Invent a new option
+# --with-host-sysroot if needed in the future.
+# Note that baseargs are quoted.
 #
-# Check for Canadian cross, which is not supported.
+# (*1) path dependency_libs= in .libs/libgmpxx.lai has '=' prefix!
 #
-AC_MSG_CHECKING([for Canadian cross])
-if test $build != $host ; then
-  AC_MSG_ERROR(Canadian cross build not supported.)
+host_baseargs=
+for ac_arg in $baseargs
+do
+  case $ac_arg in
+  \'--with-sysroot=*\' )
+    ;;
+  *)
+    host_baseargs="$host_baseargs $ac_arg"
+    ;;
+  esac
+done
+
+AC_SUBST(host_baseargs)
+
+ENABLE_GRAPHITE=no
+AC_ARG_ENABLE([graphite],
+              AC_HELP_STRING([--enable-graphite],
+                             [Enable Graphite optimization @<:@default=no@:>@]))
+graphite=yes
+if test x${enableval} != xyes; then
+  graphite=no
 fi
-AC_MSG_RESULT(no)
+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
@@ -198,8 +258,8 @@ AC_SUBST(package_to_srcdir)
 # 4. tool/x.tar.bz2
 m4_pattern_allow([^AC_MSG_ERROR$])
 AC_DEFUN([ANDROID_CHECK_PACKAGE],
-[x=$1; tool=${x%-*}; \
-if test ! -d $srcdir/../$tool/$1 ; then
+[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
@@ -208,6 +268,14 @@ if test ! -d $srcdir/../$tool/$1 ; 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
@@ -226,6 +294,53 @@ AC_MSG_RESULT($BINUTILS_VERSION)
 AC_SUBST(BINUTILS_VERSION)
 ANDROID_CHECK_PACKAGE(binutils-${BINUTILS_VERSION})
 
+m4_pattern_allow(AM_INIT_AUTOMAKE)
+# macro to find binutils version for dual linker support.
+# For binutils-2.21 and up, add --enable-gold=default,
+# else add --enable-gold=both/gold.
+AC_DEFUN([FIND_BINUTILS_VERSION],
+[binutils_version_file="${srcdir}/../binutils/$1/bfd/configure.in"
+if test -f "${binutils_version_file}"; then
+  binutils_version_num=`grep AM_INIT_AUTOMAKE ${binutils_version_file} | \
+                        sed -n "s/[AM_INIT_AUTOMAKE][[^,]]*,*\([[^)]]*\))/\1/p"`
+  BINUTILS_MAJOR=`echo $binutils_version_num | sed -e "s/[[^0-9]].*//"`
+  BINUTILS_MINOR=`echo $binutils_version_num | \
+                  sed  -e "s/^[[0-9]]*\.//" -e "s/[[^0-9]].*//"`
+  if test "$BINUTILS_MAJOR" -gt 2 -o \
+          \( "$BINUTILS_MAJOR" -eq 2 -a "$BINUTILS_MINOR" -ge 21 \); then
+    $2_MIN_VERSION_2_21="yes"
+  else
+    $2_MIN_VERSION_2_21="no"
+  fi
+else
+  # No configure file found. assume yes.
+  $2_MIN_VERSION_2_21="yes"
+fi ])
+
+FIND_BINUTILS_VERSION(binutils-${BINUTILS_VERSION},[BINUTILS])
+AC_SUBST(BINUTILS_MIN_VERSION_2_21)
+
+# 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.
+GOLD_MIN_VERSION_2_21="$BINUTILS_MIN_VERSION_2_21"
+if test x"$GOLD_VERSION" != x"$BINUTILS_VERSION" ; then
+  ANDROID_CHECK_PACKAGE(binutils-${GOLD_VERSION})
+  FIND_BINUTILS_VERSION(binutils-${GOLD_VERSION},[GOLD])
+fi
+AC_SUBST(GOLD_MIN_VERSION_2_21)
+
 # gcc version (default is 4.2.1)
 AC_MSG_CHECKING([target gcc version to build])
 AC_ARG_WITH([gcc-version],
@@ -240,7 +355,7 @@ 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_VERSION}/gcc/BASE-VER"
+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 | \
@@ -251,11 +366,27 @@ if test -f "${gcc_version_file}"; then
   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
+  if test "$GCC_MAJOR" -gt 4 -o \
+              \( "$GCC_MAJOR" -eq 4 -a "$GCC_MINOR" -ge 8 \) ; then
+    GCC_MIN_VERSION_4_8_0="yes"
+  else
+    GCC_MIN_VERSION_4_8_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"
+  GCC_MIN_VERSION_4_8_0="yes"
 fi
 AC_SUBST(GCC_MIN_VERSION_4_3_0)
+AC_SUBST(GCC_MIN_VERSION_4_5_0)
+AC_SUBST(GCC_MIN_VERSION_4_8_0)
 
 # newlib version (default is 1.16.0)
 # newlib is only used for arm-newlib-eabi for testing
@@ -304,6 +435,83 @@ 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 and 4.6 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*|0.17*|0.18*)
+    # CLooG 0.16+ has its own embedded polyhedral library
+    CLOOG_BACKEND="--enable-cloog-backend=isl"
+    ;;
+  *)
+    AC_MSG_ERROR(Unsupported cloog version);
+esac
+AC_SUBST(CLOOG_BACKEND)
+ANDROID_CHECK_PACKAGE(cloog-${CLOOG_VERSION})
+fi
+AC_SUBST(CLOOG_VERSION)
+
+if test "$ENABLE_GRAPHITE" == "yes"; then
+# isl version (default is 0.11.1)
+# isl is only used for gcc 4.8+ with graphite optimization.
+AC_MSG_CHECKING([isl version])
+AC_ARG_WITH([isl-version],
+  [  --with-isl-version=VERSION
+                         use isl-VERSION (default is 0.11.1)],
+  [if test x"$withval" != x ; then
+     ISL_VERSION="$withval"
+   fi],
+[ISL_VERSION="0.11.1"])
+AC_MSG_RESULT($ISL_VERSION)
+ANDROID_CHECK_PACKAGE(isl-${ISL_VERSION})
+fi
+AC_SUBST(ISL_VERSION)
+
 # gdb version (default is 6.6)
 AC_MSG_CHECKING([target gdb version to build])
 AC_ARG_WITH([gdb-version],
@@ -317,4 +525,179 @@ AC_MSG_RESULT($GDB_VERSION)
 AC_SUBST(GDB_VERSION)
 ANDROID_CHECK_PACKAGE(gdb-${GDB_VERSION})
 
+# figure out if we need to build expat for gdb 7.2+
+gdb_version_file="${srcdir}/../gdb/gdb-${GDB_VERSION}/gdb/version.in"
+if test -f "${gdb_version_file}"; then
+  GDB_MAJOR=`head -n 1 $gdb_version_file | sed  -e "s/[[^0-9]].*//"`
+  GDB_MINOR=`head -n 1 $gdb_version_file | \
+           sed  -e "s/^[[0-9]]*\.//" -e "s/[[^0-9]].*//"`
+  if test "$GDB_MAJOR" -gt 7 -o \
+          \( "$GDB_MAJOR" -eq 7 -a "$GDB_MINOR" -ge 2 \) ; then
+    GDB_MIN_VERSION_7_2="yes"
+  else
+    GDB_MIN_VERSION_7_2="no"
+  fi
+else
+  # No version file, assume it is trunk
+  GDB_MIN_VERSION_7_2="yes"
+fi
+AC_SUBST(GDB_MIN_VERSION_7_2)
+
+if test "$GDB_MIN_VERSION_7_2" == "yes"; then
+# expat version (default is 2.0.1)
+# expat is only used for gdb version higher than 7.2
+AC_MSG_CHECKING([expat version])
+AC_ARG_WITH([expat-version],
+  [  --with-expat-version=VERSION
+                          use expat-VERSION (default is 2.0.1)],
+  [if test x"$withval" != x ; then
+     EXPAT_VERSION="$withval"
+   fi],
+[EXPAT_VERSION="2.0.1"])
+AC_MSG_RESULT($EXPAT_VERSION)
+ANDROID_CHECK_PACKAGE(expat-${EXPAT_VERSION})
+fi
+AC_SUBST(EXPAT_VERSION)
+
+if test "$GDB_MIN_VERSION_7_2" == "yes"; then
+AC_MSG_CHECKING([with python])
+AC_ARG_WITH([python],
+  [  --with-python=WITH_PYTHON
+                          use python WITH_PYTHON)],
+  [if test x"$withval" != x ; then
+     WITH_PYTHON="$withval"
+   fi],
+[WITH_PYTHON=""])
+AC_MSG_RESULT($WITH_PYTHON)
+fi
+AC_SUBST(WITH_PYTHON)
+
+# For certain targets, with gdb 7.2+, the proper gdb target is 
+# arm-linux-android.
+if test "$GDB_MIN_VERSION_7_2" == "yes"; then
+case $target in
+  arm-unknown-linux-androideabi | arm-unknown-eabi)
+    GDB_TARGET=arm-linux-android
+    ;;
+    *)
+    ;;
+esac
+fi
+
+# 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 <prefix> 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)
+
+# Specify a location for isl
+AC_ARG_WITH(isl, [  --with-isl=PATH
+                          specify prefix directory for the installed ISL package.],
+  [if test -d "$withval" ; then
+     have_isl="$withval"
+   elif test x"$withval" != x"no"; then
+     AC_MSG_ERROR(invalid value for --with-isl)
+   else
+     have_isl=no
+   fi],
+  [have_isl=no])
+AC_SUBST(have_isl)
+
+# Specify a location for expat
+AC_ARG_WITH(expat, [  --with-expat=PATH
+                          specify prefix directory for the installed EXPAT package.],
+  [if test -d "$withval" ; then
+     have_expat="$withval"
+   elif test x"$withval" != x"no"; then
+     AC_MSG_ERROR(invalid value for --with-expat)
+   else
+     have_expat=no
+   fi],
+  [have_expat=no])
+AC_SUBST(have_expat)
+
 AC_OUTPUT