flags.m4 56.9 KB
Newer Older
1
#
2
# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code 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
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
# Reset the global CFLAGS/LDFLAGS variables and initialize them with the
# corresponding configure arguments instead
AC_DEFUN_ONCE([FLAGS_SETUP_USER_SUPPLIED_FLAGS],
[
  if test "x$CFLAGS" != "x${ADDED_CFLAGS}"; then
    AC_MSG_WARN([Ignoring CFLAGS($CFLAGS) found in environment. Use --with-extra-cflags])
  fi

  if test "x$CXXFLAGS" != "x${ADDED_CXXFLAGS}"; then
    AC_MSG_WARN([Ignoring CXXFLAGS($CXXFLAGS) found in environment. Use --with-extra-cxxflags])
  fi

  if test "x$LDFLAGS" != "x${ADDED_LDFLAGS}"; then
    AC_MSG_WARN([Ignoring LDFLAGS($LDFLAGS) found in environment. Use --with-extra-ldflags])
  fi

  AC_ARG_WITH(extra-cflags, [AS_HELP_STRING([--with-extra-cflags],
      [extra flags to be used when compiling jdk c-files])])

  AC_ARG_WITH(extra-cxxflags, [AS_HELP_STRING([--with-extra-cxxflags],
      [extra flags to be used when compiling jdk c++-files])])

  AC_ARG_WITH(extra-ldflags, [AS_HELP_STRING([--with-extra-ldflags],
      [extra flags to be used when linking jdk])])

  EXTRA_CFLAGS="$with_extra_cflags"
  EXTRA_CXXFLAGS="$with_extra_cxxflags"
  EXTRA_LDFLAGS="$with_extra_ldflags"

  # Hotspot needs these set in their legacy form
  LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS $EXTRA_CFLAGS"
  LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS $EXTRA_CXXFLAGS"
  LEGACY_EXTRA_LDFLAGS="$LEGACY_EXTRA_LDFLAGS $EXTRA_LDFLAGS"

  AC_SUBST(LEGACY_EXTRA_CFLAGS)
  AC_SUBST(LEGACY_EXTRA_CXXFLAGS)
  AC_SUBST(LEGACY_EXTRA_LDFLAGS)

E
erikj 已提交
64 65 66 67
  AC_SUBST(EXTRA_CFLAGS)
  AC_SUBST(EXTRA_CXXFLAGS)
  AC_SUBST(EXTRA_LDFLAGS)

68 69 70 71 72 73 74 75 76 77 78
  # The global CFLAGS and LDLAGS variables are used by configure tests and
  # should include the extra parameters
  CFLAGS="$EXTRA_CFLAGS"
  CXXFLAGS="$EXTRA_CXXFLAGS"
  LDFLAGS="$EXTRA_LDFLAGS"
  CPPFLAGS=""
])

# Setup the sysroot flags and add them to global CFLAGS and LDFLAGS so
# that configure can use them while detecting compilers.
# TOOLCHAIN_TYPE is available here.
79 80
# Param 1 - Optional prefix to all variables. (e.g BUILD_)
AC_DEFUN([FLAGS_SETUP_SYSROOT_FLAGS],
81
[
82
  if test "x[$]$1SYSROOT" != "x"; then
83 84 85 86
    if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
      if test "x$OPENJDK_TARGET_OS" = xsolaris; then
        # Solaris Studio does not have a concept of sysroot. Instead we must
        # make sure the default include and lib dirs are appended to each
87 88 89
        # compile and link command line. Must also add -I-xbuiltin to enable
        # inlining of system functions and intrinsics.
        $1SYSROOT_CFLAGS="-I-xbuiltin -I[$]$1SYSROOT/usr/include"
90 91 92
        $1SYSROOT_LDFLAGS="-L[$]$1SYSROOT/usr/lib$OPENJDK_TARGET_CPU_ISADIR \
            -L[$]$1SYSROOT/lib$OPENJDK_TARGET_CPU_ISADIR \
            -L[$]$1SYSROOT/usr/ccs/lib$OPENJDK_TARGET_CPU_ISADIR"
93 94
      fi
    elif test "x$TOOLCHAIN_TYPE" = xgcc; then
95 96
      $1SYSROOT_CFLAGS="--sysroot=[$]$1SYSROOT"
      $1SYSROOT_LDFLAGS="--sysroot=[$]$1SYSROOT"
97
    elif test "x$TOOLCHAIN_TYPE" = xclang; then
98 99
      $1SYSROOT_CFLAGS="-isysroot [$]$1SYSROOT"
      $1SYSROOT_LDFLAGS="-isysroot [$]$1SYSROOT"
100 101
    fi
    # Propagate the sysroot args to hotspot
102 103 104
    $1LEGACY_EXTRA_CFLAGS="[$]$1LEGACY_EXTRA_CFLAGS [$]$1SYSROOT_CFLAGS"
    $1LEGACY_EXTRA_CXXFLAGS="[$]$1LEGACY_EXTRA_CXXFLAGS [$]$1SYSROOT_CFLAGS"
    $1LEGACY_EXTRA_LDFLAGS="[$]$1LEGACY_EXTRA_LDFLAGS [$]$1SYSROOT_LDFLAGS"
105
    # The global CFLAGS and LDFLAGS variables need these for configure to function
106 107 108 109
    $1CFLAGS="[$]$1CFLAGS [$]$1SYSROOT_CFLAGS"
    $1CPPFLAGS="[$]$1CPPFLAGS [$]$1SYSROOT_CFLAGS"
    $1CXXFLAGS="[$]$1CXXFLAGS [$]$1SYSROOT_CFLAGS"
    $1LDFLAGS="[$]$1LDFLAGS [$]$1SYSROOT_LDFLAGS"
110 111 112 113
  fi

  if test "x$OPENJDK_TARGET_OS" = xmacosx; then
    # We also need -iframework<path>/System/Library/Frameworks
114 115
    $1SYSROOT_CFLAGS="[$]$1SYSROOT_CFLAGS -iframework [$]$1SYSROOT/System/Library/Frameworks"
    $1SYSROOT_LDFLAGS="[$]$1SYSROOT_LDFLAGS -iframework [$]$1SYSROOT/System/Library/Frameworks"
116 117
    # These always need to be set, or we can't find the frameworks embedded in JavaVM.framework
    # set this here so it doesn't have to be peppered throughout the forest
118 119
    $1SYSROOT_CFLAGS="[$]$1SYSROOT_CFLAGS -F [$]$1SYSROOT/System/Library/Frameworks/JavaVM.framework/Frameworks"
    $1SYSROOT_LDFLAGS="[$]$1SYSROOT_LDFLAGS -F [$]$1SYSROOT/System/Library/Frameworks/JavaVM.framework/Frameworks"
120 121
  fi

122 123
  AC_SUBST($1SYSROOT_CFLAGS)
  AC_SUBST($1SYSROOT_LDFLAGS)
124 125
])

126 127
AC_DEFUN_ONCE([FLAGS_SETUP_INIT_FLAGS],
[
128 129
  # COMPILER_TARGET_BITS_FLAG  : option for selecting 32- or 64-bit output
  # COMPILER_COMMAND_FILE_FLAG : option for passing a command file to the compiler
130 131
  # COMPILER_BINDCMD_FILE_FLAG : option for specifying a file which saves the binder
  #                              commands produced by the link step (currently AIX only)
132 133
  if test "x$TOOLCHAIN_TYPE" = xxlc; then
    COMPILER_TARGET_BITS_FLAG="-q"
134
    COMPILER_COMMAND_FILE_FLAG="-f"
135
    COMPILER_BINDCMD_FILE_FLAG="-bloadmap:"
136 137
  else
    COMPILER_TARGET_BITS_FLAG="-m"
138
    COMPILER_COMMAND_FILE_FLAG="@"
139
    COMPILER_BINDCMD_FILE_FLAG=""
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159

    # The solstudio linker does not support @-files.
    if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
      COMPILER_COMMAND_FILE_FLAG=
    fi

    # Check if @file is supported by gcc
    if test "x$TOOLCHAIN_TYPE" = xgcc; then
      AC_MSG_CHECKING([if @file is supported by gcc])
      # Extra emtpy "" to prevent ECHO from interpreting '--version' as argument
      $ECHO "" "--version" > command.file
      if $CXX @command.file 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD; then
        AC_MSG_RESULT(yes)
        COMPILER_COMMAND_FILE_FLAG="@"
      else
        AC_MSG_RESULT(no)
        COMPILER_COMMAND_FILE_FLAG=
      fi
      rm -rf command.file
    fi
160 161
  fi
  AC_SUBST(COMPILER_TARGET_BITS_FLAG)
162
  AC_SUBST(COMPILER_COMMAND_FILE_FLAG)
163
  AC_SUBST(COMPILER_BINDCMD_FILE_FLAG)
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191

  # FIXME: figure out if we should select AR flags depending on OS or toolchain.
  if test "x$OPENJDK_TARGET_OS" = xmacosx; then
    ARFLAGS="-r"
  elif test "x$OPENJDK_TARGET_OS" = xaix; then
    ARFLAGS="-X64"
  elif test "x$OPENJDK_TARGET_OS" = xwindows; then
    # lib.exe is used as AR to create static libraries.
    ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT"
  else
    ARFLAGS=""
  fi
  AC_SUBST(ARFLAGS)

  ## Setup strip.
  # FIXME: should this really be per platform, or should it be per toolchain type?
  # strip is not provided by clang or solstudio; so guessing platform makes most sense.
  # FIXME: we should really only export STRIPFLAGS from here, not POST_STRIP_CMD.
  if test "x$OPENJDK_TARGET_OS" = xlinux; then
    STRIPFLAGS="-g"
  elif test "x$OPENJDK_TARGET_OS" = xsolaris; then
    STRIPFLAGS="-x"
  elif test "x$OPENJDK_TARGET_OS" = xmacosx; then
    STRIPFLAGS="-S"
  elif test "x$OPENJDK_TARGET_OS" = xaix; then
    STRIPFLAGS="-X32_64"
  fi

192
  AC_SUBST(STRIPFLAGS)
193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216

  if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
    CC_OUT_OPTION=-Fo
    EXE_OUT_OPTION=-out:
    LD_OUT_OPTION=-out:
    AR_OUT_OPTION=-out:
  else
    # The option used to specify the target .o,.a or .so file.
    # When compiling, how to specify the to be created object file.
    CC_OUT_OPTION='-o$(SPACE)'
    # When linking, how to specify the to be created executable.
    EXE_OUT_OPTION='-o$(SPACE)'
    # When linking, how to specify the to be created dynamically linkable library.
    LD_OUT_OPTION='-o$(SPACE)'
    # When archiving, how to specify the to be create static archive for object files.
    AR_OUT_OPTION='rcs$(SPACE)'
  fi
  AC_SUBST(CC_OUT_OPTION)
  AC_SUBST(EXE_OUT_OPTION)
  AC_SUBST(LD_OUT_OPTION)
  AC_SUBST(AR_OUT_OPTION)

  # On Windows, we need to set RC flags.
  if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
217
    RC_FLAGS="-nologo -l0x409"
E
erikj 已提交
218
    JVM_RCFLAGS="-nologo"
219
    if test "x$DEBUG_LEVEL" = xrelease; then
220
      RC_FLAGS="$RC_FLAGS -DNDEBUG"
E
erikj 已提交
221
      JVM_RCFLAGS="$JVM_RCFLAGS -DNDEBUG"
222 223 224 225 226 227 228 229
    fi

    # The version variables used to create RC_FLAGS may be overridden
    # in a custom configure script, or possibly the command line.
    # Let those variables be expanded at make time in spec.gmk.
    # The \$ are escaped to the shell, and the $(...) variables
    # are evaluated by make.
    RC_FLAGS="$RC_FLAGS \
230
        -D\"JDK_VERSION_STRING=\$(VERSION_STRING)\" \
231 232
        -D\"JDK_COMPANY=\$(COMPANY_NAME)\" \
        -D\"JDK_COMPONENT=\$(PRODUCT_NAME) \$(JDK_RC_PLATFORM_NAME) binary\" \
233
        -D\"JDK_VER=\$(VERSION_NUMBER)\" \
234
        -D\"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\" \
235 236
        -D\"JDK_NAME=\$(PRODUCT_NAME) \$(JDK_RC_PLATFORM_NAME) \$(VERSION_MAJOR)\" \
        -D\"JDK_FVER=\$(subst .,\$(COMMA),\$(VERSION_NUMBER_FOUR_POSITIONS))\""
E
erikj 已提交
237 238 239 240 241 242 243 244 245 246

    JVM_RCFLAGS="$JVM_RCFLAGS \
        -D\"HS_BUILD_ID=\$(VERSION_STRING)\" \
        -D\"HS_COMPANY=\$(COMPANY_NAME)\" \
        -D\"JDK_DOTVER=\$(VERSION_NUMBER_FOUR_POSITIONS)\" \
        -D\"HS_COPYRIGHT=Copyright $COPYRIGHT_YEAR\" \
        -D\"HS_NAME=\$(PRODUCT_NAME) \$(VERSION_SHORT)\" \
        -D\"JDK_VER=\$(subst .,\$(COMMA),\$(VERSION_NUMBER_FOUR_POSITIONS))\" \
        -D\"HS_FNAME=jvm.dll\" \
        -D\"HS_INTERNAL_NAME=jvm\""
247 248
  fi
  AC_SUBST(RC_FLAGS)
E
erikj 已提交
249
  AC_SUBST(JVM_RCFLAGS)
250 251

  if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
252 253
    # silence copyright notice and other headers.
    COMMON_CCXXFLAGS="$COMMON_CCXXFLAGS -nologo"
254 255 256
  fi
])

E
erikj 已提交
257
AC_DEFUN([FLAGS_SETUP_COMPILER_FLAGS_FOR_LIBS],
258 259 260 261 262 263 264 265 266 267 268
[
  ###############################################################################
  #
  # How to compile shared libraries.
  #

  if test "x$TOOLCHAIN_TYPE" = xgcc; then
    PICFLAG="-fPIC"
    C_FLAG_REORDER=''
    CXX_FLAG_REORDER=''

269 270
    if test "x$OPENJDK_TARGET_OS" = xmacosx; then
      # Linking is different on MacOSX
271 272 273 274
      if test "x$STATIC_BUILD" = xtrue; then
        SHARED_LIBRARY_FLAGS ='-undefined dynamic_lookup'
      else
        SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG"
E
erikj 已提交
275
        JVM_CFLAGS="$JVM_CFLAGS $PICFLAG"
276
      fi
277
      SET_EXECUTABLE_ORIGIN='-Wl,-rpath,@loader_path/.'
278
      SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN"
279
      SET_SHARED_LIBRARY_NAME='-Wl,-install_name,@rpath/[$]1'
280
      SET_SHARED_LIBRARY_MAPFILE='-Wl,-exported_symbols_list,[$]1'
281 282 283
    else
      # Default works for linux, might work on other platforms as well.
      SHARED_LIBRARY_FLAGS='-shared'
284 285 286 287
      SET_EXECUTABLE_ORIGIN='-Wl,-rpath,\$$$$ORIGIN[$]1'
      SET_SHARED_LIBRARY_ORIGIN="-Wl,-z,origin $SET_EXECUTABLE_ORIGIN"
      SET_SHARED_LIBRARY_NAME='-Wl,-soname=[$]1'
      SET_SHARED_LIBRARY_MAPFILE='-Wl,-version-script=[$]1'
288 289 290 291 292
    fi
  elif test "x$TOOLCHAIN_TYPE" = xclang; then
    C_FLAG_REORDER=''
    CXX_FLAG_REORDER=''

293 294
    if test "x$OPENJDK_TARGET_OS" = xmacosx; then
      # Linking is different on MacOSX
295
      PICFLAG=''
296
      SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG"
297
      SET_EXECUTABLE_ORIGIN='-Wl,-rpath,@loader_path/.'
298
      SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN"
299
      SET_SHARED_LIBRARY_NAME='-Wl,-install_name,@rpath/[$]1'
300
      SET_SHARED_LIBRARY_MAPFILE='-Wl,-exported_symbols_list,[$]1'
E
erikj 已提交
301 302 303 304

      if test "x$STATIC_BUILD" = xfalse; then
        JVM_CFLAGS="$JVM_CFLAGS -fPIC"
      fi
305 306
    else
      # Default works for linux, might work on other platforms as well.
307
      PICFLAG='-fPIC'
308
      SHARED_LIBRARY_FLAGS='-shared'
309 310 311 312
      SET_EXECUTABLE_ORIGIN='-Wl,-rpath,\$$$$ORIGIN[$]1'
      SET_SHARED_LIBRARY_ORIGIN="-Wl,-z,origin $SET_EXECUTABLE_ORIGIN"
      SET_SHARED_LIBRARY_NAME='-Wl,-soname=[$]1'
      SET_SHARED_LIBRARY_MAPFILE='-Wl,-version-script=[$]1'
313 314 315 316 317 318 319 320
    fi
  elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
    PICFLAG="-KPIC"
    C_FLAG_REORDER='-xF'
    CXX_FLAG_REORDER='-xF'
    SHARED_LIBRARY_FLAGS="-G"
    SET_EXECUTABLE_ORIGIN='-R\$$$$ORIGIN[$]1'
    SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN"
321
    SET_SHARED_LIBRARY_NAME='-h [$]1'
322 323
    SET_SHARED_LIBRARY_MAPFILE='-M[$]1'
  elif test "x$TOOLCHAIN_TYPE" = xxlc; then
324 325 326 327 328 329 330 331 332 333 334 335 336 337
    # '-qpic' defaults to 'qpic=small'. This means that the compiler generates only
    # one instruction for accessing the TOC. If the TOC grows larger than 64K, the linker
    # will have to patch this single instruction with a call to some out-of-order code which
    # does the load from the TOC. This is of course slow. But in that case we also would have
    # to use '-bbigtoc' for linking anyway so we could also change the PICFLAG to 'qpic=large'.
    # With 'qpic=large' the compiler will by default generate a two-instruction sequence which
    # can be patched directly by the linker and does not require a jump to out-of-order code.
    # Another alternative instead of using 'qpic=large -bbigtoc' may be to use '-qminimaltoc'
    # instead. This creates a distinct TOC for every compilation unit (and thus requires two
    # loads for accessing a global variable). But there are rumors that this may be seen as a
    # 'performance feature' because of improved code locality of the symbols used in a
    # compilation unit.
    PICFLAG="-qpic"
    JVM_CFLAGS="$JVM_CFLAGS $PICFLAG"
338 339
    C_FLAG_REORDER=''
    CXX_FLAG_REORDER=''
340
    SHARED_LIBRARY_FLAGS="-qmkshrobj -bM:SRE -bnoentry"
341 342 343 344 345 346 347 348
    SET_EXECUTABLE_ORIGIN=""
    SET_SHARED_LIBRARY_ORIGIN=''
    SET_SHARED_LIBRARY_NAME=''
    SET_SHARED_LIBRARY_MAPFILE=''
  elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
    PICFLAG=""
    C_FLAG_REORDER=''
    CXX_FLAG_REORDER=''
349
    SHARED_LIBRARY_FLAGS="-dll"
350 351 352
    SET_EXECUTABLE_ORIGIN=''
    SET_SHARED_LIBRARY_ORIGIN=''
    SET_SHARED_LIBRARY_NAME=''
353
    SET_SHARED_LIBRARY_MAPFILE='-def:[$]1'
354 355 356 357 358 359 360 361
  fi

  AC_SUBST(C_FLAG_REORDER)
  AC_SUBST(CXX_FLAG_REORDER)
  AC_SUBST(SET_EXECUTABLE_ORIGIN)
  AC_SUBST(SET_SHARED_LIBRARY_ORIGIN)
  AC_SUBST(SET_SHARED_LIBRARY_NAME)
  AC_SUBST(SET_SHARED_LIBRARY_MAPFILE)
362
  AC_SUBST(SHARED_LIBRARY_FLAGS)
363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415

  # The (cross) compiler is now configured, we can now test capabilities
  # of the target platform.
])

# Documentation on common flags used for solstudio in HIGHEST.
#
# WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be
#          done with care, there are some assumptions below that need to
#          be understood about the use of pointers, and IEEE behavior.
#
# -fns: Use non-standard floating point mode (not IEEE 754)
# -fsimple: Do some simplification of floating point arithmetic (not IEEE 754)
# -fsingle: Use single precision floating point with 'float'
# -xalias_level=basic: Assume memory references via basic pointer types do not alias
#   (Source with excessing pointer casting and data access with mixed
#    pointer types are not recommended)
# -xbuiltin=%all: Use intrinsic or inline versions for math/std functions
#   (If you expect perfect errno behavior, do not use this)
# -xdepend: Loop data dependency optimizations (need -xO3 or higher)
# -xrestrict: Pointer parameters to functions do not overlap
#   (Similar to -xalias_level=basic usage, but less obvious sometimes.
#    If you pass in multiple pointers to the same data, do not use this)
# -xlibmil: Inline some library routines
#   (If you expect perfect errno behavior, do not use this)
# -xlibmopt: Use optimized math routines (CURRENTLY DISABLED)
#   (If you expect perfect errno behavior, do not use this)
#  Can cause undefined external on Solaris 8 X86 on __sincos, removing for now

    # FIXME: this will never happen since sparc != sparcv9, ie 32 bit, which we don't build anymore.
    # Bug?
    #if test "x$OPENJDK_TARGET_CPU" = xsparc; then
    #  CFLAGS_JDK="${CFLAGS_JDK} -xmemalign=4s"
    #  CXXFLAGS_JDK="${CXXFLAGS_JDK} -xmemalign=4s"
    #fi

AC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_FOR_OPTIMIZATION],
[

  ###############################################################################
  #
  # Setup the opt flags for different compilers
  # and different operating systems.
  #

  # FIXME: this was indirectly the old default, but just inherited.
  # if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
  #   C_FLAG_DEPS="-MMD -MF"
  # fi

  # Generate make dependency files
  if test "x$TOOLCHAIN_TYPE" = xgcc; then
    C_FLAG_DEPS="-MMD -MF"
416 417
  elif test "x$TOOLCHAIN_TYPE" = xclang; then
    C_FLAG_DEPS="-MMD -MF"
418 419 420 421 422 423 424 425 426 427 428 429
  elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
    C_FLAG_DEPS="-xMMD -xMF"
  elif test "x$TOOLCHAIN_TYPE" = xxlc; then
    C_FLAG_DEPS="-qmakedep=gcc -MF"
  fi
  CXX_FLAG_DEPS="$C_FLAG_DEPS"
  AC_SUBST(C_FLAG_DEPS)
  AC_SUBST(CXX_FLAG_DEPS)

  # Debug symbols
  if test "x$TOOLCHAIN_TYPE" = xgcc; then
    if test "x$OPENJDK_TARGET_CPU_BITS" = "x64" && test "x$DEBUG_LEVEL" = "xfastdebug"; then
430
      # reduce from default "-g2" option to save space
431 432 433 434 435 436
      CFLAGS_DEBUG_SYMBOLS="-g1"
      CXXFLAGS_DEBUG_SYMBOLS="-g1"
    else
      CFLAGS_DEBUG_SYMBOLS="-g"
      CXXFLAGS_DEBUG_SYMBOLS="-g"
    fi
437 438 439
  elif test "x$TOOLCHAIN_TYPE" = xclang; then
    CFLAGS_DEBUG_SYMBOLS="-g"
    CXXFLAGS_DEBUG_SYMBOLS="-g"
440 441
  elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
    CFLAGS_DEBUG_SYMBOLS="-g -xs"
442
    # -g0 enables debug symbols without disabling inlining.
443 444 445 446
    CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs"
  elif test "x$TOOLCHAIN_TYPE" = xxlc; then
    CFLAGS_DEBUG_SYMBOLS="-g"
    CXXFLAGS_DEBUG_SYMBOLS="-g"
447 448 449
  elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
    CFLAGS_DEBUG_SYMBOLS="-Zi"
    CXXFLAGS_DEBUG_SYMBOLS="-Zi"
450 451 452 453
  fi
  AC_SUBST(CFLAGS_DEBUG_SYMBOLS)
  AC_SUBST(CXXFLAGS_DEBUG_SYMBOLS)

E
erikj 已提交
454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469
  # Debug symbols for JVM_CFLAGS
  if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
    JVM_CFLAGS_SYMBOLS="$JVM_CFLAGS_SYMBOLS -xs"
    if test "x$DEBUG_LEVEL" = xslowdebug; then
      JVM_CFLAGS_SYMBOLS="$JVM_CFLAGS_SYMBOLS -g"
    else
      # -g0 does not disable inlining, which -g does.
      JVM_CFLAGS_SYMBOLS="$JVM_CFLAGS_SYMBOLS -g0"
    fi
  elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
    JVM_CFLAGS_SYMBOLS="$JVM_CFLAGS_SYMBOLS -Z7 -d2Zi+"
  else
    JVM_CFLAGS_SYMBOLS="$JVM_CFLAGS_SYMBOLS -g"
  fi
  AC_SUBST(JVM_CFLAGS_SYMBOLS)

470 471 472 473 474 475 476
  # bounds, memory and behavior checking options
  if test "x$TOOLCHAIN_TYPE" = xgcc; then
    case $DEBUG_LEVEL in
    release )
      # no adjustment
      ;;
    fastdebug )
477
      # no adjustment
478 479
      ;;
    slowdebug )
E
erikj 已提交
480
      # FIXME: By adding this to C(XX)FLAGS_DEBUG_OPTIONS/JVM_CFLAGS_SYMBOLS it
481 482 483
      # get's added conditionally on whether we produce debug symbols or not.
      # This is most likely not really correct.

484 485 486
      # Add runtime stack smashing and undefined behavior checks.
      # Not all versions of gcc support -fstack-protector
      STACK_PROTECTOR_CFLAG="-fstack-protector-all"
487
      FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [$STACK_PROTECTOR_CFLAG -Werror], IF_FALSE: [STACK_PROTECTOR_CFLAG=""])
488 489 490

      CFLAGS_DEBUG_OPTIONS="$STACK_PROTECTOR_CFLAG --param ssp-buffer-size=1"
      CXXFLAGS_DEBUG_OPTIONS="$STACK_PROTECTOR_CFLAG --param ssp-buffer-size=1"
E
erikj 已提交
491 492 493
      if test "x$STACK_PROTECTOR_CFLAG" != x; then
        JVM_CFLAGS_SYMBOLS="$JVM_CFLAGS_SYMBOLS $STACK_PROTECTOR_CFLAG --param ssp-buffer-size=1"
      fi
494 495 496 497
      ;;
    esac
  fi

E
erikj 已提交
498 499 500 501 502 503 504 505
  if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
    if test "x$DEBUG_LEVEL" != xrelease; then
      if test "x$OPENJDK_TARGET_CPU" = xx86_64; then
        JVM_CFLAGS="$JVM_CFLAGS -homeparams"
      fi
    fi
  fi

506 507
  # Optimization levels
  if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
508
    CC_HIGHEST="$CC_HIGHEST -fns -fsimple -fsingle -xbuiltin=%all -xdepend -xrestrict -xlibmil"
509 510 511

    if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86"; then
      # FIXME: seems we always set -xregs=no%frameptr; put it elsewhere more global?
E
erikj 已提交
512
      C_O_FLAG_HIGHEST_JVM="-xO4"
513
      C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xalias_level=basic -xregs=no%frameptr"
514 515
      C_O_FLAG_HI="-xO4 -Wu,-O4~yz -xregs=no%frameptr"
      C_O_FLAG_NORM="-xO2 -Wu,-O2~yz -xregs=no%frameptr"
516
      C_O_FLAG_DEBUG="-xregs=no%frameptr"
E
erikj 已提交
517
      C_O_FLAG_DEBUG_JVM=""
518
      C_O_FLAG_NONE="-xregs=no%frameptr"
E
erikj 已提交
519
      CXX_O_FLAG_HIGHEST_JVM="-xO4"
520 521 522
      CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xregs=no%frameptr"
      CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz -xregs=no%frameptr"
      CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz -xregs=no%frameptr"
523
      CXX_O_FLAG_DEBUG="-xregs=no%frameptr"
E
erikj 已提交
524
      CXX_O_FLAG_DEBUG_JVM=""
525 526 527 528 529 530
      CXX_O_FLAG_NONE="-xregs=no%frameptr"
      if test "x$OPENJDK_TARGET_CPU_BITS" = "x32"; then
        C_O_FLAG_HIGHEST="$C_O_FLAG_HIGHEST -xchip=pentium"
        CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HIGHEST -xchip=pentium"
      fi
    elif test "x$OPENJDK_TARGET_CPU_ARCH" = "xsparc"; then
E
erikj 已提交
531
      C_O_FLAG_HIGHEST_JVM="-xO4"
532
      C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xalias_level=basic -xprefetch=auto,explicit -xchip=ultra"
533 534
      C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0"
      C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0"
535
      C_O_FLAG_DEBUG=""
E
erikj 已提交
536
      C_O_FLAG_DEBUG_JVM=""
537
      C_O_FLAG_NONE=""
E
erikj 已提交
538
      CXX_O_FLAG_HIGHEST_JVM="-xO4"
539 540 541
      CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra"
      CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0"
      CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0"
542
      CXX_O_FLAG_DEBUG=""
E
erikj 已提交
543
      CXX_O_FLAG_DEBUG_JVM=""
544 545 546 547 548 549 550 551 552
      CXX_O_FLAG_NONE=""
    fi
  else
    # The remaining toolchains share opt flags between CC and CXX;
    # setup for C and duplicate afterwards.
    if test "x$TOOLCHAIN_TYPE" = xgcc; then
      if test "x$OPENJDK_TARGET_OS" = xmacosx; then
        # On MacOSX we optimize for size, something
        # we should do for all platforms?
E
erikj 已提交
553
        C_O_FLAG_HIGHEST_JVM="-Os"
554 555 556
        C_O_FLAG_HIGHEST="-Os"
        C_O_FLAG_HI="-Os"
        C_O_FLAG_NORM="-Os"
E
erikj 已提交
557
        C_O_FLAG_SIZE="-Os"
558
      else
E
erikj 已提交
559
        C_O_FLAG_HIGHEST_JVM="-O3"
560 561 562
        C_O_FLAG_HIGHEST="-O3"
        C_O_FLAG_HI="-O3"
        C_O_FLAG_NORM="-O2"
E
erikj 已提交
563
        C_O_FLAG_SIZE="-Os"
564
      fi
M
mduigou 已提交
565
      C_O_FLAG_DEBUG="-O0"
E
erikj 已提交
566 567 568 569 570
      if test "x$OPENJDK_TARGET_OS" = xmacosx; then
        C_O_FLAG_DEBUG_JVM=""
      elif test "x$OPENJDK_TARGET_OS" = xlinux; then
        C_O_FLAG_DEBUG_JVM="-O0"
      fi
571
      C_O_FLAG_NONE="-O0"
572 573 574 575
    elif test "x$TOOLCHAIN_TYPE" = xclang; then
      if test "x$OPENJDK_TARGET_OS" = xmacosx; then
        # On MacOSX we optimize for size, something
        # we should do for all platforms?
E
erikj 已提交
576
        C_O_FLAG_HIGHEST_JVM="-Os"
577 578 579
        C_O_FLAG_HIGHEST="-Os"
        C_O_FLAG_HI="-Os"
        C_O_FLAG_NORM="-Os"
E
erikj 已提交
580
        C_O_FLAG_SIZE="-Os"
581
      else
E
erikj 已提交
582
        C_O_FLAG_HIGHEST_JVM="-O3"
583 584 585
        C_O_FLAG_HIGHEST="-O3"
        C_O_FLAG_HI="-O3"
        C_O_FLAG_NORM="-O2"
E
erikj 已提交
586
        C_O_FLAG_SIZE="-Os"
587
      fi
588
      C_O_FLAG_DEBUG="-O0"
E
erikj 已提交
589 590 591 592 593
      if test "x$OPENJDK_TARGET_OS" = xmacosx; then
        C_O_FLAG_DEBUG_JVM=""
      elif test "x$OPENJDK_TARGET_OS" = xlinux; then
        C_O_FLAG_DEBUG_JVM="-O0"
      fi
594
      C_O_FLAG_NONE="-O0"
595
    elif test "x$TOOLCHAIN_TYPE" = xxlc; then
E
erikj 已提交
596
      C_O_FLAG_HIGHEST_JVM="-O3"
597 598 599
      C_O_FLAG_HIGHEST="-O3"
      C_O_FLAG_HI="-O3 -qstrict"
      C_O_FLAG_NORM="-O2"
600
      C_O_FLAG_DEBUG="-qnoopt"
E
erikj 已提交
601 602
      # FIXME: Value below not verified.
      C_O_FLAG_DEBUG_JVM=""
603
      C_O_FLAG_NONE="-qnoopt"
604
    elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
E
erikj 已提交
605
      C_O_FLAG_HIGHEST_JVM="-O2 -Oy-"
606 607 608
      C_O_FLAG_HIGHEST="-O2"
      C_O_FLAG_HI="-O1"
      C_O_FLAG_NORM="-O1"
609
      C_O_FLAG_DEBUG="-Od"
E
erikj 已提交
610
      C_O_FLAG_DEBUG_JVM=""
611
      C_O_FLAG_NONE="-Od"
E
erikj 已提交
612
      C_O_FLAG_SIZE="-Os"
613
    fi
E
erikj 已提交
614
    CXX_O_FLAG_HIGHEST_JVM="$C_O_FLAG_HIGHEST_JVM"
615 616 617
    CXX_O_FLAG_HIGHEST="$C_O_FLAG_HIGHEST"
    CXX_O_FLAG_HI="$C_O_FLAG_HI"
    CXX_O_FLAG_NORM="$C_O_FLAG_NORM"
618
    CXX_O_FLAG_DEBUG="$C_O_FLAG_DEBUG"
E
erikj 已提交
619
    CXX_O_FLAG_DEBUG_JVM="$C_O_FLAG_DEBUG_JVM"
620
    CXX_O_FLAG_NONE="$C_O_FLAG_NONE"
E
erikj 已提交
621
    CXX_O_FLAG_SIZE="$C_O_FLAG_SIZE"
622 623
  fi

624 625 626 627 628 629 630 631 632 633 634 635
  # Adjust optimization flags according to debug level.
  case $DEBUG_LEVEL in
    release )
      # no adjustment
      ;;
    fastdebug )
      # Not quite so much optimization
      C_O_FLAG_HI="$C_O_FLAG_NORM"
      CXX_O_FLAG_HI="$CXX_O_FLAG_NORM"
      ;;
    slowdebug )
      # Disable optimization
E
erikj 已提交
636
      C_O_FLAG_HIGHEST_JVM="$C_O_FLAG_DEBUG_JVM"
637 638 639
      C_O_FLAG_HIGHEST="$C_O_FLAG_DEBUG"
      C_O_FLAG_HI="$C_O_FLAG_DEBUG"
      C_O_FLAG_NORM="$C_O_FLAG_DEBUG"
E
erikj 已提交
640 641
      C_O_FLAG_SIZE="$C_O_FLAG_DEBUG"
      CXX_O_FLAG_HIGHEST_JVM="$CXX_O_FLAG_DEBUG_JVM"
642 643 644
      CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_DEBUG"
      CXX_O_FLAG_HI="$CXX_O_FLAG_DEBUG"
      CXX_O_FLAG_NORM="$CXX_O_FLAG_DEBUG"
E
erikj 已提交
645
      CXX_O_FLAG_SIZE="$CXX_O_FLAG_DEBUG"
646 647 648
      ;;
  esac

E
erikj 已提交
649
  AC_SUBST(C_O_FLAG_HIGHEST_JVM)
650 651 652
  AC_SUBST(C_O_FLAG_HIGHEST)
  AC_SUBST(C_O_FLAG_HI)
  AC_SUBST(C_O_FLAG_NORM)
653
  AC_SUBST(C_O_FLAG_DEBUG)
654
  AC_SUBST(C_O_FLAG_NONE)
E
erikj 已提交
655 656
  AC_SUBST(C_O_FLAG_SIZE)
  AC_SUBST(CXX_O_FLAG_HIGHEST_JVM)
657 658 659
  AC_SUBST(CXX_O_FLAG_HIGHEST)
  AC_SUBST(CXX_O_FLAG_HI)
  AC_SUBST(CXX_O_FLAG_NORM)
660
  AC_SUBST(CXX_O_FLAG_DEBUG)
661
  AC_SUBST(CXX_O_FLAG_NONE)
E
erikj 已提交
662
  AC_SUBST(CXX_O_FLAG_SIZE)
663 664
])

E
erikj 已提交
665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698

AC_DEFUN([FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK],
[

  FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK_HELPER([TARGET])
  FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK_HELPER([BUILD], [OPENJDK_BUILD_])

  # Tests are only ever compiled for TARGET
  # Flags for compiling test libraries
  CFLAGS_TESTLIB="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA"
  CXXFLAGS_TESTLIB="$COMMON_CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA"

  # Flags for compiling test executables
  CFLAGS_TESTEXE="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK"
  CXXFLAGS_TESTEXE="$COMMON_CCXXFLAGS_JDK $CXXFLAGS_JDK"

  AC_SUBST(CFLAGS_TESTLIB)
  AC_SUBST(CFLAGS_TESTEXE)
  AC_SUBST(CXXFLAGS_TESTLIB)
  AC_SUBST(CXXFLAGS_TESTEXE)

  LDFLAGS_TESTLIB="$LDFLAGS_JDKLIB"
  LDFLAGS_TESTEXE="$LDFLAGS_JDKEXE"

  AC_SUBST(LDFLAGS_TESTLIB)
  AC_SUBST(LDFLAGS_TESTEXE)

])

################################################################################
# $1 - Either BUILD or TARGET to pick the correct OS/CPU variables to check
#      conditionals against.
# $2 - Optional prefix for each variable defined.
AC_DEFUN([FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK_HELPER],
699 700 701
[
  # Special extras...
  if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
E
erikj 已提交
702 703 704
    if test "x$OPENJDK_$1_CPU_ARCH" = "xsparc"; then
      $2CFLAGS_JDKLIB_EXTRA="${$2CFLAGS_JDKLIB_EXTRA} -xregs=no%appl"
      $2CXXFLAGS_JDKLIB_EXTRA="${$2CXXFLAGS_JDKLIB_EXTRA} -xregs=no%appl"
705
    fi
E
erikj 已提交
706 707
    $2CFLAGS_JDKLIB_EXTRA="${$2CFLAGS_JDKLIB_EXTRA} -errtags=yes -errfmt"
    $2CXXFLAGS_JDKLIB_EXTRA="${$2CXXFLAGS_JDKLIB_EXTRA} -errtags=yes -errfmt"
708
  elif test "x$TOOLCHAIN_TYPE" = xxlc; then
E
erikj 已提交
709 710 711 712 713 714 715 716 717 718 719 720 721
    $2CFLAGS_JDK="${$2CFLAGS_JDK} -qchars=signed -qfullpath -qsaveopt"
    $2CXXFLAGS_JDK="${$2CXXFLAGS_JDK} -qchars=signed -qfullpath -qsaveopt"
  elif test "x$TOOLCHAIN_TYPE" = xgcc; then
    $2CXXSTD_CXXFLAG="-std=gnu++98"
    FLAGS_CXX_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [[$]$2CXXSTD_CXXFLAG -Werror],
    						 IF_FALSE: [$2CXXSTD_CXXFLAG=""])
    $2CXXFLAGS_JDK="${$2CXXFLAGS_JDK} ${$2CXXSTD_CXXFLAG}"
    AC_SUBST([$2CXXSTD_CXXFLAG])
  fi
  if test "x$OPENJDK_TARGET_OS" = xsolaris; then
    $2CFLAGS_JDK="${$2CFLAGS_JDK} -D__solaris__"
    $2CXXFLAGS_JDK="${$2CXXFLAGS_JDK} -D__solaris__"
    $2CFLAGS_JDKLIB_EXTRA='-xstrconst'
722 723
    CFLAGS_JDK="${CFLAGS_JDK} -qchars=signed -qfullpath -qsaveopt"
    CXXFLAGS_JDK="${CXXFLAGS_JDK} -qchars=signed -qfullpath -qsaveopt"
724 725
  fi

E
erikj 已提交
726 727 728 729 730 731 732 733 734
  if test "x$OPENJDK_TARGET_OS" = xsolaris; then
    $2CFLAGS_JDK="${$2CFLAGS_JDK} -D__solaris__"
    $2CXXFLAGS_JDK="${$2CXXFLAGS_JDK} -D__solaris__"
    $2CFLAGS_JDKLIB_EXTRA='-xstrconst'
  fi

  $2CFLAGS_JDK="${$2CFLAGS_JDK} ${$2EXTRA_CFLAGS}"
  $2CXXFLAGS_JDK="${$2CXXFLAGS_JDK} ${$2EXTRA_CXXFLAGS}"
  $2LDFLAGS_JDK="${$2LDFLAGS_JDK} ${$2EXTRA_LDFLAGS}"
735 736 737 738 739 740 741

  ###############################################################################
  #
  # Now setup the CFLAGS and LDFLAGS for the JDK build.
  # Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build.
  #

742
  # Setup compiler/platform specific flags into
E
erikj 已提交
743 744 745
  #    $2CFLAGS_JDK    - C Compiler flags
  #    $2CXXFLAGS_JDK  - C++ Compiler flags
  #    $2COMMON_CCXXFLAGS_JDK - common to C and C++
746
  if test "x$TOOLCHAIN_TYPE" = xgcc; then
E
erikj 已提交
747 748 749 750
    $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_GNU_SOURCE"
    $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_REENTRANT"
    $2JVM_CFLAGS="[$]$2JVM_CFLAGS -fcheck-new"
    if test "x$OPENJDK_$1_CPU" = xx86; then
751
      # Force compatibility with i586 on 32 bit intel platforms.
E
erikj 已提交
752 753
      $2COMMON_CCXXFLAGS="${$2COMMON_CCXXFLAGS} -march=i586"
      $2JVM_CFLAGS="[$]$2JVM_CFLAGS -march=i586"
754
    fi
E
erikj 已提交
755
    $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS [$]$2COMMON_CCXXFLAGS_JDK -Wall -Wextra -Wno-unused -Wno-unused-parameter -Wformat=2 \
756
        -pipe -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE"
E
erikj 已提交
757
    case $OPENJDK_$1_CPU_ARCH in
758 759
      arm )
        # on arm we don't prevent gcc to omit frame pointer but do prevent strict aliasing
E
erikj 已提交
760
        $2CFLAGS_JDK="${$2CFLAGS_JDK} -fno-strict-aliasing"
761 762
        ;;
      ppc )
763
        # on ppc we don't prevent gcc to omit frame pointer but do prevent strict aliasing
E
erikj 已提交
764
        $2CFLAGS_JDK="${$2CFLAGS_JDK} -fno-strict-aliasing"
765 766
        ;;
      * )
E
erikj 已提交
767 768
        $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -fno-omit-frame-pointer"
        $2CFLAGS_JDK="${$2CFLAGS_JDK} -fno-strict-aliasing"
769 770
        ;;
    esac
771
    TOOLCHAIN_CHECK_COMPILER_VERSION(VERSION: 6, IF_AT_LEAST: FLAGS_SETUP_GCC6_COMPILER_FLAGS)
772
  elif test "x$TOOLCHAIN_TYPE" = xclang; then
E
erikj 已提交
773 774 775 776 777 778 779 780
    $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_GNU_SOURCE"

    # Restrict the debug information created by Clang to avoid
    # too big object files and speed the build up a little bit
    # (see http://llvm.org/bugs/show_bug.cgi?id=7554)
    $2JVM_CFLAGS="[$]$2JVM_CFLAGS -flimit-debug-info"
    if test "x$OPENJDK_$1_OS" = xlinux; then
      if test "x$OPENJDK_$1_CPU" = xx86; then
781
        # Force compatibility with i586 on 32 bit intel platforms.
E
erikj 已提交
782 783
        $2COMMON_CCXXFLAGS="${$2COMMON_CCXXFLAGS} -march=i586"
        $2JVM_CFLAGS="[$]$2JVM_CFLAGS -march=i586"
784
      fi
E
erikj 已提交
785 786
      $2JVM_CFLAGS="[$]$2JVM_CFLAGS -Wno-sometimes-uninitialized"
      $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS [$]$2COMMON_CCXXFLAGS_JDK -Wall -Wextra -Wno-unused -Wno-unused-parameter -Wformat=2 \
787
          -pipe -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE"
E
erikj 已提交
788
      case $OPENJDK_$1_CPU_ARCH in
789 790
        ppc )
          # on ppc we don't prevent gcc to omit frame pointer but do prevent strict aliasing
E
erikj 已提交
791
          $2CFLAGS_JDK="${$2CFLAGS_JDK} -fno-strict-aliasing"
792 793
          ;;
        * )
E
erikj 已提交
794 795
          $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -fno-omit-frame-pointer"
          $2CFLAGS_JDK="${$2CFLAGS_JDK} -fno-strict-aliasing"
796 797
          ;;
      esac
798
    fi
799
  elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
E
erikj 已提交
800 801 802 803
    $2JVM_CFLAGS="[$]$2JVM_CFLAGS -DSPARC_WORKS"
    $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS [$]$2COMMON_CCXXFLAGS_JDK -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS"
    if test "x$OPENJDK_$1_CPU_ARCH" = xx86; then
      $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -DcpuIntel -Di586 -D$OPENJDK_$1_CPU_LEGACY_LIB"
804
    fi
805

E
erikj 已提交
806 807
    $2CFLAGS_JDK="[$]$2CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -W0,-noglobal"
    $2CXXFLAGS_JDK="[$]$2CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX -norunpath -xnolib"
808
  elif test "x$TOOLCHAIN_TYPE" = xxlc; then
E
erikj 已提交
809 810 811
    $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_REENTRANT -D__STDC_FORMAT_MACROS"
    $2CFLAGS_JDK="[$]$2CFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC"
    $2CXXFLAGS_JDK="[$]$2CXXFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC"
812
  elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
E
erikj 已提交
813
    $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS [$]$2COMMON_CCXXFLAGS_JDK \
814
        -MD -Zc:wchar_t- -W3 -wd4800 \
815 816
        -DWIN32_LEAN_AND_MEAN \
        -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \
817
        -D_WINSOCK_DEPRECATED_NO_WARNINGS \
818
        -DWIN32 -DIAL"
E
erikj 已提交
819 820
    if test "x$OPENJDK_$1_CPU" = xx86_64; then
      $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_AMD64_ -Damd64"
821
    else
E
erikj 已提交
822
      $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_X86_ -Dx86"
823
    fi
824 825 826 827
    # If building with Visual Studio 2010, we can still use _STATIC_CPPLIB to
    # avoid bundling msvcpNNN.dll. Doesn't work with newer versions of visual
    # studio.
    if test "x$TOOLCHAIN_VERSION" = "x2010"; then
828
      STATIC_CPPLIB_FLAGS="-D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB"
E
erikj 已提交
829 830
      $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK $STATIC_CPPLIB_FLAGS"
      $2JVM_CFLAGS="[$]$2JVM_CFLAGS $STATIC_CPPLIB_FLAGS"
831
    fi
832 833 834 835 836 837
  fi

  ###############################################################################

  # Adjust flags according to debug level.
  case $DEBUG_LEVEL in
838
    fastdebug | slowdebug )
E
erikj 已提交
839 840
      $2CFLAGS_JDK="[$]$2CFLAGS_JDK $CFLAGS_DEBUG_SYMBOLS $CFLAGS_DEBUG_OPTIONS"
      $2CXXFLAGS_JDK="[$]$2CXXFLAGS_JDK $CXXFLAGS_DEBUG_SYMBOLS $CXXFLAGS_DEBUG_OPTIONS"
841 842
      JAVAC_FLAGS="$JAVAC_FLAGS -g"
      ;;
843 844 845 846
    release )
      ;;
    * )
      AC_MSG_ERROR([Unrecognized \$DEBUG_LEVEL: $DEBUG_LEVEL])
847 848 849 850 851 852 853
      ;;
  esac

  # Set some common defines. These works for all compilers, but assume
  # -D is universally accepted.

  # Setup endianness
E
erikj 已提交
854
  if test "x$OPENJDK_$1_CPU_ENDIAN" = xlittle; then
855 856 857 858 859
    # The macro _LITTLE_ENDIAN needs to be defined the same to avoid the
    #   Sun C compiler warning message: warning: macro redefined: _LITTLE_ENDIAN
    #   (The Solaris X86 system defines this in file /usr/include/sys/isa_defs.h).
    #   Note: -Dmacro         is the same as    #define macro 1
    #         -Dmacro=        is the same as    #define macro
E
erikj 已提交
860 861
    if test "x$OPENJDK_$1_OS" = xsolaris; then
      $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_LITTLE_ENDIAN="
862
    else
E
erikj 已提交
863
      $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_LITTLE_ENDIAN"
864 865
    fi
  else
866 867
    # Same goes for _BIG_ENDIAN. Do we really need to set *ENDIAN on Solaris if they
    # are defined in the system?
E
erikj 已提交
868 869
    if test "x$OPENJDK_$1_OS" = xsolaris; then
      $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_BIG_ENDIAN="
870
    else
E
erikj 已提交
871
      $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_BIG_ENDIAN"
872
    fi
873
  fi
874

875
  # Setup target OS define. Use OS target name but in upper case.
E
erikj 已提交
876 877
  OPENJDK_$1_OS_UPPERCASE=`$ECHO $OPENJDK_$1_OS | $TR 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D$OPENJDK_$1_OS_UPPERCASE"
878 879

  # Setup target CPU
E
erikj 已提交
880 881 882
  $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK \
      $OPENJDK_$1_ADD_LP64 \
      -DARCH='\"$OPENJDK_$1_CPU_LEGACY\"' -D$OPENJDK_$1_CPU_LEGACY"
883

884 885
  # Setup debug/release defines
  if test "x$DEBUG_LEVEL" = xrelease; then
E
erikj 已提交
886 887 888
    $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -DNDEBUG"
    if test "x$OPENJDK_$1_OS" = xsolaris; then
      $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -DTRIMMED"
889 890
    fi
  else
E
erikj 已提交
891
    $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -DDEBUG"
892 893 894
  fi

  # Set some additional per-OS defines.
E
erikj 已提交
895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984
  if test "x$OPENJDK_$1_OS" = xlinux; then
    $2JVM_CFLAGS="[$]$2JVM_CFLAGS -DLINUX"
    $2JVM_CFLAGS="[$]$2JVM_CFLAGS -pipe -fPIC -fno-rtti -fno-exceptions \
        -fvisibility=hidden -fno-strict-aliasing -fno-omit-frame-pointer"
  elif test "x$OPENJDK_$1_OS" = xsolaris; then
    $2JVM_CFLAGS="[$]$2JVM_CFLAGS -DSOLARIS"
    $2JVM_CFLAGS="[$]$2JVM_CFLAGS -template=no%extdef -features=no%split_init \
        -D_Crun_inline_placement -library=%none -KPIC -mt -xwe -features=no%except"
  elif test "x$OPENJDK_$1_OS" = xmacosx; then
    $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT"
    $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_ALLBSD_SOURCE"
    $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_DARWIN_C_SOURCE -D_XOPEN_SOURCE"
    $2JVM_CFLAGS="[$]$2JVM_CFLAGS -fno-rtti -fno-exceptions -fvisibility=hidden \
        -mno-omit-leaf-frame-pointer -mstack-alignment=16 -pipe -fno-strict-aliasing \
        -DMAC_OS_X_VERSION_MAX_ALLOWED=1070 -mmacosx-version-min=10.7.0 \
        -fno-omit-frame-pointer"
  elif test "x$OPENJDK_$1_OS" = xaix; then
    $2JVM_CFLAGS="[$]$2JVM_CFLAGS -DAIX"
    # We may need '-qminimaltoc' or '-qpic=large -bbigtoc' if the TOC overflows.
    $2JVM_CFLAGS="[$]$2JVM_CFLAGS -qtune=balanced -qhot=level=1 -qinline \
        -qinlglue -qalias=noansi -qstrict -qtls=default -qlanglvl=c99vla \
        -qlanglvl=noredefmac -qnortti -qnoeh -qignerrno"
  elif test "x$OPENJDK_$1_OS" = xbsd; then
    $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE"
  elif test "x$OPENJDK_$1_OS" = xwindows; then
    $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_WINDOWS -DWIN32 -D_JNI_IMPLEMENTATION_"
    $2JVM_CFLAGS="[$]$2JVM_CFLAGS -nologo -W3 -MD -MP"
  fi

  # Set some additional per-CPU defines.
  if test "x$OPENJDK_$1_OS-$OPENJDK_$1_CPU" = xwindows-x86; then
    $2JVM_CFLAGS="[$]$2JVM_CFLAGS -arch:IA32"
  elif test "x$OPENJDK_$1_CPU" = xsparcv9; then
    $2JVM_CFLAGS="[$]$2JVM_CFLAGS -xarch=sparc"
  elif test "x$OPENJDK_$1_CPU" = xppc64; then
    if test "x$OPENJDK_$1_OS" = xlinux; then
      $2JVM_CFLAGS="[$]$2JVM_CFLAGS -minsert-sched-nops=regroup_exact -mno-multiple -mno-string"
      if test "x$OPENJDK_$1_CPU_ENDIAN" = xbig; then
        # fixes `relocation truncated to fit' error for gcc 4.1.
        $2JVM_CFLAGS="[$]$2JVM_CFLAGS -mminimal-toc"
        # Use ppc64 instructions, but schedule for power5
        $2JVM_CFLAGS="[$]$2JVM_CFLAGS -mcpu=powerpc64 -mtune=power5"
      else
        # Little endian machine uses ELFv2 ABI.
        $2JVM_CFLAGS="[$]$2JVM_CFLAGS -DABI_ELFv2"
        # Use Power8, this is the first CPU to support PPC64 LE with ELFv2 ABI.
        $2JVM_CFLAGS="[$]$2JVM_CFLAGS -mcpu=power7 -mtune=power8"
  fi
    elif test "x$OPENJDK_$1_OS" = xaix; then
      $2JVM_CFLAGS="[$]$2JVM_CFLAGS -qarch=ppc64"
  fi
  fi

  if test "x$OPENJDK_$1_CPU_ENDIAN" = xlittle; then
    $2JVM_CFLAGS="[$]$2JVM_CFLAGS -DVM_LITTLE_ENDIAN"
  fi

  if test "x$OPENJDK_$1_CPU_BITS" = x64; then
    if test "x$OPENJDK_$1_OS" != xsolaris && test "x$OPENJDK_$1_OS" != xaix; then
      # Solaris does not have _LP64=1 in the old build.
      # xlc on AIX defines _LP64=1 by default and issues a warning if we redefine it.
      $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_LP64=1"
    fi
  fi

  # Set $2JVM_CFLAGS warning handling
  if test "x$OPENJDK_$1_OS" = xlinux; then
    $2JVM_CFLAGS="[$]$2JVM_CFLAGS -Wpointer-arith -Wsign-compare -Wunused-function \
        -Wunused-value -Woverloaded-virtual"

    if test "x$TOOLCHAIN_TYPE" = xgcc; then
      TOOLCHAIN_CHECK_COMPILER_VERSION(VERSION: [4.8],
          IF_AT_LEAST: [
            # These flags either do not work or give spurious warnings prior to gcc 4.8.
            $2JVM_CFLAGS="[$]$2JVM_CFLAGS -Wno-format-zero-length -Wtype-limits -Wuninitialized"
          ]
      )
    fi
    if ! HOTSPOT_CHECK_JVM_VARIANT(zero) && ! HOTSPOT_CHECK_JVM_VARIANT(zeroshark); then
      # Non-zero builds have stricter warnings
      $2JVM_CFLAGS="[$]$2JVM_CFLAGS -Wreturn-type -Wundef -Wformat=2"
    else
      if test "x$TOOLCHAIN_TYPE" = xclang; then
        # Some versions of llvm do not like -Wundef
        $2JVM_CFLAGS="[$]$2JVM_CFLAGS -Wno-undef"
      fi
    fi
  elif test "x$OPENJDK_$1_OS" = xmacosx; then
    $2JVM_CFLAGS="[$]$2JVM_CFLAGS -Wno-deprecated -Wpointer-arith \
        -Wsign-compare -Wundef -Wunused-function -Wformat=2"
985 986 987
  fi

  # Additional macosx handling
E
erikj 已提交
988
  if test "x$OPENJDK_$1_OS" = xmacosx; then
989 990 991 992 993 994 995 996 997 998
    # Setting these parameters makes it an error to link to macosx APIs that are
    # newer than the given OS version and makes the linked binaries compatible
    # even if built on a newer version of the OS.
    # The expected format is X.Y.Z
    MACOSX_VERSION_MIN=10.7.0
    AC_SUBST(MACOSX_VERSION_MIN)

    # The macro takes the version with no dots, ex: 1070
    # Let the flags variables get resolved in make for easier override on make
    # command line.
E
erikj 已提交
999 1000
    $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -DMAC_OS_X_VERSION_MAX_ALLOWED=\$(subst .,,\$(MACOSX_VERSION_MIN)) -mmacosx-version-min=\$(MACOSX_VERSION_MIN)"
    $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK -mmacosx-version-min=\$(MACOSX_VERSION_MIN)"
1001 1002 1003
  fi

  # Setup some hard coded includes
E
erikj 已提交
1004
  $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK \
C
chegar 已提交
1005
      -I${JDK_TOPDIR}/src/java.base/share/native/include \
E
erikj 已提交
1006 1007
      -I${JDK_TOPDIR}/src/java.base/$OPENJDK_$1_OS/native/include \
      -I${JDK_TOPDIR}/src/java.base/$OPENJDK_$1_OS_TYPE/native/include \
1008
      -I${JDK_TOPDIR}/src/java.base/share/native/libjava \
E
erikj 已提交
1009
      -I${JDK_TOPDIR}/src/java.base/$OPENJDK_$1_OS_TYPE/native/libjava"
1010 1011

  # The shared libraries are compiled using the picflag.
E
erikj 已提交
1012 1013 1014 1015
  $2CFLAGS_JDKLIB="[$]$2COMMON_CCXXFLAGS_JDK \
      [$]$2CFLAGS_JDK [$]$2EXTRA_CFLAGS_JDK $PICFLAG [$]$2CFLAGS_JDKLIB_EXTRA"
  $2CXXFLAGS_JDKLIB="[$]$2COMMON_CCXXFLAGS_JDK \
      [$]$2CXXFLAGS_JDK [$]$2EXTRA_CXXFLAGS_JDK $PICFLAG [$]$2CXXFLAGS_JDKLIB_EXTRA"
1016 1017

  # Executable flags
E
erikj 已提交
1018 1019
  $2CFLAGS_JDKEXE="[$]$2COMMON_CCXXFLAGS_JDK [$]$2CFLAGS_JDK [$]$2EXTRA_CFLAGS_JDK"
  $2CXXFLAGS_JDKEXE="[$]$2COMMON_CCXXFLAGS_JDK [$]$2CXXFLAGS_JDK [$]$2EXTRA_CXXFLAGS_JDK"
1020

E
erikj 已提交
1021 1022 1023 1024
  AC_SUBST($2CFLAGS_JDKLIB)
  AC_SUBST($2CFLAGS_JDKEXE)
  AC_SUBST($2CXXFLAGS_JDKLIB)
  AC_SUBST($2CXXFLAGS_JDKEXE)
1025

1026 1027
  # Setup LDFLAGS et al.
  #
1028

1029
  if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
1030
    LDFLAGS_MICROSOFT="-nologo -opt:ref"
E
erikj 已提交
1031 1032 1033
    $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK $LDFLAGS_MICROSOFT -incremental:no"
    $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_MICROSOFT -opt:icf,8 -subsystem:windows -base:0x8000000"
    if test "x$OPENJDK_$1_CPU_BITS" = "x32"; then
1034
      LDFLAGS_SAFESH="-safeseh"
E
erikj 已提交
1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046
      $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK $LDFLAGS_SAFESH"
      $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_SAFESH"
      # NOTE: Old build added -machine. Probably not needed.
      $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -machine:I386"
    else
      $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -machine:AMD64"
    fi
  elif test "x$TOOLCHAIN_TYPE" = xclang; then
      $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -mno-omit-leaf-frame-pointer -mstack-alignment=16 -stdlib=libstdc++ -fPIC"
      if test "x$OPENJDK_$1_OS" = xmacosx; then
        # FIXME: We should really generalize SET_SHARED_LIBRARY_ORIGIN instead.
        $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -Wl,-rpath,@loader_path/. -Wl,-rpath,@loader_path/.."
1047
    fi
1048 1049 1050 1051
  elif test "x$TOOLCHAIN_TYPE" = xgcc; then
    # If this is a --hash-style=gnu system, use --hash-style=both, why?
    # We have previously set HAS_GNU_HASH if this is the case
    if test -n "$HAS_GNU_HASH"; then
E
erikj 已提交
1052 1053 1054
      $2LDFLAGS_HASH_STYLE="-Wl,--hash-style=both"
      $2LDFLAGS_JDK="${$2LDFLAGS_JDK} [$]$2LDFLAGS_HASH_STYLE"
      $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS [$]$2LDFLAGS_HASH_STYLE"
1055
    fi
E
erikj 已提交
1056 1057 1058 1059
      if test "x$OPENJDK_$1_OS" = xmacosx; then
        $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -Wl,-rpath,@loader_path/. -Wl,-rpath,@loader_path/.."
    fi
    if test "x$OPENJDK_$1_OS" = xlinux; then
1060 1061
      # And since we now know that the linker is gnu, then add -z defs, to forbid
      # undefined symbols in object files.
1062
      LDFLAGS_NO_UNDEF_SYM="-Wl,-z,defs"
E
erikj 已提交
1063 1064 1065 1066 1067 1068 1069
      $2LDFLAGS_JDK="${$2LDFLAGS_JDK} $LDFLAGS_NO_UNDEF_SYM"
      $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS  $LDFLAGS_NO_UNDEF_SYM"
      LDFLAGS_NO_EXEC_STACK="-Wl,-z,noexecstack"
      $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_NO_EXEC_STACK"
      if test "x$OPENJDK_$1_CPU" = xx86; then
        $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -march=i586"
      fi
1070 1071 1072
      case $DEBUG_LEVEL in
        release )
          # tell linker to optimize libraries.
1073
          # Should this be supplied to the OSS linker as well?
1074
          LDFLAGS_DEBUGLEVEL_release="-Wl,-O1"
E
erikj 已提交
1075 1076 1077 1078 1079
          $2LDFLAGS_JDK="${$2LDFLAGS_JDK} $LDFLAGS_DEBUGLEVEL_release"
          $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_DEBUGLEVEL_release"
          if test "x$HAS_LINKER_RELRO" = "xtrue"; then
            $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LINKER_RELRO_FLAG"
          fi
1080 1081
          ;;
        slowdebug )
E
erikj 已提交
1082 1083
          # Hotspot always let the linker optimize
          $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -Wl,-O1"
1084 1085
          if test "x$HAS_LINKER_NOW" = "xtrue"; then
            # do relocations at load
E
erikj 已提交
1086 1087 1088
            $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK $LINKER_NOW_FLAG"
            $2LDFLAGS_CXX_JDK="[$]$2LDFLAGS_CXX_JDK $LINKER_NOW_FLAG"
            $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LINKER_NOW_FLAG"
1089 1090 1091
          fi
          if test "x$HAS_LINKER_RELRO" = "xtrue"; then
            # mark relocations read only
E
erikj 已提交
1092 1093 1094
            $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK $LINKER_RELRO_FLAG"
            $2LDFLAGS_CXX_JDK="[$]$2LDFLAGS_CXX_JDK $LINKER_RELRO_FLAG"
            $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LINKER_RELRO_FLAG"
1095 1096 1097
          fi
          ;;
        fastdebug )
E
erikj 已提交
1098 1099
          # Hotspot always let the linker optimize
          $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -Wl,-O1"
1100 1101
          if test "x$HAS_LINKER_RELRO" = "xtrue"; then
            # mark relocations read only
E
erikj 已提交
1102 1103 1104
            $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK $LINKER_RELRO_FLAG"
            $2LDFLAGS_CXX_JDK="[$]$2LDFLAGS_CXX_JDK $LINKER_RELRO_FLAG"
            $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LINKER_RELRO_FLAG"
1105 1106 1107 1108 1109 1110
          fi
          ;;
        * )
          AC_MSG_ERROR([Unrecognized \$DEBUG_LEVEL: $DEBUG_LEVEL])
          ;;
        esac
1111
    fi
1112
  elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
1113
    LDFLAGS_SOLSTUDIO="-Wl,-z,defs"
E
erikj 已提交
1114
    $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK $LDFLAGS_SOLSTUDIO -xildoff -ztext"
1115
    LDFLAGS_CXX_SOLSTUDIO="-norunpath"
E
erikj 已提交
1116 1117 1118 1119 1120
    $2LDFLAGS_CXX_JDK="[$]$2LDFLAGS_CXX_JDK $LDFLAGS_CXX_SOLSTUDIO -xnolib"
    $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_SOLSTUDIO -library=%none -mt $LDFLAGS_CXX_SOLSTUDIO -z noversion"
    if test "x$OPENJDK_$1_CPU_ARCH" = "xsparc"; then
      $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -xarch=sparc"
    fi
1121
  elif test "x$TOOLCHAIN_TYPE" = xxlc; then
1122
    LDFLAGS_XLC="-b64 -brtl -bnolibpath -bexpall -bernotok"
E
erikj 已提交
1123 1124
    $2LDFLAGS_JDK="${$2LDFLAGS_JDK} $LDFLAGS_XLC"
    $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_XLC"
1125
  fi
1126

1127 1128
  # Customize LDFLAGS for executables

E
erikj 已提交
1129
  $2LDFLAGS_JDKEXE="${$2LDFLAGS_JDK}"
1130 1131

  if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
E
erikj 已提交
1132
    if test "x$OPENJDK_$1_CPU_BITS" = "x64"; then
1133 1134 1135
      LDFLAGS_STACK_SIZE=1048576
    else
      LDFLAGS_STACK_SIZE=327680
1136
    fi
E
erikj 已提交
1137 1138 1139
    $2LDFLAGS_JDKEXE="${$2LDFLAGS_JDKEXE} /STACK:$LDFLAGS_STACK_SIZE"
  elif test "x$OPENJDK_$1_OS" = xlinux; then
    $2LDFLAGS_JDKEXE="[$]$2LDFLAGS_JDKEXE -Wl,--allow-shlib-undefined"
1140
  fi
1141

E
erikj 已提交
1142
  $2LDFLAGS_JDKEXE="${$2LDFLAGS_JDKEXE} ${$2EXTRA_LDFLAGS_JDK}"
A
alanb 已提交
1143

1144
  # Customize LDFLAGS for libs
E
erikj 已提交
1145
  $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDK}"
1146

E
erikj 已提交
1147
  $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} ${SHARED_LIBRARY_FLAGS}"
1148
  if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
E
erikj 已提交
1149
    $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} \
1150
        -libpath:${OUTPUT_ROOT}/support/modules_libs/java.base"
E
erikj 已提交
1151
    $2JDKLIB_LIBS=""
1152
  else
E
erikj 已提交
1153 1154
    $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} \
        -L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base\$(OPENJDK_$1_CPU_LIBDIR)"
1155

E
erikj 已提交
1156
    if test "x$1" = "xTARGET"; then
1157 1158
    # On some platforms (mac) the linker warns about non existing -L dirs.
    # Add server first if available. Linking aginst client does not always produce the same results.
E
erikj 已提交
1159
      # Only add client/minimal dir if client/minimal is being built.
1160
    # Default to server for other variants.
E
erikj 已提交
1161 1162 1163 1164 1165 1166
      if HOTSPOT_CHECK_JVM_VARIANT(server); then
        $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} -L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base\$(OPENJDK_$1_CPU_LIBDIR)/server"
      elif HOTSPOT_CHECK_JVM_VARIANT(client); then
        $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} -L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base\$(OPENJDK_$1_CPU_LIBDIR)/client"
      elif HOTSPOT_CHECK_JVM_VARIANT(minimal); then
        $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} -L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base\$(OPENJDK_$1_CPU_LIBDIR)/minimal"
1167
    else
E
erikj 已提交
1168 1169 1170 1171 1172 1173
        $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} -L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base\$(OPENJDK_$1_CPU_LIBDIR)/server"
    fi
    elif test "x$1" = "xBUILD"; then
      # When building a buildjdk, it's always only the server variant
      $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} \
          -L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base\$(OPENJDK_$1_CPU_LIBDIR)/server"
1174 1175
    fi

E
erikj 已提交
1176
    $2JDKLIB_LIBS="-ljava -ljvm"
1177
    if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
E
erikj 已提交
1178
      $2JDKLIB_LIBS="[$]$2JDKLIB_LIBS -lc"
1179
    fi
A
alanb 已提交
1180

1181
  fi
1182

E
erikj 已提交
1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205
  # Set $2JVM_LIBS (per os)
  if test "x$OPENJDK_$1_OS" = xlinux; then
    $2JVM_LIBS="[$]$2JVM_LIBS -lm -ldl -lpthread"
  elif test "x$OPENJDK_$1_OS" = xsolaris; then
    # FIXME: This hard-coded path is not really proper.
    if test "x$OPENJDK_$1_CPU" = xx86_64; then
      $2SOLARIS_LIBM_LIBS="/usr/lib/amd64/libm.so.1"
    elif test "x$OPENJDK_$1_CPU" = xsparcv9; then
      $2SOLARIS_LIBM_LIBS="/usr/lib/sparcv9/libm.so.1"
    fi
    $2JVM_LIBS="[$]$2JVM_LIBS -lsocket -lsched -ldl $SOLARIS_LIBM_LIBS -lCrun \
        -lthread -ldoor -lc -ldemangle -lnsl -lkstat -lrt"
  elif test "x$OPENJDK_$1_OS" = xmacosx; then
    $2JVM_LIBS="[$]$2JVM_LIBS -lm"
  elif test "x$OPENJDK_$1_OS" = xaix; then
    $2JVM_LIBS="[$]$2JVM_LIBS -Wl,-lC_r -lm -ldl -lpthread"
  elif test "x$OPENJDK_$1_OS" = xbsd; then
    $2JVM_LIBS="[$]$2JVM_LIBS -lm"
  elif test "x$OPENJDK_$1_OS" = xwindows; then
    $2JVM_LIBS="[$]$2JVM_LIBS kernel32.lib user32.lib gdi32.lib winspool.lib \
        comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib \
        wsock32.lib winmm.lib version.lib psapi.lib"
    fi
A
alanb 已提交
1206

E
erikj 已提交
1207 1208 1209 1210 1211 1212 1213 1214
  # Set $2JVM_ASFLAGS
  if test "x$OPENJDK_$1_OS" = xlinux; then
    if test "x$OPENJDK_$1_CPU" = xx86; then
      $2JVM_ASFLAGS="[$]$2JVM_ASFLAGS -march=i586"
    fi
  elif test "x$OPENJDK_$1_OS" = xmacosx; then
    $2JVM_ASFLAGS="[$]$2JVM_ASFLAGS -x assembler-with-cpp -mno-omit-leaf-frame-pointer -mstack-alignment=16"
  fi
1215

E
erikj 已提交
1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228
  $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} ${$2EXTRA_LDFLAGS_JDK}"

  AC_SUBST($2LDFLAGS_JDKLIB)
  AC_SUBST($2LDFLAGS_JDKEXE)
  AC_SUBST($2JDKLIB_LIBS)
  AC_SUBST($2JDKEXE_LIBS)
  AC_SUBST($2LDFLAGS_CXX_JDK)
  AC_SUBST($2LDFLAGS_HASH_STYLE)

  AC_SUBST($2JVM_CFLAGS)
  AC_SUBST($2JVM_LDFLAGS)
  AC_SUBST($2JVM_ASFLAGS)
  AC_SUBST($2JVM_LIBS)
1229

1230 1231
])

1232 1233
# FLAGS_C_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [ARGUMENT], IF_TRUE: [RUN-IF-TRUE],
#                                  IF_FALSE: [RUN-IF-FALSE])
1234
# ------------------------------------------------------------
1235 1236
# Check that the C compiler supports an argument
BASIC_DEFUN_NAMED([FLAGS_C_COMPILER_CHECK_ARGUMENTS],
1237
    [*ARGUMENT IF_TRUE IF_FALSE], [$@],
1238
[
1239
  AC_MSG_CHECKING([if the C compiler supports "ARG_ARGUMENT"])
1240 1241 1242
  supports=yes

  saved_cflags="$CFLAGS"
1243
  CFLAGS="$CFLAGS ARG_ARGUMENT"
1244
  AC_LANG_PUSH([C])
1245
  AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int i;]])], [],
1246 1247 1248 1249
      [supports=no])
  AC_LANG_POP([C])
  CFLAGS="$saved_cflags"

1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269
  AC_MSG_RESULT([$supports])
  if test "x$supports" = "xyes" ; then
    :
    ARG_IF_TRUE
  else
    :
    ARG_IF_FALSE
  fi
])

# FLAGS_CXX_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [ARGUMENT], IF_TRUE: [RUN-IF-TRUE],
#                                    IF_FALSE: [RUN-IF-FALSE])
# ------------------------------------------------------------
# Check that the C++ compiler supports an argument
BASIC_DEFUN_NAMED([FLAGS_CXX_COMPILER_CHECK_ARGUMENTS],
    [*ARGUMENT IF_TRUE IF_FALSE], [$@],
[
  AC_MSG_CHECKING([if the C++ compiler supports "ARG_ARGUMENT"])
  supports=yes

1270
  saved_cxxflags="$CXXFLAGS"
1271
  CXXFLAGS="$CXXFLAG ARG_ARGUMENT"
1272
  AC_LANG_PUSH([C++])
1273
  AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int i;]])], [],
1274 1275 1276 1277 1278 1279
      [supports=no])
  AC_LANG_POP([C++])
  CXXFLAGS="$saved_cxxflags"

  AC_MSG_RESULT([$supports])
  if test "x$supports" = "xyes" ; then
1280 1281
    :
    ARG_IF_TRUE
1282
  else
1283 1284
    :
    ARG_IF_FALSE
1285 1286 1287
  fi
])

1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315
# FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [ARGUMENT], IF_TRUE: [RUN-IF-TRUE],
#                                IF_FALSE: [RUN-IF-FALSE])
# ------------------------------------------------------------
# Check that the C and C++ compilers support an argument
BASIC_DEFUN_NAMED([FLAGS_COMPILER_CHECK_ARGUMENTS],
    [*ARGUMENT IF_TRUE IF_FALSE], [$@],
[
  FLAGS_C_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [ARG_ARGUMENT],
  					     IF_TRUE: [C_COMP_SUPPORTS="yes"],
					     IF_FALSE: [C_COMP_SUPPORTS="no"])
  FLAGS_CXX_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [ARG_ARGUMENT],
  					       IF_TRUE: [CXX_COMP_SUPPORTS="yes"],
					       IF_FALSE: [CXX_COMP_SUPPORTS="no"])

  AC_MSG_CHECKING([if both compilers support "ARG_ARGUMENT"])
  supports=no
  if test "x$C_COMP_SUPPORTS" = "xyes" -a "x$CXX_COMP_SUPPORTS" = "xyes"; then supports=yes; fi
  
  AC_MSG_RESULT([$supports])
  if test "x$supports" = "xyes" ; then
    :
    ARG_IF_TRUE
  else
    :
    ARG_IF_FALSE
  fi
])

1316 1317
# FLAGS_LINKER_CHECK_ARGUMENTS(ARGUMENT: [ARGUMENT], IF_TRUE: [RUN-IF-TRUE],
#                                   IF_FALSE: [RUN-IF-FALSE])
1318 1319
# ------------------------------------------------------------
# Check that the linker support an argument
1320 1321
BASIC_DEFUN_NAMED([FLAGS_LINKER_CHECK_ARGUMENTS],
    [*ARGUMENT IF_TRUE IF_FALSE], [$@],
1322
[
1323
  AC_MSG_CHECKING([if linker supports "ARG_ARGUMENT"])
1324 1325 1326
  supports=yes

  saved_ldflags="$LDFLAGS"
1327
  LDFLAGS="$LDFLAGS ARG_ARGUMENT"
1328 1329 1330 1331 1332 1333 1334 1335
  AC_LANG_PUSH([C])
  AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],
      [], [supports=no])
  AC_LANG_POP([C])
  LDFLAGS="$saved_ldflags"

  AC_MSG_RESULT([$supports])
  if test "x$supports" = "xyes" ; then
1336 1337
    :
    ARG_IF_TRUE
1338
  else
1339 1340
    :
    ARG_IF_FALSE
1341 1342 1343
  fi
])

1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354
AC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_MISC],
[
  # Some Zero and Shark settings.
  # ZERO_ARCHFLAG tells the compiler which mode to build for
  case "${OPENJDK_TARGET_CPU}" in
    s390)
      ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}31"
      ;;
    *)
      ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}"
  esac
1355
  FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [$ZERO_ARCHFLAG], IF_FALSE: [ZERO_ARCHFLAG=""])
1356 1357 1358 1359
  AC_SUBST(ZERO_ARCHFLAG)

  # Check that the compiler supports -mX (or -qX on AIX) flags
  # Set COMPILER_SUPPORTS_TARGET_BITS_FLAG to 'true' if it does
1360 1361 1362
  FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}],
      IF_TRUE: [COMPILER_SUPPORTS_TARGET_BITS_FLAG=true],
      IF_FALSE: [COMPILER_SUPPORTS_TARGET_BITS_FLAG=false])
1363
  AC_SUBST(COMPILER_SUPPORTS_TARGET_BITS_FLAG)
1364

I
ihse 已提交
1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380
  AC_ARG_ENABLE([warnings-as-errors], [AS_HELP_STRING([--disable-warnings-as-errors],
      [do not consider native warnings to be an error @<:@enabled@:>@])])

  AC_MSG_CHECKING([if native warnings are errors])
  if test "x$enable_warnings_as_errors" = "xyes"; then
    AC_MSG_RESULT([yes (explicitely set)])
    WARNINGS_AS_ERRORS=true
  elif test "x$enable_warnings_as_errors" = "xno"; then
    AC_MSG_RESULT([no])
    WARNINGS_AS_ERRORS=false
  elif test "x$enable_warnings_as_errors" = "x"; then
    AC_MSG_RESULT([yes (default)])
    WARNINGS_AS_ERRORS=true
  else
    AC_MSG_ERROR([--enable-warnings-as-errors accepts no argument])
  fi
1381 1382 1383

  if test "x$WARNINGS_AS_ERRORS" = "xfalse"; then
    # Set legacy hotspot variable
1384
    HOTSPOT_SET_WARNINGS_AS_ERRORS="WARNINGS_ARE_ERRORS="
1385
  else
1386
    HOTSPOT_SET_WARNINGS_AS_ERRORS=""
1387 1388
  fi

I
ihse 已提交
1389
  AC_SUBST(WARNINGS_AS_ERRORS)
1390
  AC_SUBST(HOTSPOT_SET_WARNINGS_AS_ERRORS)
I
ihse 已提交
1391

1392 1393
  case "${TOOLCHAIN_TYPE}" in
    microsoft)
1394
      DISABLE_WARNING_PREFIX="-wd"
E
erikj 已提交
1395
      CFLAGS_WARNINGS_ARE_ERRORS="-WX"
1396 1397
      ;;
    solstudio)
1398
      DISABLE_WARNING_PREFIX="-erroff="
1399 1400 1401
      CFLAGS_WARNINGS_ARE_ERRORS="-errtags -errwarn=%all"
      ;;
    gcc)
1402
      # Prior to gcc 4.4, a -Wno-X where X is unknown for that version of gcc will cause an error
1403 1404 1405
      FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [-Wno-this-is-a-warning-that-do-not-exist],
          IF_TRUE: [GCC_CAN_DISABLE_WARNINGS=true],
          IF_FALSE: [GCC_CAN_DISABLE_WARNINGS=false]
1406 1407 1408 1409 1410 1411
      )
      if test "x$GCC_CAN_DISABLE_WARNINGS" = "xtrue"; then
        DISABLE_WARNING_PREFIX="-Wno-"
      else
        DISABLE_WARNING_PREFIX=
      fi
1412
      CFLAGS_WARNINGS_ARE_ERRORS="-Werror"
1413 1414 1415
      # Repeate the check for the BUILD_CC
      CC_OLD="$CC"
      CC="$BUILD_CC"
1416 1417 1418
      FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [-Wno-this-is-a-warning-that-do-not-exist],
          IF_TRUE: [BUILD_CC_CAN_DISABLE_WARNINGS=true],
          IF_FALSE: [BUILD_CC_CAN_DISABLE_WARNINGS=false]
1419 1420 1421 1422 1423 1424 1425
      )
      if test "x$BUILD_CC_CAN_DISABLE_WARNINGS" = "xtrue"; then
        BUILD_CC_DISABLE_WARNING_PREFIX="-Wno-"
      else
        BUILD_CC_DISABLE_WARNING_PREFIX=
      fi
      CC="$CC_OLD"
1426 1427
      ;;
    clang)
1428
      DISABLE_WARNING_PREFIX="-Wno-"
1429 1430
      CFLAGS_WARNINGS_ARE_ERRORS="-Werror"
      ;;
1431 1432 1433 1434
    xlc)
      DISABLE_WARNING_PREFIX="-qsuppress="
      CFLAGS_WARNINGS_ARE_ERRORS="-qhalt=w"
      ;;
1435
  esac
1436
  AC_SUBST(DISABLE_WARNING_PREFIX)
A
alanb 已提交
1437
  AC_SUBST(BUILD_CC_DISABLE_WARNING_PREFIX)
1438
  AC_SUBST(CFLAGS_WARNINGS_ARE_ERRORS)
1439
])
1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456

AC_DEFUN_ONCE([FLAGS_SETUP_GCC6_COMPILER_FLAGS],
[
  # These flags are required for GCC 6 builds as undefined behaviour in OpenJDK code
  # runs afoul of the more aggressive versions of these optimisations.
  # Notably, value range propagation now assumes that the this pointer of C++
  # member functions is non-null.
  NO_NULL_POINTER_CHECK_CFLAG="-fno-delete-null-pointer-checks"
  FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [$NO_NULL_POINTER_CHECK_CFLAG -Werror],
  					     IF_FALSE: [NO_NULL_POINTER_CHECK_CFLAG=""])
  AC_SUBST([NO_NULL_POINTER_CHECK_CFLAG])
  NO_LIFETIME_DSE_CFLAG="-fno-lifetime-dse"
  FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [$NO_LIFETIME_DSE_CFLAG -Werror],
  					     IF_FALSE: [NO_LIFETIME_DSE_CFLAG=""])
  CFLAGS_JDK="${CFLAGS_JDK} ${NO_NULL_POINTER_CHECK_CFLAG} ${NO_LIFETIME_DSE_CFLAG}"
  AC_SUBST([NO_LIFETIME_DSE_CFLAG])
])