common/autoconf/toolchain.m4
changeset 22466 25aaf85d1ada
parent 22465 51cc970b1b88
child 22467 b16a5ae55d50
equal deleted inserted replaced
22465:51cc970b1b88 22466:25aaf85d1ada
    42       AC_MSG_ERROR([Sun Studio compiler is required. Try setting --with-tools-dir.])
    42       AC_MSG_ERROR([Sun Studio compiler is required. Try setting --with-tools-dir.])
    43     else
    43     else
    44       COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*@<:@ ,\t@:>@$COMPILER_NAME@<:@ ,\t@:>@\(@<:@1-9@:>@\.@<:@0-9@:>@@<:@0-9@:>@*\).*/\1/p"`
    44       COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*@<:@ ,\t@:>@$COMPILER_NAME@<:@ ,\t@:>@\(@<:@1-9@:>@\.@<:@0-9@:>@@<:@0-9@:>@*\).*/\1/p"`
    45       COMPILER_VENDOR="Sun Studio"
    45       COMPILER_VENDOR="Sun Studio"
    46     fi
    46     fi
       
    47   elif test  "x$OPENJDK_TARGET_OS" = xaix; then
       
    48       COMPILER_VERSION_TEST=`$COMPILER -qversion  2>&1 | $TAIL -n 1`
       
    49       $ECHO $COMPILER_VERSION_TEST | $GREP "^Version: " > /dev/null
       
    50       if test $? -ne 0; then
       
    51         AC_MSG_ERROR([Failed to detect the compiler version of $COMPILER ....])
       
    52       else
       
    53         COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n 's/Version: \([0-9][0-9]\.[0-9][0-9]*\).*/\1/p'`
       
    54         COMPILER_VENDOR='IBM'
       
    55       fi
    47   elif test  "x$OPENJDK_TARGET_OS" = xwindows; then
    56   elif test  "x$OPENJDK_TARGET_OS" = xwindows; then
    48     # First line typically looks something like:
    57     # First line typically looks something like:
    49     # Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86
    58     # Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86
    50     COMPILER_VERSION_TEST=`$COMPILER 2>&1 | $HEAD -n 1 | $TR -d '\r'`
    59     COMPILER_VERSION_TEST=`$COMPILER 2>&1 | $HEAD -n 1 | $TR -d '\r'`
    51     COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*Version \(@<:@1-9@:>@@<:@0-9.@:>@*\) .*/\1/p"`
    60     COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*Version \(@<:@1-9@:>@@<:@0-9.@:>@*\) .*/\1/p"`
   135   if test "x[$]$1" = x; then
   144   if test "x[$]$1" = x; then
   136       HELP_MSG_MISSING_DEPENDENCY([devkit])
   145       HELP_MSG_MISSING_DEPENDENCY([devkit])
   137       AC_MSG_ERROR([Could not find a $COMPILER_NAME compiler. $HELP_MSG])
   146       AC_MSG_ERROR([Could not find a $COMPILER_NAME compiler. $HELP_MSG])
   138   fi
   147   fi
   139   BASIC_FIXUP_EXECUTABLE($1)
   148   BASIC_FIXUP_EXECUTABLE($1)
   140   AC_MSG_CHECKING([resolved symbolic links for $1])
       
   141   TEST_COMPILER="[$]$1"
   149   TEST_COMPILER="[$]$1"
   142   BASIC_REMOVE_SYMBOLIC_LINKS(TEST_COMPILER)
   150   # Don't remove symbolic links on AIX because 'xlc_r' and 'xlC_r' may all be links
   143   AC_MSG_RESULT([$TEST_COMPILER])
   151   # to 'xlc' but it is crucial that we invoke the compiler with the right name!
       
   152   if test "x$OPENJDK_BUILD_OS" != xaix; then
       
   153     AC_MSG_CHECKING([resolved symbolic links for $1])
       
   154     BASIC_REMOVE_SYMBOLIC_LINKS(TEST_COMPILER)
       
   155     AC_MSG_RESULT([$TEST_COMPILER])
       
   156   fi
   144   AC_MSG_CHECKING([if $1 is disguised ccache])
   157   AC_MSG_CHECKING([if $1 is disguised ccache])
   145 
   158 
   146   COMPILER_BASENAME=`$BASENAME "$TEST_COMPILER"`
   159   COMPILER_BASENAME=`$BASENAME "$TEST_COMPILER"`
   147   if test "x$COMPILER_BASENAME" = "xccache"; then
   160   if test "x$COMPILER_BASENAME" = "xccache"; then
   148     AC_MSG_RESULT([yes, trying to find proper $COMPILER_NAME compiler])
   161     AC_MSG_RESULT([yes, trying to find proper $COMPILER_NAME compiler])
   248   COMPILER_CHECK_LIST="$CC"
   261   COMPILER_CHECK_LIST="$CC"
   249 elif test "x$OPENJDK_TARGET_OS" = "xwindows"; then
   262 elif test "x$OPENJDK_TARGET_OS" = "xwindows"; then
   250   COMPILER_CHECK_LIST="cl"
   263   COMPILER_CHECK_LIST="cl"
   251 elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then
   264 elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then
   252   COMPILER_CHECK_LIST="cc gcc"
   265   COMPILER_CHECK_LIST="cc gcc"
       
   266 elif test "x$OPENJDK_TARGET_OS" = "xaix"; then
       
   267   # Do not probe for cc on AIX.
       
   268   COMPILER_CHECK_LIST="xlc_r"
   253 else
   269 else
   254   COMPILER_CHECK_LIST="gcc cc"
   270   COMPILER_CHECK_LIST="gcc cc"
   255 fi
   271 fi
   256 
   272 
   257 TOOLCHAIN_FIND_COMPILER([CC],[C],[$COMPILER_CHECK_LIST])
   273 TOOLCHAIN_FIND_COMPILER([CC],[C],[$COMPILER_CHECK_LIST])
   258 # Now that we have resolved CC ourself, let autoconf have its go at it
   274 # Now that we have resolved CC ourself, let autoconf have its go at it
   259 AC_PROG_CC([$CC])
   275 AC_PROG_CC([$CC])
       
   276 
       
   277 # Option used to tell the compiler whether to create 32- or 64-bit executables
       
   278 # Notice that CC contains the full compiler path at this point.
       
   279 case $CC in
       
   280   *xlc_r) COMPILER_TARGET_BITS_FLAG="-q";;
       
   281   *)      COMPILER_TARGET_BITS_FLAG="-m";;
       
   282 esac
       
   283 AC_SUBST(COMPILER_TARGET_BITS_FLAG)
   260 
   284 
   261 ### Locate C++ compiler (CXX)
   285 ### Locate C++ compiler (CXX)
   262 
   286 
   263 if test "x$CXX" != x; then
   287 if test "x$CXX" != x; then
   264   COMPILER_CHECK_LIST="$CXX"
   288   COMPILER_CHECK_LIST="$CXX"
   265 elif test "x$OPENJDK_TARGET_OS" = "xwindows"; then
   289 elif test "x$OPENJDK_TARGET_OS" = "xwindows"; then
   266   COMPILER_CHECK_LIST="cl"
   290   COMPILER_CHECK_LIST="cl"
   267 elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then
   291 elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then
   268   COMPILER_CHECK_LIST="CC g++"
   292   COMPILER_CHECK_LIST="CC g++"
       
   293 elif test "x$OPENJDK_TARGET_OS" = "xaix"; then
       
   294   # Do not probe for CC on AIX .
       
   295   COMPILER_CHECK_LIST="xlC_r"
   269 else
   296 else
   270   COMPILER_CHECK_LIST="g++ CC"
   297   COMPILER_CHECK_LIST="g++ CC"
   271 fi
   298 fi
   272 
   299 
   273 TOOLCHAIN_FIND_COMPILER([CXX],[C++],[$COMPILER_CHECK_LIST])
   300 TOOLCHAIN_FIND_COMPILER([CXX],[C++],[$COMPILER_CHECK_LIST])
   305     AC_CHECK_TOOL(AR, ar)
   332     AC_CHECK_TOOL(AR, ar)
   306     BASIC_FIXUP_EXECUTABLE(AR)
   333     BASIC_FIXUP_EXECUTABLE(AR)
   307 fi
   334 fi
   308 if test "x$OPENJDK_TARGET_OS" = xmacosx; then
   335 if test "x$OPENJDK_TARGET_OS" = xmacosx; then
   309     ARFLAGS="-r"
   336     ARFLAGS="-r"
       
   337 elif test "x$OPENJDK_TARGET_OS" = xaix; then
       
   338     ARFLAGS="-X64"
   310 else
   339 else
   311     ARFLAGS=""
   340     ARFLAGS=""
   312 fi
   341 fi
   313 AC_SUBST(ARFLAGS)
   342 AC_SUBST(ARFLAGS)
   314 
   343 
   369     AS_IF([test "x$VARIANT" = xOPT], [
   398     AS_IF([test "x$VARIANT" = xOPT], [
   370         RC_FLAGS="$RC_FLAGS -d NDEBUG"
   399         RC_FLAGS="$RC_FLAGS -d NDEBUG"
   371     ])
   400     ])
   372 
   401 
   373     # The version variables used to create RC_FLAGS may be overridden
   402     # The version variables used to create RC_FLAGS may be overridden
   374     # in a custom configure script, or possibly the command line.  
   403     # in a custom configure script, or possibly the command line.
   375     # Let those variables be expanded at make time in spec.gmk.
   404     # Let those variables be expanded at make time in spec.gmk.
   376     # The \$ are escaped to the shell, and the $(...) variables
   405     # The \$ are escaped to the shell, and the $(...) variables
   377     # are evaluated by make.
   406     # are evaluated by make.
   378     RC_FLAGS="$RC_FLAGS \
   407     RC_FLAGS="$RC_FLAGS \
   379         -d \"JDK_BUILD_ID=\$(FULL_VERSION)\" \
   408         -d \"JDK_BUILD_ID=\$(FULL_VERSION)\" \
   547         CFLAGS_JDK="${CFLAGS_JDK} -D__solaris__"
   576         CFLAGS_JDK="${CFLAGS_JDK} -D__solaris__"
   548         CXXFLAGS_JDK="${CXXFLAGS_JDK} -D__solaris__"
   577         CXXFLAGS_JDK="${CXXFLAGS_JDK} -D__solaris__"
   549         CFLAGS_JDKLIB_EXTRA='-xstrconst'
   578         CFLAGS_JDKLIB_EXTRA='-xstrconst'
   550         POST_STRIP_CMD="$STRIP -x"
   579         POST_STRIP_CMD="$STRIP -x"
   551         POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\""
   580         POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\""
       
   581     fi
       
   582     if test "x$OPENJDK_TARGET_OS" = xaix; then
       
   583         COMPILER_NAME=xlc
       
   584         PICFLAG="-qpic=large"
       
   585         LIBRARY_PREFIX=lib
       
   586         SHARED_LIBRARY='lib[$]1.so'
       
   587         STATIC_LIBRARY='lib[$]1.a'
       
   588         SHARED_LIBRARY_FLAGS="-qmkshrobj"
       
   589         SHARED_LIBRARY_SUFFIX='.so'
       
   590         STATIC_LIBRARY_SUFFIX='.a'
       
   591         OBJ_SUFFIX='.o'
       
   592         EXE_SUFFIX=''
       
   593         SET_SHARED_LIBRARY_NAME=''
       
   594         SET_SHARED_LIBRARY_MAPFILE=''
       
   595         C_FLAG_REORDER=''
       
   596         CXX_FLAG_REORDER=''
       
   597         SET_SHARED_LIBRARY_ORIGIN=''
       
   598         SET_EXECUTABLE_ORIGIN=""
       
   599         CFLAGS_JDK=""
       
   600         CXXFLAGS_JDK=""
       
   601         CFLAGS_JDKLIB_EXTRA=''
       
   602         POST_STRIP_CMD="$STRIP -X32_64"
       
   603         POST_MCS_CMD=""
   552     fi
   604     fi
   553     if test "x$OPENJDK_TARGET_OS" = xwindows; then
   605     if test "x$OPENJDK_TARGET_OS" = xwindows; then
   554         # If it is not gcc, then assume it is the MS Visual Studio compiler
   606         # If it is not gcc, then assume it is the MS Visual Studio compiler
   555         COMPILER_NAME=cl
   607         COMPILER_NAME=cl
   556         PICFLAG=""
   608         PICFLAG=""
   721             CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0"
   773             CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0"
   722             CXX_O_FLAG_NONE=""
   774             CXX_O_FLAG_NONE=""
   723             ;;
   775             ;;
   724         esac
   776         esac
   725 
   777 
   726     CFLAGS_DEBUG_SYMBOLS="-g -xs"
   778         CFLAGS_DEBUG_SYMBOLS="-g -xs"
   727     CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs"
   779         CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs"
       
   780         ;;
       
   781       xlc )
       
   782         C_FLAG_DEPS="-qmakedep=gcc -MF"
       
   783         CXX_FLAG_DEPS="-qmakedep=gcc -MF"
       
   784         C_O_FLAG_HIGHEST="-O3"
       
   785         C_O_FLAG_HI="-O3 -qstrict"
       
   786         C_O_FLAG_NORM="-O2"
       
   787         C_O_FLAG_NONE=""
       
   788         CXX_O_FLAG_HIGHEST="-O3"
       
   789         CXX_O_FLAG_HI="-O3 -qstrict"
       
   790         CXX_O_FLAG_NORM="-O2"
       
   791         CXX_O_FLAG_NONE=""
       
   792         CFLAGS_DEBUG_SYMBOLS="-g"
       
   793         CXXFLAGS_DEBUG_SYMBOLS="-g"
       
   794         LDFLAGS_JDK="${LDFLAGS_JDK} -q64 -brtl -bnolibpath -liconv -bexpall"
       
   795         CFLAGS_JDK="${CFLAGS_JDK} -qchars=signed -q64 -qfullpath -qsaveopt"
       
   796         CXXFLAGS_JDK="${CXXFLAGS_JDK} -qchars=signed -q64 -qfullpath -qsaveopt"
       
   797         ;;
   728     esac
   798     esac
   729     ;;
   799     ;;
   730   CL )
   800   CL )
   731     C_O_FLAG_HIGHEST="-O2"
   801     C_O_FLAG_HIGHEST="-O2"
   732     C_O_FLAG_HI="-O1"
   802     C_O_FLAG_HI="-O1"
   833       	  CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX -norunpath -xnolib"
   903       	  CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX -norunpath -xnolib"
   834 
   904 
   835           LDFLAGS_JDK="$LDFLAGS_JDK -z defs -xildoff -ztext"
   905           LDFLAGS_JDK="$LDFLAGS_JDK -z defs -xildoff -ztext"
   836           LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK -norunpath -xnolib"
   906           LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK -norunpath -xnolib"
   837           ;;
   907           ;;
       
   908       xlc )
       
   909           CFLAGS_JDK="$CFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC"
       
   910           CXXFLAGS_JDK="$CXXFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC"
       
   911 
       
   912           LDFLAGS_JDK="$LDFLAGS_JDK"
       
   913           LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK"
       
   914           ;;
   838       cl )
   915       cl )
   839           CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \
   916           CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \
   840                -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \
   917                -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \
   841 	       -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \
   918 	       -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \
   842 	       -DWIN32 -DIAL"
   919 	       -DWIN32 -DIAL"
   902     CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DWINDOWS"
   979     CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DWINDOWS"
   903 fi
   980 fi
   904 if test "x$OPENJDK_TARGET_OS" = xsolaris; then
   981 if test "x$OPENJDK_TARGET_OS" = xsolaris; then
   905     CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS"
   982     CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS"
   906 fi
   983 fi
       
   984 if test "x$OPENJDK_TARGET_OS" = xaix; then
       
   985     CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DAIX -DPPC64"
       
   986 fi
   907 if test "x$OPENJDK_TARGET_OS" = xmacosx; then
   987 if test "x$OPENJDK_TARGET_OS" = xmacosx; then
   908     CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT"
   988     CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT"
   909     # Setting these parameters makes it an error to link to macosx APIs that are
   989     # Setting these parameters makes it an error to link to macosx APIs that are
   910     # newer than the given OS version and makes the linked binaries compatible even
   990     # newer than the given OS version and makes the linked binaries compatible even
   911     # if built on a newer version of the OS.
   991     # if built on a newer version of the OS.
  1071 [
  1151 [
  1072   # Some Zero and Shark settings.
  1152   # Some Zero and Shark settings.
  1073   # ZERO_ARCHFLAG tells the compiler which mode to build for
  1153   # ZERO_ARCHFLAG tells the compiler which mode to build for
  1074   case "${OPENJDK_TARGET_CPU}" in
  1154   case "${OPENJDK_TARGET_CPU}" in
  1075     s390)
  1155     s390)
  1076       ZERO_ARCHFLAG="-m31"
  1156       ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}31"
  1077       ;;
  1157       ;;
  1078     *)
  1158     *)
  1079       ZERO_ARCHFLAG="-m${OPENJDK_TARGET_CPU_BITS}"
  1159       ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}"
  1080   esac
  1160   esac
  1081   TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([$ZERO_ARCHFLAG], [], [ZERO_ARCHFLAG=""])
  1161   TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([$ZERO_ARCHFLAG], [], [ZERO_ARCHFLAG=""])
  1082   AC_SUBST(ZERO_ARCHFLAG)
  1162   AC_SUBST(ZERO_ARCHFLAG)
  1083 
  1163 
  1084   # Check that the compiler supports -mX flags
  1164   # Check that the compiler supports -mX (or -qX on AIX) flags
  1085   # Set COMPILER_SUPPORTS_TARGET_BITS_FLAG to 'true' if it does
  1165   # Set COMPILER_SUPPORTS_TARGET_BITS_FLAG to 'true' if it does
  1086   TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([-m${OPENJDK_TARGET_CPU_BITS}],
  1166   TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}],
  1087     [COMPILER_SUPPORTS_TARGET_BITS_FLAG=true],
  1167     [COMPILER_SUPPORTS_TARGET_BITS_FLAG=true],
  1088     [COMPILER_SUPPORTS_TARGET_BITS_FLAG=false])
  1168     [COMPILER_SUPPORTS_TARGET_BITS_FLAG=false])
  1089   AC_SUBST(COMPILER_SUPPORTS_TARGET_BITS_FLAG)
  1169   AC_SUBST(COMPILER_SUPPORTS_TARGET_BITS_FLAG)
  1090 
  1170 
  1091 
  1171