common/autoconf/toolchain.m4

changeset 1862
73494e6ff8e5
parent 1404
17e06bbf496e
child 2003
2224002fc647
child 2172
a0101c7abbb9
     1.1 --- a/common/autoconf/toolchain.m4	Mon Jul 25 15:06:07 2016 -0700
     1.2 +++ b/common/autoconf/toolchain.m4	Mon Jul 11 05:02:28 2016 +0100
     1.3 @@ -23,9 +23,59 @@
     1.4  # questions.
     1.5  #
     1.6  
     1.7 +# Prepare the system so that TOOLCHAIN_CHECK_COMPILER_VERSION can be called.
     1.8 +# Must have CC_VERSION_NUMBER and CXX_VERSION_NUMBER.
     1.9 +AC_DEFUN([TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS],
    1.10 +[
    1.11 +  if test "x$CC_VERSION" != "x$CXX_VERSION"; then
    1.12 +    AC_MSG_WARN([C and C++ compiler has different version numbers, $CC_VERSION vs $CXX_VERSION.])
    1.13 +    AC_MSG_WARN([This typically indicates a broken setup, and is not supported])
    1.14 +  fi
    1.15 +
    1.16 +  # We only check CC_VERSION since we assume CXX_VERSION is equal.
    1.17 +  if [ [[ "$CC_VERSION" =~ (.*\.){3} ]] ]; then
    1.18 +    AC_MSG_WARN([C compiler version number has more than three parts (X.Y.Z): $CC_VERSION. Comparisons might be wrong.])
    1.19 +  fi
    1.20 +
    1.21 +  if [ [[  "$CC_VERSION" =~ [0-9]{6} ]] ]; then
    1.22 +    AC_MSG_WARN([C compiler version number has a part larger than 99999: $CC_VERSION. Comparisons might be wrong.])
    1.23 +  fi
    1.24 +
    1.25 +  COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", [$]1, [$]2, [$]3) }' <<< "$CC_VERSION"`
    1.26 +])
    1.27 +
    1.28 +# Check if the configured compiler (C and C++) is of a specific version or
    1.29 +# newer. TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS must have been called before.
    1.30 +#
    1.31 +# Arguments:
    1.32 +#   $1:   The version string to check against the found version
    1.33 +#   $2:   block to run if the compiler is at least this version (>=)
    1.34 +#   $3:   block to run if the compiler is older than this version (<)
    1.35 +AC_DEFUN([TOOLCHAIN_CHECK_COMPILER_VERSION],
    1.36 +[
    1.37 +  REFERENCE_VERSION=$1
    1.38 +
    1.39 +  if [ [[ "$REFERENCE_VERSION" =~ (.*\.){3} ]] ]; then
    1.40 +    AC_MSG_ERROR([Internal error: Cannot compare to $REFERENCE_VERSION, only three parts (X.Y.Z) is supported])
    1.41 +  fi
    1.42 +
    1.43 +  if [ [[ "$REFERENCE_VERSION" =~ [0-9]{6} ]] ]; then
    1.44 +    AC_MSG_ERROR([Internal error: Cannot compare to $REFERENCE_VERSION, only parts < 99999 is supported])
    1.45 +  fi
    1.46 +
    1.47 +  # Version comparison method inspired by http://stackoverflow.com/a/24067243
    1.48 +  COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", [$]1, [$]2, [$]3) }' <<< "$REFERENCE_VERSION"`
    1.49 +
    1.50 +  if test $COMPARABLE_ACTUAL_VERSION -ge $COMPARABLE_REFERENCE_VERSION ; then
    1.51 +    m4_ifval([$2], [$2], [:])
    1.52 +  else
    1.53 +    m4_ifval([$3], [$3], [:])
    1.54 +  fi
    1.55 +])
    1.56 +
    1.57  # $1 = compiler to test (CC or CXX)
    1.58  # $2 = human readable name of compiler (C or C++)
    1.59 -AC_DEFUN([TOOLCHAIN_CHECK_COMPILER_VERSION],
    1.60 +AC_DEFUN([TOOLCHAIN_EXTRACT_COMPILER_VERSION],
    1.61  [
    1.62    COMPILER=[$]$1
    1.63    COMPILER_NAME=$2
    1.64 @@ -81,7 +131,8 @@
    1.65  
    1.66      # First line typically looks something like:
    1.67      # gcc (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2
    1.68 -    COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.* \(@<:@1-9@:>@@<:@0-9.@:>@*\)/\1/p"`
    1.69 +    COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | \
    1.70 +        $SED -e 's/^.* \(@<:@1-9@:>@\.@<:@0-9.@:>@*\)@<:@^0-9.@:>@.*$/\1/'`
    1.71      COMPILER_VENDOR=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^\(.*\) @<:@1-9@:>@@<:@0-9.@:>@*/\1/p"`
    1.72    fi
    1.73    # This sets CC_VERSION or CXX_VERSION. (This comment is a grep marker)
    1.74 @@ -181,7 +232,7 @@
    1.75      AC_MSG_RESULT([no, keeping $1])
    1.76      $1="$TEST_COMPILER"
    1.77    fi
    1.78 -  TOOLCHAIN_CHECK_COMPILER_VERSION([$1], [$COMPILER_NAME])
    1.79 +  TOOLCHAIN_EXTRACT_COMPILER_VERSION([$1], [$COMPILER_NAME])
    1.80  ])
    1.81  
    1.82  
    1.83 @@ -385,6 +436,12 @@
    1.84    # Now that we have resolved CXX ourself, let autoconf have its go at it
    1.85    AC_PROG_CXX([$CXX])
    1.86  
    1.87 +  # This is the compiler version number on the form X.Y[.Z]
    1.88 +  AC_SUBST(CC_VERSION)
    1.89 +  AC_SUBST(CXX_VERSION)
    1.90 +
    1.91 +  TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS
    1.92 +
    1.93    ### Locate other tools
    1.94  
    1.95    if test "x$OPENJDK_TARGET_OS" = xmacosx; then
    1.96 @@ -507,7 +564,8 @@
    1.97        BASIC_FIXUP_EXECUTABLE(DUMPBIN)
    1.98  
    1.99        COMPILER_TYPE=CL
   1.100 -      CCXXFLAGS="$CCXXFLAGS -nologo"
   1.101 +      # silence copyright notice and other headers.
   1.102 +      COMMON_CCXXFLAGS="$COMMON_CCXXFLAGS -nologo"
   1.103    ])
   1.104    AC_SUBST(RC_FLAGS)
   1.105    AC_SUBST(COMPILER_TYPE)
   1.106 @@ -954,12 +1012,20 @@
   1.107    #
   1.108    # Now setup the CFLAGS and LDFLAGS for the JDK build.
   1.109    # Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build.
   1.110 +  #    CFLAGS_JDK    - C Compiler flags
   1.111 +  #    CXXFLAGS_JDK  - C++ Compiler flags
   1.112 +  #    COMMON_CCXXFLAGS_JDK - common to C and C++
   1.113    #
   1.114    case $COMPILER_NAME in
   1.115      gcc )
   1.116 -      CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses \
   1.117 +      COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses \
   1.118        -pipe \
   1.119        -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE"
   1.120 +      CXXSTD_CXXFLAG="-std=gnu++98"
   1.121 +      TOOLCHAIN_CXX_COMPILER_CHECK_ARGUMENTS([$CXXSTD_CXXFLAG $CFLAGS_WARNINGS_ARE_ERRORS],
   1.122 +    					     [], [CXXSTD_CXXFLAG=""])
   1.123 +      CXXFLAGS_JDK="${CXXFLAGS_JDK} ${CXXSTD_CXXFLAG}"
   1.124 +      AC_SUBST([CXXSTD_CXXFLAG])
   1.125        case $OPENJDK_TARGET_CPU_ARCH in
   1.126          arm )
   1.127            # on arm we don't prevent gcc to omit frame pointer but do prevent strict aliasing
   1.128 @@ -969,16 +1035,17 @@
   1.129            # on ppc we don't prevent gcc to omit frame pointer nor strict-aliasing
   1.130            ;;
   1.131          * )
   1.132 -          CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fno-omit-frame-pointer"
   1.133 +          COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -fno-omit-frame-pointer"
   1.134            CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing"
   1.135            ;;
   1.136        esac
   1.137 +      TOOLCHAIN_CHECK_COMPILER_VERSION(6, TOOLCHAIN_SETUP_GCC6_COMPILER_FLAGS)
   1.138        ;;
   1.139      ossc )
   1.140 -      CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS"
   1.141 +      COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS"
   1.142        case $OPENJDK_TARGET_CPU_ARCH in
   1.143          x86 )
   1.144 -          CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DcpuIntel -Di586 -D$OPENJDK_TARGET_CPU_LEGACY_LIB"
   1.145 +          COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DcpuIntel -Di586 -D$OPENJDK_TARGET_CPU_LEGACY_LIB"
   1.146            CFLAGS_JDK="$CFLAGS_JDK -erroff=E_BAD_PRAGMA_PACK_VALUE"
   1.147            ;;
   1.148        esac
   1.149 @@ -997,16 +1064,16 @@
   1.150        LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK"
   1.151        ;;
   1.152      cl )
   1.153 -      CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \
   1.154 +      COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \
   1.155        -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \
   1.156        -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \
   1.157        -DWIN32 -DIAL"
   1.158        case $OPENJDK_TARGET_CPU in
   1.159          x86 )
   1.160 -          CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_X86_ -Dx86"
   1.161 +          COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_X86_ -Dx86"
   1.162            ;;
   1.163          x86_64 )
   1.164 -          CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_AMD64_ -Damd64"
   1.165 +          COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_AMD64_ -Damd64"
   1.166            ;;
   1.167        esac
   1.168        ;;
   1.169 @@ -1036,7 +1103,7 @@
   1.170        ;;
   1.171    esac
   1.172  
   1.173 -  CCXXFLAGS_JDK="$CCXXFLAGS_JDK $ADD_LP64"
   1.174 +  COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK $ADD_LP64"
   1.175  
   1.176    # The package path is used only on macosx?
   1.177    PACKAGE_PATH=/opt/local
   1.178 @@ -1049,27 +1116,27 @@
   1.179      #   Note: -Dmacro         is the same as    #define macro 1
   1.180      #         -Dmacro=        is the same as    #define macro
   1.181      if test "x$OPENJDK_TARGET_OS" = xsolaris; then
   1.182 -      CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN="
   1.183 +      COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_LITTLE_ENDIAN="
   1.184      else
   1.185 -      CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN"
   1.186 +      COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_LITTLE_ENDIAN"
   1.187      fi
   1.188    else
   1.189 -    CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN"
   1.190 +    COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_BIG_ENDIAN"
   1.191    fi
   1.192    if test "x$OPENJDK_TARGET_OS" = xlinux; then
   1.193 -    CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DLINUX"
   1.194 +    COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DLINUX"
   1.195    fi
   1.196    if test "x$OPENJDK_TARGET_OS" = xwindows; then
   1.197 -    CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DWINDOWS"
   1.198 +    COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DWINDOWS"
   1.199    fi
   1.200    if test "x$OPENJDK_TARGET_OS" = xsolaris; then
   1.201 -    CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS"
   1.202 +    COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DSOLARIS"
   1.203    fi
   1.204    if test "x$OPENJDK_TARGET_OS" = xaix; then
   1.205 -    CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DAIX -DPPC64"
   1.206 +    COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DAIX -DPPC64"
   1.207    fi
   1.208    if test "x$OPENJDK_TARGET_OS" = xmacosx; then
   1.209 -    CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT"
   1.210 +    COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT"
   1.211      # Setting these parameters makes it an error to link to macosx APIs that are
   1.212      # newer than the given OS version and makes the linked binaries compatible even
   1.213      # if built on a newer version of the OS.
   1.214 @@ -1079,25 +1146,25 @@
   1.215      # The macro takes the version with no dots, ex: 1070
   1.216      # Let the flags variables get resolved in make for easier override on make
   1.217      # command line.
   1.218 -    CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMAC_OS_X_VERSION_MAX_ALLOWED=\$(subst .,,\$(MACOSX_VERSION_MIN)) -mmacosx-version-min=\$(MACOSX_VERSION_MIN)"
   1.219 +    COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DMAC_OS_X_VERSION_MAX_ALLOWED=\$(subst .,,\$(MACOSX_VERSION_MIN)) -mmacosx-version-min=\$(MACOSX_VERSION_MIN)"
   1.220      LDFLAGS_JDK="$LDFLAGS_JDK -mmacosx-version-min=\$(MACOSX_VERSION_MIN)"
   1.221    fi
   1.222    if test "x$OPENJDK_TARGET_OS" = xbsd; then
   1.223 -    CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE"
   1.224 +    COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE"
   1.225    fi
   1.226    if test "x$DEBUG_LEVEL" = xrelease; then
   1.227 -    CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DNDEBUG"
   1.228 +    COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DNDEBUG"
   1.229    if test "x$OPENJDK_TARGET_OS" = xsolaris; then
   1.230 -    CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DTRIMMED"
   1.231 +    COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DTRIMMED"
   1.232    fi
   1.233    else
   1.234 -    CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DDEBUG"
   1.235 +    COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DDEBUG"
   1.236    fi
   1.237  
   1.238 -  CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DARCH='\"$OPENJDK_TARGET_CPU_LEGACY\"' -D$OPENJDK_TARGET_CPU_LEGACY"
   1.239 -  CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DRELEASE='\"\$(RELEASE)\"'"
   1.240 +  COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DARCH='\"$OPENJDK_TARGET_CPU_LEGACY\"' -D$OPENJDK_TARGET_CPU_LEGACY"
   1.241 +  COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DRELEASE='\"\$(RELEASE)\"'"
   1.242  
   1.243 -  CCXXFLAGS_JDK="$CCXXFLAGS_JDK \
   1.244 +  COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK \
   1.245        -I${JDK_OUTPUTDIR}/include \
   1.246        -I${JDK_OUTPUTDIR}/include/$OPENJDK_TARGET_OS \
   1.247        -I${JDK_TOPDIR}/src/share/javavm/export \
   1.248 @@ -1106,12 +1173,12 @@
   1.249        -I${JDK_TOPDIR}/src/$OPENJDK_TARGET_OS_API_DIR/native/common"
   1.250  
   1.251    # The shared libraries are compiled using the picflag.
   1.252 -  CFLAGS_JDKLIB="$CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA"
   1.253 -  CXXFLAGS_JDKLIB="$CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA "
   1.254 +  CFLAGS_JDKLIB="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA"
   1.255 +  CXXFLAGS_JDKLIB="$COMMON_CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA "
   1.256  
   1.257    # Executable flags
   1.258 -  CFLAGS_JDKEXE="$CCXXFLAGS_JDK $CFLAGS_JDK"
   1.259 -  CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK"
   1.260 +  CFLAGS_JDKEXE="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK"
   1.261 +  CXXFLAGS_JDKEXE="$COMMON_CCXXFLAGS_JDK $CXXFLAGS_JDK"
   1.262  
   1.263    # Now this is odd. The JDK native libraries have to link against libjvm.so
   1.264    # On 32-bit machines there is normally two distinct libjvm.so:s, client and server.
   1.265 @@ -1196,13 +1263,13 @@
   1.266  ])
   1.267  
   1.268  
   1.269 -# TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE],
   1.270 -#                                   [RUN-IF-FALSE])
   1.271 +# TOOLCHAIN_C_COMPILER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE],
   1.272 +#                                      [RUN-IF-FALSE])
   1.273  # ------------------------------------------------------------
   1.274 -# Check that the c and c++ compilers support an argument
   1.275 -AC_DEFUN([TOOLCHAIN_COMPILER_CHECK_ARGUMENTS],
   1.276 +# Check that the C compiler supports an argument
   1.277 +AC_DEFUN([TOOLCHAIN_C_COMPILER_CHECK_ARGUMENTS],
   1.278  [
   1.279 -  AC_MSG_CHECKING([if compiler supports "$1"])
   1.280 +  AC_MSG_CHECKING([if the C compiler supports "$1"])
   1.281    supports=yes
   1.282  
   1.283    saved_cflags="$CFLAGS"
   1.284 @@ -1213,6 +1280,23 @@
   1.285    AC_LANG_POP([C])
   1.286    CFLAGS="$saved_cflags"
   1.287  
   1.288 +  AC_MSG_RESULT([$supports])
   1.289 +  if test "x$supports" = "xyes" ; then
   1.290 +    m4_ifval([$2], [$2], [:])
   1.291 +  else
   1.292 +    m4_ifval([$3], [$3], [:])
   1.293 +  fi
   1.294 +])
   1.295 +
   1.296 +# TOOLCHAIN_CXX_COMPILER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE],
   1.297 +#                                        [RUN-IF-FALSE])
   1.298 +# ------------------------------------------------------------
   1.299 +# Check that the C++ compiler supports an argument
   1.300 +AC_DEFUN([TOOLCHAIN_CXX_COMPILER_CHECK_ARGUMENTS],
   1.301 +[
   1.302 +  AC_MSG_CHECKING([if the C++ compiler supports "$1"])
   1.303 +  supports=yes
   1.304 +
   1.305    saved_cxxflags="$CXXFLAGS"
   1.306    CXXFLAGS="$CXXFLAG $1"
   1.307    AC_LANG_PUSH([C++])
   1.308 @@ -1220,7 +1304,32 @@
   1.309        [supports=no])
   1.310    AC_LANG_POP([C++])
   1.311    CXXFLAGS="$saved_cxxflags"
   1.312 +  
   1.313 +  AC_MSG_RESULT([$supports])
   1.314 +  if test "x$supports" = "xyes" ; then
   1.315 +    m4_ifval([$2], [$2], [:])
   1.316 +  else
   1.317 +    m4_ifval([$3], [$3], [:])
   1.318 +  fi
   1.319 +])
   1.320  
   1.321 +# TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE],
   1.322 +#                                    [RUN-IF-FALSE])
   1.323 +# ------------------------------------------------------------
   1.324 +# Check that the C and C++ compilers support an argument
   1.325 +AC_DEFUN([TOOLCHAIN_COMPILER_CHECK_ARGUMENTS],
   1.326 +[
   1.327 +  TOOLCHAIN_C_COMPILER_CHECK_ARGUMENTS([$1],
   1.328 +  				       [C_COMP_SUPPORTS="yes"],
   1.329 +				       [C_COMP_SUPPORTS="no"])
   1.330 +  TOOLCHAIN_CXX_COMPILER_CHECK_ARGUMENTS([$1],
   1.331 +  					 [CXX_COMP_SUPPORTS="yes"],
   1.332 +					 [CXX_COMP_SUPPORTS="no"])
   1.333 +
   1.334 +  AC_MSG_CHECKING([if both compilers support "$1"])
   1.335 +  supports=no
   1.336 +  if test "x$C_COMP_SUPPORTS" = "xyes" -a "x$CXX_COMP_SUPPORTS" = "xyes"; then supports=yes; fi
   1.337 +  
   1.338    AC_MSG_RESULT([$supports])
   1.339    if test "x$supports" = "xyes" ; then
   1.340      m4_ifval([$2], [$2], [:])
   1.341 @@ -1311,3 +1420,20 @@
   1.342    AC_SUBST(JT_HOME)
   1.343    AC_SUBST(JTREGEXE)
   1.344  ])
   1.345 +
   1.346 +AC_DEFUN_ONCE([TOOLCHAIN_SETUP_GCC6_COMPILER_FLAGS],
   1.347 +[
   1.348 +  # These flags are required for GCC 6 builds as undefined behaviour in OpenJDK code
   1.349 +  # runs afoul of the more aggressive versions of these optimisations.
   1.350 +  # Notably, value range propagation now assumes that the this pointer of C++
   1.351 +  # member functions is non-null.
   1.352 +  NO_DELETE_NULL_POINTER_CHECKS_CFLAG="-fno-delete-null-pointer-checks"
   1.353 +  TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([$NO_DELETE_NULL_POINTER_CHECKS_CFLAG -Werror],
   1.354 +  				     [], [NO_DELETE_NULL_POINTER_CHECKS_CFLAG=""])
   1.355 +  AC_SUBST([NO_DELETE_NULL_POINTER_CHECKS_CFLAG])
   1.356 +  NO_LIFETIME_DSE_CFLAG="-fno-lifetime-dse"
   1.357 +  TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([$NO_LIFETIME_DSE_CFLAG -Werror],
   1.358 +  				     [], [NO_LIFETIME_DSE_CFLAG=""])
   1.359 +  CFLAGS_JDK="${CFLAGS_JDK} ${NO_DELETE_NULL_POINTER_CHECKS_CFLAG} ${NO_LIFETIME_DSE_CFLAG}"
   1.360 +  AC_SUBST([NO_LIFETIME_DSE_CFLAG])
   1.361 +])

mercurial