common/autoconf/toolchain.m4

changeset 1028
feeb67be5886
parent 978
c5a60709f587
child 1133
50aaf272884f
child 1304
c27cb0ab944f
     1.1 --- a/common/autoconf/toolchain.m4	Mon Mar 31 14:06:57 2014 -0700
     1.2 +++ b/common/autoconf/toolchain.m4	Wed Apr 02 10:01:38 2014 -0700
     1.3 @@ -44,6 +44,15 @@
     1.4        COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*@<:@ ,\t@:>@$COMPILER_NAME@<:@ ,\t@:>@\(@<:@1-9@:>@\.@<:@0-9@:>@@<:@0-9@:>@*\).*/\1/p"`
     1.5        COMPILER_VENDOR="Sun Studio"
     1.6      fi
     1.7 +  elif test  "x$OPENJDK_TARGET_OS" = xaix; then
     1.8 +      COMPILER_VERSION_TEST=`$COMPILER -qversion  2>&1 | $TAIL -n 1`
     1.9 +      $ECHO $COMPILER_VERSION_TEST | $GREP "^Version: " > /dev/null
    1.10 +      if test $? -ne 0; then
    1.11 +        AC_MSG_ERROR([Failed to detect the compiler version of $COMPILER ....])
    1.12 +      else
    1.13 +        COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n 's/Version: \([0-9][0-9]\.[0-9][0-9]*\).*/\1/p'`
    1.14 +        COMPILER_VENDOR='IBM'
    1.15 +      fi
    1.16    elif test  "x$OPENJDK_TARGET_OS" = xwindows; then
    1.17      # First line typically looks something like:
    1.18      # Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86
    1.19 @@ -137,10 +146,14 @@
    1.20      AC_MSG_ERROR([Could not find a $COMPILER_NAME compiler. $HELP_MSG])
    1.21    fi
    1.22    BASIC_FIXUP_EXECUTABLE($1)
    1.23 -  AC_MSG_CHECKING([resolved symbolic links for $1])
    1.24    TEST_COMPILER="[$]$1"
    1.25 -  BASIC_REMOVE_SYMBOLIC_LINKS(TEST_COMPILER)
    1.26 -  AC_MSG_RESULT([$TEST_COMPILER])
    1.27 +  # Don't remove symbolic links on AIX because 'xlc_r' and 'xlC_r' may all be links
    1.28 +  # to 'xlc' but it is crucial that we invoke the compiler with the right name!
    1.29 +  if test "x$OPENJDK_BUILD_OS" != xaix; then
    1.30 +    AC_MSG_CHECKING([resolved symbolic links for $1])
    1.31 +    BASIC_REMOVE_SYMBOLIC_LINKS(TEST_COMPILER)
    1.32 +    AC_MSG_RESULT([$TEST_COMPILER])
    1.33 +  fi
    1.34    AC_MSG_CHECKING([if $1 is disguised ccache])
    1.35  
    1.36    COMPILER_BASENAME=`$BASENAME "$TEST_COMPILER"`
    1.37 @@ -254,6 +267,9 @@
    1.38      COMPILER_CHECK_LIST="cl"
    1.39    elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then
    1.40      COMPILER_CHECK_LIST="cc gcc"
    1.41 +  elif test "x$OPENJDK_TARGET_OS" = "xaix"; then
    1.42 +    # Do not probe for cc on AIX.
    1.43 +    COMPILER_CHECK_LIST="xlc_r"
    1.44    else
    1.45      COMPILER_CHECK_LIST="gcc cc"
    1.46    fi
    1.47 @@ -262,6 +278,14 @@
    1.48    # Now that we have resolved CC ourself, let autoconf have its go at it
    1.49    AC_PROG_CC([$CC])
    1.50  
    1.51 +  # Option used to tell the compiler whether to create 32- or 64-bit executables
    1.52 +  # Notice that CC contains the full compiler path at this point.
    1.53 +  case $CC in
    1.54 +    *xlc_r) COMPILER_TARGET_BITS_FLAG="-q";;
    1.55 +    *)      COMPILER_TARGET_BITS_FLAG="-m";;
    1.56 +  esac
    1.57 +  AC_SUBST(COMPILER_TARGET_BITS_FLAG)
    1.58 +
    1.59    ### Locate C++ compiler (CXX)
    1.60  
    1.61    if test "x$CXX" != x; then
    1.62 @@ -270,6 +294,9 @@
    1.63      COMPILER_CHECK_LIST="cl"
    1.64    elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then
    1.65      COMPILER_CHECK_LIST="CC g++"
    1.66 +  elif test "x$OPENJDK_TARGET_OS" = "xaix"; then
    1.67 +    # Do not probe for CC on AIX .
    1.68 +    COMPILER_CHECK_LIST="xlC_r"
    1.69    else
    1.70      COMPILER_CHECK_LIST="g++ CC"
    1.71    fi
    1.72 @@ -311,6 +338,8 @@
    1.73    fi
    1.74    if test "x$OPENJDK_TARGET_OS" = xmacosx; then
    1.75      ARFLAGS="-r"
    1.76 +  elif test "x$OPENJDK_TARGET_OS" = xaix; then
    1.77 +    ARFLAGS="-X64"
    1.78    else
    1.79      ARFLAGS=""
    1.80    fi
    1.81 @@ -554,6 +583,29 @@
    1.82        POST_STRIP_CMD="$STRIP -x"
    1.83        POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\""
    1.84      fi
    1.85 +    if test "x$OPENJDK_TARGET_OS" = xaix; then
    1.86 +        COMPILER_NAME=xlc
    1.87 +        PICFLAG="-qpic=large"
    1.88 +        LIBRARY_PREFIX=lib
    1.89 +        SHARED_LIBRARY='lib[$]1.so'
    1.90 +        STATIC_LIBRARY='lib[$]1.a'
    1.91 +        SHARED_LIBRARY_FLAGS="-qmkshrobj"
    1.92 +        SHARED_LIBRARY_SUFFIX='.so'
    1.93 +        STATIC_LIBRARY_SUFFIX='.a'
    1.94 +        OBJ_SUFFIX='.o'
    1.95 +        EXE_SUFFIX=''
    1.96 +        SET_SHARED_LIBRARY_NAME=''
    1.97 +        SET_SHARED_LIBRARY_MAPFILE=''
    1.98 +        C_FLAG_REORDER=''
    1.99 +        CXX_FLAG_REORDER=''
   1.100 +        SET_SHARED_LIBRARY_ORIGIN=''
   1.101 +        SET_EXECUTABLE_ORIGIN=""
   1.102 +        CFLAGS_JDK=""
   1.103 +        CXXFLAGS_JDK=""
   1.104 +        CFLAGS_JDKLIB_EXTRA=''
   1.105 +        POST_STRIP_CMD="$STRIP -X32_64"
   1.106 +        POST_MCS_CMD=""
   1.107 +    fi
   1.108      if test "x$OPENJDK_TARGET_OS" = xwindows; then
   1.109        # If it is not gcc, then assume it is the MS Visual Studio compiler
   1.110        COMPILER_NAME=cl
   1.111 @@ -730,6 +782,24 @@
   1.112  
   1.113            CFLAGS_DEBUG_SYMBOLS="-g -xs"
   1.114            CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs"
   1.115 +          ;;
   1.116 +        xlc )
   1.117 +          C_FLAG_DEPS="-qmakedep=gcc -MF"
   1.118 +          CXX_FLAG_DEPS="-qmakedep=gcc -MF"
   1.119 +          C_O_FLAG_HIGHEST="-O3"
   1.120 +          C_O_FLAG_HI="-O3 -qstrict"
   1.121 +          C_O_FLAG_NORM="-O2"
   1.122 +          C_O_FLAG_NONE=""
   1.123 +          CXX_O_FLAG_HIGHEST="-O3"
   1.124 +          CXX_O_FLAG_HI="-O3 -qstrict"
   1.125 +          CXX_O_FLAG_NORM="-O2"
   1.126 +          CXX_O_FLAG_NONE=""
   1.127 +          CFLAGS_DEBUG_SYMBOLS="-g"
   1.128 +          CXXFLAGS_DEBUG_SYMBOLS="-g"
   1.129 +          LDFLAGS_JDK="${LDFLAGS_JDK} -q64 -brtl -bnolibpath -liconv -bexpall"
   1.130 +          CFLAGS_JDK="${CFLAGS_JDK} -qchars=signed -q64 -qfullpath -qsaveopt"
   1.131 +          CXXFLAGS_JDK="${CXXFLAGS_JDK} -qchars=signed -q64 -qfullpath -qsaveopt"
   1.132 +          ;;
   1.133        esac
   1.134        ;;
   1.135      CL )
   1.136 @@ -840,6 +910,13 @@
   1.137        LDFLAGS_JDK="$LDFLAGS_JDK -z defs -xildoff -ztext"
   1.138        LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK -norunpath -xnolib"
   1.139        ;;
   1.140 +    xlc )
   1.141 +      CFLAGS_JDK="$CFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC"
   1.142 +      CXXFLAGS_JDK="$CXXFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC"
   1.143 +
   1.144 +      LDFLAGS_JDK="$LDFLAGS_JDK"
   1.145 +      LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK"
   1.146 +      ;;
   1.147      cl )
   1.148        CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \
   1.149        -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \
   1.150 @@ -909,6 +986,9 @@
   1.151    if test "x$OPENJDK_TARGET_OS" = xsolaris; then
   1.152      CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS"
   1.153    fi
   1.154 +  if test "x$OPENJDK_TARGET_OS" = xaix; then
   1.155 +    CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DAIX -DPPC64"
   1.156 +  fi
   1.157    if test "x$OPENJDK_TARGET_OS" = xmacosx; then
   1.158      CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT"
   1.159      # Setting these parameters makes it an error to link to macosx APIs that are
   1.160 @@ -1076,20 +1156,38 @@
   1.161    # ZERO_ARCHFLAG tells the compiler which mode to build for
   1.162    case "${OPENJDK_TARGET_CPU}" in
   1.163      s390)
   1.164 -      ZERO_ARCHFLAG="-m31"
   1.165 +      ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}31"
   1.166        ;;
   1.167      *)
   1.168 -      ZERO_ARCHFLAG="-m${OPENJDK_TARGET_CPU_BITS}"
   1.169 +      ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}"
   1.170    esac
   1.171    TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([$ZERO_ARCHFLAG], [], [ZERO_ARCHFLAG=""])
   1.172    AC_SUBST(ZERO_ARCHFLAG)
   1.173  
   1.174 -  # Check that the compiler supports -mX flags
   1.175 +  # Check that the compiler supports -mX (or -qX on AIX) flags
   1.176    # Set COMPILER_SUPPORTS_TARGET_BITS_FLAG to 'true' if it does
   1.177 -  TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([-m${OPENJDK_TARGET_CPU_BITS}],
   1.178 +  TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}],
   1.179        [COMPILER_SUPPORTS_TARGET_BITS_FLAG=true],
   1.180        [COMPILER_SUPPORTS_TARGET_BITS_FLAG=false])
   1.181    AC_SUBST(COMPILER_SUPPORTS_TARGET_BITS_FLAG)
   1.182 +
   1.183 +
   1.184 +  # Check for broken SuSE 'ld' for which 'Only anonymous version tag is allowed in executable.'
   1.185 +  USING_BROKEN_SUSE_LD=no
   1.186 +  if test "x$OPENJDK_TARGET_OS" = xlinux && test "x$GCC" = xyes; then
   1.187 +    AC_MSG_CHECKING([for broken SuSE 'ld' which only understands anonymous version tags in executables])
   1.188 +    echo "SUNWprivate_1.1 { local: *; };" > version-script.map
   1.189 +    echo "int main() { }" > main.c
   1.190 +    if $CXX -Xlinker -version-script=version-script.map main.c 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD; then
   1.191 +      AC_MSG_RESULT(no)
   1.192 +      USING_BROKEN_SUSE_LD=no
   1.193 +    else
   1.194 +      AC_MSG_RESULT(yes)
   1.195 +      USING_BROKEN_SUSE_LD=yes
   1.196 +    fi
   1.197 +    rm -rf version-script.map main.c
   1.198 +  fi
   1.199 +  AC_SUBST(USING_BROKEN_SUSE_LD)
   1.200  ])
   1.201  
   1.202  # Setup the JTREG paths

mercurial