1 #
   2 # Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
   3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4 #
   5 # This code is free software; you can redistribute it and/or modify it
   6 # under the terms of the GNU General Public License version 2 only, as
   7 # published by the Free Software Foundation.  Oracle designates this
   8 # particular file as subject to the "Classpath" exception as provided
   9 # by Oracle in the LICENSE file that accompanied this code.
  10 #
  11 # This code is distributed in the hope that it will be useful, but WITHOUT
  12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14 # version 2 for more details (a copy is included in the LICENSE file that
  15 # accompanied this code).
  16 #
  17 # You should have received a copy of the GNU General Public License version
  18 # 2 along with this work; if not, write to the Free Software Foundation,
  19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20 #
  21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22 # or visit www.oracle.com if you need additional information or have any
  23 # questions.
  24 #
  25 
  26 ###############################################################################
  27 # Check which variant of the JDK that we want to build.
  28 # Currently we have:
  29 #    normal:   standard edition
  30 # but the custom make system may add other variants
  31 #
  32 # Effectively the JDK variant gives a name to a specific set of
  33 # modules to compile into the JDK.
  34 AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_VARIANT],
  35 [
  36   AC_MSG_CHECKING([which variant of the JDK to build])
  37   AC_ARG_WITH([jdk-variant], [AS_HELP_STRING([--with-jdk-variant],
  38       [JDK variant to build (normal) @<:@normal@:>@])])
  39 
  40   if test "x$with_jdk_variant" = xnormal || test "x$with_jdk_variant" = x; then
  41     JDK_VARIANT="normal"
  42   else
  43     AC_MSG_ERROR([The available JDK variants are: normal])
  44   fi
  45 
  46   AC_SUBST(JDK_VARIANT)
  47 
  48   AC_MSG_RESULT([$JDK_VARIANT])
  49 ])
  50 
  51 ###############################################################################
  52 # Set the debug level
  53 #    release: no debug information, all optimizations, no asserts.
  54 #    optimized: no debug information, all optimizations, no asserts, HotSpot target is 'optimized'.
  55 #    fastdebug: debug information (-g), all optimizations, all asserts
  56 #    slowdebug: debug information (-g), no optimizations, all asserts
  57 AC_DEFUN_ONCE([JDKOPT_SETUP_DEBUG_LEVEL],
  58 [
  59   DEBUG_LEVEL="release"
  60   AC_MSG_CHECKING([which debug level to use])
  61   AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug],
  62       [set the debug level to fastdebug (shorthand for --with-debug-level=fastdebug) @<:@disabled@:>@])],
  63       [
  64         ENABLE_DEBUG="${enableval}"
  65         DEBUG_LEVEL="fastdebug"
  66       ], [ENABLE_DEBUG="no"])
  67 
  68   AC_ARG_WITH([debug-level], [AS_HELP_STRING([--with-debug-level],
  69       [set the debug level (release, fastdebug, slowdebug, optimized) @<:@release@:>@])],
  70       [
  71         DEBUG_LEVEL="${withval}"
  72         if test "x$ENABLE_DEBUG" = xyes; then
  73           AC_MSG_ERROR([You cannot use both --enable-debug and --with-debug-level at the same time.])
  74         fi
  75       ])
  76   AC_MSG_RESULT([$DEBUG_LEVEL])
  77 
  78   if test "x$DEBUG_LEVEL" != xrelease && \
  79       test "x$DEBUG_LEVEL" != xoptimized && \
  80       test "x$DEBUG_LEVEL" != xfastdebug && \
  81       test "x$DEBUG_LEVEL" != xslowdebug; then
  82     AC_MSG_ERROR([Allowed debug levels are: release, fastdebug, slowdebug and optimized])
  83   fi
  84 
  85   # Translate DEBUG_LEVEL to debug level used by Hotspot
  86   HOTSPOT_DEBUG_LEVEL="$DEBUG_LEVEL"
  87   if test "x$DEBUG_LEVEL" = xrelease; then
  88     HOTSPOT_DEBUG_LEVEL="product"
  89   elif test "x$DEBUG_LEVEL" = xslowdebug; then
  90     HOTSPOT_DEBUG_LEVEL="debug"
  91   fi
  92 
  93   if test "x$DEBUG_LEVEL" = xoptimized; then
  94     # The debug level 'optimized' is a little special because it is currently only
  95     # applicable to the HotSpot build where it means to build a completely
  96     # optimized version of the VM without any debugging code (like for the
  97     # 'release' debug level which is called 'product' in the HotSpot build) but
  98     # with the exception that it can contain additional code which is otherwise
  99     # protected by '#ifndef PRODUCT' macros. These 'optimized' builds are used to
 100     # test new and/or experimental features which are not intended for customer
 101     # shipment. Because these new features need to be tested and benchmarked in
 102     # real world scenarios, we want to build the containing JDK at the 'release'
 103     # debug level.
 104     DEBUG_LEVEL="release"
 105   fi
 106 
 107   AC_SUBST(HOTSPOT_DEBUG_LEVEL)
 108   AC_SUBST(DEBUG_LEVEL)
 109 ])
 110 
 111 ###############################################################################
 112 #
 113 # Should we build only OpenJDK even if closed sources are present?
 114 #
 115 AC_DEFUN_ONCE([JDKOPT_SETUP_OPEN_OR_CUSTOM],
 116 [
 117   AC_ARG_ENABLE([openjdk-only], [AS_HELP_STRING([--enable-openjdk-only],
 118       [suppress building custom source even if present @<:@disabled@:>@])],,[enable_openjdk_only="no"])
 119 
 120   AC_MSG_CHECKING([if custom source is suppressed (openjdk-only)])
 121   AC_MSG_RESULT([$enable_openjdk_only])
 122   if test "x$enable_openjdk_only" = "xyes"; then
 123     SUPPRESS_CUSTOM_EXTENSIONS="true"
 124   elif test "x$enable_openjdk_only" = "xno"; then
 125     SUPPRESS_CUSTOM_EXTENSIONS="false"
 126   else
 127     AC_MSG_ERROR([Invalid value for --enable-openjdk-only: $enable_openjdk_only])
 128   fi
 129 
 130   # custom-make-dir is deprecated. Please use your custom-hook.m4 to override
 131   # the IncludeCustomExtension macro.
 132   BASIC_DEPRECATED_ARG_WITH(custom-make-dir)
 133 ])
 134 
 135 AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_OPTIONS],
 136 [
 137   # Should we build a JDK without a graphical UI?
 138   AC_MSG_CHECKING([headless only])
 139   AC_ARG_ENABLE([headless-only], [AS_HELP_STRING([--enable-headless-only],
 140       [only build headless (no GUI) support @<:@disabled@:>@])])
 141 
 142   if test "x$enable_headless_only" = "xyes"; then
 143     ENABLE_HEADLESS_ONLY="true"
 144     AC_MSG_RESULT([yes])
 145   elif test "x$enable_headless_only" = "xno"; then
 146     ENABLE_HEADLESS_ONLY="false"
 147     AC_MSG_RESULT([no])
 148   elif test "x$enable_headless_only" = "x"; then
 149     ENABLE_HEADLESS_ONLY="false"
 150     AC_MSG_RESULT([no])
 151   else
 152     AC_MSG_ERROR([--enable-headless-only can only take yes or no])
 153   fi
 154 
 155   AC_SUBST(ENABLE_HEADLESS_ONLY)
 156 
 157   # Should we build the complete docs, or just a lightweight version?
 158   AC_ARG_ENABLE([full-docs], [AS_HELP_STRING([--enable-full-docs],
 159       [build complete documentation @<:@enabled if all tools found@:>@])])
 160 
 161   # Verify dependencies
 162   AC_MSG_CHECKING([for graphviz dot])
 163   if test "x$DOT" != "x"; then
 164     AC_MSG_RESULT([yes])
 165   else
 166     AC_MSG_RESULT([no, cannot generate full docs])
 167     FULL_DOCS_DEP_MISSING=true
 168   fi
 169 
 170   AC_MSG_CHECKING([for pandoc])
 171   if test "x$PANDOC" != "x"; then
 172     AC_MSG_RESULT([yes])
 173   else
 174     AC_MSG_RESULT([no, cannot generate full docs])
 175     FULL_DOCS_DEP_MISSING=true
 176   fi
 177 
 178   AC_MSG_CHECKING([full docs])
 179   if test "x$enable_full_docs" = xyes; then
 180     if test "x$FULL_DOCS_DEP_MISSING" = "xtrue"; then
 181       AC_MSG_RESULT([no, missing dependencies])
 182       HELP_MSG_MISSING_DEPENDENCY([dot])
 183       AC_MSG_ERROR([Cannot enable full docs with missing dependencies. See above. $HELP_MSG])
 184     else
 185       ENABLE_FULL_DOCS=true
 186       AC_MSG_RESULT([yes, forced])
 187     fi
 188   elif test "x$enable_full_docs" = xno; then
 189     ENABLE_FULL_DOCS=false
 190     AC_MSG_RESULT([no, forced])
 191   elif test "x$enable_full_docs" = x; then
 192     # Check for prerequisites
 193     if test "x$FULL_DOCS_DEP_MISSING" = xtrue; then
 194       ENABLE_FULL_DOCS=false
 195       AC_MSG_RESULT([no, missing dependencies])
 196     else
 197       ENABLE_FULL_DOCS=true
 198       AC_MSG_RESULT([yes, dependencies present])
 199     fi
 200   else
 201     AC_MSG_ERROR([--enable-full-docs can only take yes or no])
 202   fi
 203 
 204   AC_SUBST(ENABLE_FULL_DOCS)
 205 
 206   # Choose cacerts source file
 207   AC_ARG_WITH(cacerts-file, [AS_HELP_STRING([--with-cacerts-file],
 208       [specify alternative cacerts file])])
 209   AC_MSG_CHECKING([for cacerts file])
 210   if test "x$with_cacerts_file" == x; then
 211     AC_MSG_RESULT([default])
 212   else
 213     CACERTS_FILE=$with_cacerts_file
 214     if test ! -f "$CACERTS_FILE"; then
 215       AC_MSG_RESULT([fail])
 216       AC_MSG_ERROR([Specified cacerts file "$CACERTS_FILE" does not exist])
 217     fi
 218     AC_MSG_RESULT([$CACERTS_FILE])
 219   fi
 220   AC_SUBST(CACERTS_FILE)
 221 
 222   # Enable or disable unlimited crypto
 223   AC_ARG_ENABLE(unlimited-crypto, [AS_HELP_STRING([--disable-unlimited-crypto],
 224       [Disable unlimited crypto policy @<:@enabled@:>@])],,
 225       [enable_unlimited_crypto=yes])
 226   if test "x$enable_unlimited_crypto" = "xyes"; then
 227     UNLIMITED_CRYPTO=true
 228   else
 229     UNLIMITED_CRYPTO=false
 230   fi
 231   AC_SUBST(UNLIMITED_CRYPTO)
 232 
 233   # Should we build the serviceability agent (SA)?
 234   INCLUDE_SA=true
 235   if HOTSPOT_CHECK_JVM_VARIANT(zero); then
 236     INCLUDE_SA=false
 237   fi
 238   if test "x$OPENJDK_TARGET_OS" = xaix ; then
 239     INCLUDE_SA=false
 240   fi
 241   if test "x$OPENJDK_TARGET_CPU" = xs390x ; then
 242     INCLUDE_SA=false
 243   fi
 244   AC_SUBST(INCLUDE_SA)
 245 
 246   # Compress jars
 247   COMPRESS_JARS=false
 248 
 249   AC_SUBST(COMPRESS_JARS)
 250 
 251   # Setup default copyright year. Mostly overridden when building close to a new year.
 252   AC_ARG_WITH(copyright-year, [AS_HELP_STRING([--with-copyright-year],
 253       [Set copyright year value for build @<:@current year@:>@])])
 254   if test "x$with_copyright_year" = xyes; then
 255     AC_MSG_ERROR([Copyright year must have a value])
 256   elif test "x$with_copyright_year" != x; then
 257     COPYRIGHT_YEAR="$with_copyright_year"
 258   else
 259     COPYRIGHT_YEAR=`$DATE +'%Y'`
 260   fi
 261   AC_SUBST(COPYRIGHT_YEAR)
 262 ])
 263 
 264 ###############################################################################
 265 #
 266 # Enable or disable the elliptic curve crypto implementation
 267 #
 268 AC_DEFUN_ONCE([JDKOPT_DETECT_INTREE_EC],
 269 [
 270   AC_MSG_CHECKING([if elliptic curve crypto implementation is present])
 271 
 272   if test -d "${TOPDIR}/src/jdk.crypto.ec/share/native/libsunec/impl"; then
 273     ENABLE_INTREE_EC=true
 274     AC_MSG_RESULT([yes])
 275   else
 276     ENABLE_INTREE_EC=false
 277     AC_MSG_RESULT([no])
 278   fi
 279 
 280   AC_SUBST(ENABLE_INTREE_EC)
 281 ])
 282 
 283 AC_DEFUN_ONCE([JDKOPT_SETUP_DEBUG_SYMBOLS],
 284 [
 285   #
 286   # NATIVE_DEBUG_SYMBOLS
 287   # This must be done after the toolchain is setup, since we're looking at objcopy.
 288   #
 289   AC_MSG_CHECKING([what type of native debug symbols to use])
 290   AC_ARG_WITH([native-debug-symbols],
 291       [AS_HELP_STRING([--with-native-debug-symbols],
 292       [set the native debug symbol configuration (none, internal, external, zipped) @<:@varying@:>@])],
 293       [
 294         if test "x$OPENJDK_TARGET_OS" = xaix; then
 295           if test "x$withval" = xexternal || test "x$withval" = xzipped; then
 296             AC_MSG_ERROR([AIX only supports the parameters 'none' and 'internal' for --with-native-debug-symbols])
 297           fi
 298         fi
 299       ],
 300       [
 301         if test "x$OPENJDK_TARGET_OS" = xaix; then
 302           # AIX doesn't support 'external' so use 'internal' as default
 303           with_native_debug_symbols="internal"
 304         else
 305           if test "x$STATIC_BUILD" = xtrue; then
 306             with_native_debug_symbols="none"
 307           else
 308             with_native_debug_symbols="external"
 309           fi
 310         fi
 311       ])
 312   NATIVE_DEBUG_SYMBOLS=$with_native_debug_symbols
 313   AC_MSG_RESULT([$NATIVE_DEBUG_SYMBOLS])
 314 
 315   if test "x$NATIVE_DEBUG_SYMBOLS" = xzipped; then
 316 
 317     if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then
 318       if test "x$OBJCOPY" = x; then
 319         # enabling of enable-debug-symbols and can't find objcopy
 320         # this is an error
 321         AC_MSG_ERROR([Unable to find objcopy, cannot enable native debug symbols])
 322       fi
 323     fi
 324 
 325     COMPILE_WITH_DEBUG_SYMBOLS=true
 326     COPY_DEBUG_SYMBOLS=true
 327     ZIP_EXTERNAL_DEBUG_SYMBOLS=true
 328   elif test "x$NATIVE_DEBUG_SYMBOLS" = xnone; then
 329     COMPILE_WITH_DEBUG_SYMBOLS=false
 330     COPY_DEBUG_SYMBOLS=false
 331     ZIP_EXTERNAL_DEBUG_SYMBOLS=false
 332   elif test "x$NATIVE_DEBUG_SYMBOLS" = xinternal; then
 333     COMPILE_WITH_DEBUG_SYMBOLS=true
 334     COPY_DEBUG_SYMBOLS=false
 335     ZIP_EXTERNAL_DEBUG_SYMBOLS=false
 336   elif test "x$NATIVE_DEBUG_SYMBOLS" = xexternal; then
 337 
 338     if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then
 339       if test "x$OBJCOPY" = x; then
 340         # enabling of enable-debug-symbols and can't find objcopy
 341         # this is an error
 342         AC_MSG_ERROR([Unable to find objcopy, cannot enable native debug symbols])
 343       fi
 344     fi
 345 
 346     COMPILE_WITH_DEBUG_SYMBOLS=true
 347     COPY_DEBUG_SYMBOLS=true
 348     ZIP_EXTERNAL_DEBUG_SYMBOLS=false
 349   else
 350     AC_MSG_ERROR([Allowed native debug symbols are: none, internal, external, zipped])
 351   fi
 352 
 353   # --enable-debug-symbols is deprecated.
 354   # Please use --with-native-debug-symbols=[internal,external,zipped] .
 355   BASIC_DEPRECATED_ARG_ENABLE(debug-symbols, debug_symbols,
 356         [Please use --with-native-debug-symbols=[[internal,external,zipped]] .])
 357 
 358   # --enable-zip-debug-info is deprecated.
 359   # Please use --with-native-debug-symbols=zipped .
 360   BASIC_DEPRECATED_ARG_ENABLE(zip-debug-info, zip_debug_info,
 361                               [Please use --with-native-debug-symbols=zipped .])
 362 
 363   AC_SUBST(COMPILE_WITH_DEBUG_SYMBOLS)
 364   AC_SUBST(COPY_DEBUG_SYMBOLS)
 365   AC_SUBST(ZIP_EXTERNAL_DEBUG_SYMBOLS)
 366 ])
 367 
 368 ################################################################################
 369 #
 370 # Gcov coverage data for hotspot
 371 #
 372 AC_DEFUN_ONCE([JDKOPT_SETUP_CODE_COVERAGE],
 373 [
 374   AC_ARG_ENABLE(native-coverage, [AS_HELP_STRING([--enable-native-coverage],
 375       [enable native compilation with code coverage data@<:@disabled@:>@])])
 376   GCOV_ENABLED="false"
 377   if test "x$enable_native_coverage" = "xyes"; then
 378     if test "x$TOOLCHAIN_TYPE" = "xgcc"; then
 379       AC_MSG_CHECKING([if native coverage is enabled])
 380       AC_MSG_RESULT([yes])
 381       GCOV_CFLAGS="-fprofile-arcs -ftest-coverage -fno-inline"
 382       GCOV_LDFLAGS="-fprofile-arcs"
 383       JVM_CFLAGS="$JVM_CFLAGS $GCOV_CFLAGS"
 384       JVM_LDFLAGS="$JVM_LDFLAGS $GCOV_LDFLAGS"
 385       CFLAGS_JDKLIB="$CFLAGS_JDKLIB $GCOV_CFLAGS"
 386       CFLAGS_JDKEXE="$CFLAGS_JDKEXE $GCOV_CFLAGS"
 387       CXXFLAGS_JDKLIB="$CXXFLAGS_JDKLIB $GCOV_CFLAGS"
 388       CXXFLAGS_JDKEXE="$CXXFLAGS_JDKEXE $GCOV_CFLAGS"
 389       LDFLAGS_JDKLIB="$LDFLAGS_JDKLIB $GCOV_LDFLAGS"
 390       LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE $GCOV_LDFLAGS"
 391       GCOV_ENABLED="true"
 392     else
 393       AC_MSG_ERROR([--enable-native-coverage only works with toolchain type gcc])
 394     fi
 395   elif test "x$enable_native_coverage" = "xno"; then
 396     AC_MSG_CHECKING([if native coverage is enabled])
 397     AC_MSG_RESULT([no])
 398   elif test "x$enable_native_coverage" != "x"; then
 399     AC_MSG_ERROR([--enable-native-coverage can only be assigned "yes" or "no"])
 400   fi
 401 
 402   AC_SUBST(GCOV_ENABLED)
 403 ])
 404 
 405 ###############################################################################
 406 #
 407 # AddressSanitizer
 408 #
 409 AC_DEFUN_ONCE([JDKOPT_SETUP_ADDRESS_SANITIZER],
 410 [
 411   AC_ARG_ENABLE(asan, [AS_HELP_STRING([--enable-asan],
 412       [enable AddressSanitizer if possible @<:@disabled@:>@])])
 413   ASAN_ENABLED="no"
 414   if test "x$enable_asan" = "xyes"; then
 415     case $TOOLCHAIN_TYPE in
 416       gcc | clang)
 417         AC_MSG_CHECKING([if asan is enabled])
 418         AC_MSG_RESULT([yes])
 419         ASAN_CFLAGS="-fsanitize=address -fno-omit-frame-pointer"
 420         ASAN_LDFLAGS="-fsanitize=address"
 421         JVM_CFLAGS="$JVM_CFLAGS $ASAN_CFLAGS"
 422         JVM_LDFLAGS="$JVM_LDFLAGS $ASAN_LDFLAGS"
 423         CFLAGS_JDKLIB="$CFLAGS_JDKLIB $ASAN_CFLAGS"
 424         CFLAGS_JDKEXE="$CFLAGS_JDKEXE $ASAN_CFLAGS"
 425         CXXFLAGS_JDKLIB="$CXXFLAGS_JDKLIB $ASAN_CFLAGS"
 426         CXXFLAGS_JDKEXE="$CXXFLAGS_JDKEXE $ASAN_CFLAGS"
 427         LDFLAGS_JDKLIB="$LDFLAGS_JDKLIB $ASAN_LDFLAGS"
 428         LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE $ASAN_LDFLAGS"
 429         ASAN_ENABLED="yes"
 430         ;;
 431       *)
 432         AC_MSG_ERROR([--enable-asan only works with toolchain type gcc or clang])
 433         ;;
 434     esac
 435   elif test "x$enable_asan" = "xno"; then
 436     AC_MSG_CHECKING([if asan is enabled])
 437     AC_MSG_RESULT([no])
 438   elif test "x$enable_asan" != "x"; then
 439     AC_MSG_ERROR([--enable-asan can only be assigned "yes" or "no"])
 440   fi
 441 
 442   AC_SUBST(ASAN_ENABLED)
 443 ])
 444 
 445 ################################################################################
 446 #
 447 # Static build support.  When enabled will generate static
 448 # libraries instead of shared libraries for all JDK libs.
 449 #
 450 AC_DEFUN_ONCE([JDKOPT_SETUP_STATIC_BUILD],
 451 [
 452   AC_ARG_ENABLE([static-build], [AS_HELP_STRING([--enable-static-build],
 453     [enable static library build @<:@disabled@:>@])])
 454   STATIC_BUILD=false
 455   if test "x$enable_static_build" = "xyes"; then
 456     AC_MSG_CHECKING([if static build is enabled])
 457     AC_MSG_RESULT([yes])
 458     if test "x$OPENJDK_TARGET_OS" != "xmacosx"; then
 459       AC_MSG_ERROR([--enable-static-build is only supported for macosx builds])
 460     fi
 461     STATIC_BUILD_CFLAGS="-DSTATIC_BUILD=1"
 462     CFLAGS_JDKLIB_EXTRA="$CFLAGS_JDKLIB_EXTRA $STATIC_BUILD_CFLAGS"
 463     CXXFLAGS_JDKLIB_EXTRA="$CXXFLAGS_JDKLIB_EXTRA $STATIC_BUILD_CFLAGS"
 464     STATIC_BUILD=true
 465   elif test "x$enable_static_build" = "xno"; then
 466     AC_MSG_CHECKING([if static build is enabled])
 467     AC_MSG_RESULT([no])
 468   elif test "x$enable_static_build" != "x"; then
 469     AC_MSG_ERROR([--enable-static-build can only be assigned "yes" or "no"])
 470   fi
 471 
 472   AC_SUBST(STATIC_BUILD)
 473 ])
 474 
 475 ################################################################################
 476 #
 477 # jlink options.
 478 # We always keep packaged modules in JDK image.
 479 #
 480 AC_DEFUN_ONCE([JDKOPT_SETUP_JLINK_OPTIONS],
 481 [
 482   AC_ARG_ENABLE([keep-packaged-modules], [AS_HELP_STRING([--disable-keep-packaged-modules],
 483     [Do not keep packaged modules in jdk image @<:@enable@:>@])])
 484 
 485   AC_MSG_CHECKING([if packaged modules are kept])
 486   if test "x$enable_keep_packaged_modules" = "xyes"; then
 487     AC_MSG_RESULT([yes])
 488     JLINK_KEEP_PACKAGED_MODULES=true
 489   elif test "x$enable_keep_packaged_modules" = "xno"; then
 490     AC_MSG_RESULT([no])
 491     JLINK_KEEP_PACKAGED_MODULES=false
 492   elif test "x$enable_keep_packaged_modules" = "x"; then
 493     AC_MSG_RESULT([yes (default)])
 494     JLINK_KEEP_PACKAGED_MODULES=true
 495   else
 496     AC_MSG_RESULT([error])
 497     AC_MSG_ERROR([--enable-keep-packaged-modules accepts no argument])
 498   fi
 499 
 500   AC_SUBST(JLINK_KEEP_PACKAGED_MODULES)
 501 ])
 502 
 503 ################################################################################
 504 #
 505 # Check if building of the jtreg failure handler should be enabled.
 506 #
 507 AC_DEFUN_ONCE([JDKOPT_ENABLE_DISABLE_FAILURE_HANDLER],
 508 [
 509   AC_ARG_ENABLE([jtreg-failure-handler], [AS_HELP_STRING([--enable-jtreg-failure-handler],
 510     [forces build of the jtreg failure handler to be enabled, missing dependencies
 511      become fatal errors. Default is auto, where the failure handler is built if all
 512      dependencies are present and otherwise just disabled.])])
 513 
 514   AC_MSG_CHECKING([if jtreg failure handler should be built])
 515 
 516   if test "x$enable_jtreg_failure_handler" = "xyes"; then
 517     if test "x$JT_HOME" = "x"; then
 518       AC_MSG_ERROR([Cannot enable jtreg failure handler without jtreg.])
 519     else
 520       BUILD_FAILURE_HANDLER=true
 521       AC_MSG_RESULT([yes, forced])
 522     fi
 523   elif test "x$enable_jtreg_failure_handler" = "xno"; then
 524     BUILD_FAILURE_HANDLER=false
 525     AC_MSG_RESULT([no, forced])
 526   elif test "x$enable_jtreg_failure_handler" = "xauto" \
 527       || test "x$enable_jtreg_failure_handler" = "x"; then
 528     if test "x$JT_HOME" = "x"; then
 529       BUILD_FAILURE_HANDLER=false
 530       AC_MSG_RESULT([no, missing jtreg])
 531     else
 532       BUILD_FAILURE_HANDLER=true
 533       AC_MSG_RESULT([yes, jtreg present])
 534     fi
 535   else
 536     AC_MSG_ERROR([Invalid value for --enable-jtreg-failure-handler: $enable_jtreg_failure_handler])
 537   fi
 538 
 539   AC_SUBST(BUILD_FAILURE_HANDLER)
 540 ])
 541 
 542 ################################################################################
 543 #
 544 # Enable or disable generation of the classlist at build time
 545 #
 546 AC_DEFUN_ONCE([JDKOPT_ENABLE_DISABLE_GENERATE_CLASSLIST],
 547 [
 548   AC_ARG_ENABLE([generate-classlist], [AS_HELP_STRING([--disable-generate-classlist],
 549       [forces enabling or disabling of the generation of a CDS classlist at build time.
 550       Default is to generate it when either the server or client JVMs are built and
 551       enable-cds is true.])])
 552 
 553   # Check if it's likely that it's possible to generate the classlist. Depending
 554   # on exact jvm configuration it could be possible anyway.
 555   if test "x$ENABLE_CDS" = "xtrue" && (HOTSPOT_CHECK_JVM_VARIANT(server) || HOTSPOT_CHECK_JVM_VARIANT(client)); then
 556     ENABLE_GENERATE_CLASSLIST_POSSIBLE="true"
 557   else
 558     ENABLE_GENERATE_CLASSLIST_POSSIBLE="false"
 559   fi
 560 
 561   AC_MSG_CHECKING([if the CDS classlist generation should be enabled])
 562   if test "x$enable_generate_classlist" = "xyes"; then
 563     AC_MSG_RESULT([yes, forced])
 564     ENABLE_GENERATE_CLASSLIST="true"
 565     if test "x$ENABLE_GENERATE_CLASSLIST_POSSIBLE" = "xfalse"; then
 566       AC_MSG_WARN([Generation of classlist might not be possible with JVM Variants $JVM_VARIANTS and enable-cds=$ENABLE_CDS])
 567     fi
 568   elif test "x$enable_generate_classlist" = "xno"; then
 569     AC_MSG_RESULT([no, forced])
 570     ENABLE_GENERATE_CLASSLIST="false"
 571   elif test "x$enable_generate_classlist" = "x"; then
 572     if test "x$ENABLE_GENERATE_CLASSLIST_POSSIBLE" = "xtrue"; then
 573       AC_MSG_RESULT([yes])
 574       ENABLE_GENERATE_CLASSLIST="true"
 575     else
 576       AC_MSG_RESULT([no])
 577       ENABLE_GENERATE_CLASSLIST="false"
 578     fi
 579   else
 580     AC_MSG_ERROR([Invalid value for --enable-generate-classlist: $enable_generate_classlist])
 581   fi
 582 
 583   AC_SUBST(ENABLE_GENERATE_CLASSLIST)
 584 ])
 585 
 586 AC_DEFUN([JDKOPT_SETUP_HARDENED_FLAGS],
 587 [
 588   AC_ARG_ENABLE([hardened-jdk], [AS_HELP_STRING([--enable-hardened-jdk],
 589       [enable hardening compiler flags for all jdk libraries (except the JVM),
 590       typically disabling speculative cti. @<:@disabled@:>@])])
 591 
 592   HARDENED_JDK="false"
 593   AC_MSG_CHECKING([if hardened flags should be used for jdk libraries])
 594   if test "x$enable_hardened_jdk" = "xyes"; then
 595     AC_MSG_RESULT([yes])
 596     HARDENED_JDK="true"
 597   elif test "x$enable_hardened_jdk" = "xno"; then
 598     AC_MSG_RESULT([no])
 599     HARDENED_JDK="false"
 600   elif test "x$enable_hardened_jdk" = "x"; then
 601     AC_MSG_RESULT([no, default])
 602   else
 603     AC_MSG_RESULT([no])
 604     AC_MSG_ERROR([--enable-hardened-jdk does not take a value])
 605   fi
 606 
 607   if test "x$HARDENED_JDK" = "xtrue"; then
 608     if test -z "$NO_SPECULATIVE_CTI_CFLAGS"; then
 609       AC_MSG_ERROR([Speculative cti mitigations not available, cannot enable hardened jdk])
 610     fi
 611     CFLAGS_JDKEXE="$CFLAGS_JDKEXE $NO_SPECULATIVE_CTI_CFLAGS"
 612     CXXFLAGS_JDKEXE="$CXXFLAGS_JDKEXE $NO_SPECULATIVE_CTI_CFLAGS"
 613     CFLAGS_JDKLIB="$CFLAGS_JDKLIB $NO_SPECULATIVE_CTI_CFLAGS"
 614     CXXFLAGS_JDKLIB="$CXXFLAGS_JDKLIB $NO_SPECULATIVE_CTI_CFLAGS"
 615   fi
 616 
 617   AC_ARG_ENABLE([hardened-hotspot], [AS_HELP_STRING([--enable-hardened-hotspot],
 618       [enable hardening compiler flags for hotspot (all jvm variants),
 619       typically disabling speculative cti. To make hardening of hotspot a runtime
 620       choice, consider the "hardened" jvm variant instead of this option.
 621       @<:@disabled@:>@])])
 622 
 623   HARDENED_HOTSPOT="false"
 624   AC_MSG_CHECKING([if hardened flags should be used for hotspot])
 625   if test "x$enable_hardened_hotspot" = "xyes"; then
 626     AC_MSG_RESULT([yes])
 627     HARDENED_HOTSPOT="true"
 628   elif test "x$enable_hardened_hotspot" = "xno"; then
 629     AC_MSG_RESULT([no])
 630     HARDENED_HOTSPOT="false"
 631   elif test "x$enable_hardened_hotspot" = "x"; then
 632     AC_MSG_RESULT([no, default])
 633   else
 634     AC_MSG_RESULT([no])
 635     AC_MSG_ERROR([--enable-hardened-hotspot does not take a value])
 636   fi
 637 
 638   if test "x$HARDENED_HOTSPOT" = "xtrue" && HOTSPOT_CHECK_JVM_VARIANT([hardened]); then
 639     AC_MSG_ERROR([Cannot enable both hardened hotspot as well as hardened jvm variant])
 640   fi
 641 
 642   if test "x$HARDENED_HOTSPOT" = "xtrue" || HOTSPOT_CHECK_JVM_VARIANT([hardened]); then
 643     if test -z "$NO_SPECULATIVE_CTI_CFLAGS"; then
 644       AC_MSG_ERROR([Speculative cti mitigations not available, cannot enable hardened hotspot])
 645     fi
 646   fi
 647 
 648   AC_SUBST(HARDENED_JDK)
 649   AC_SUBST(HARDENED_HOTSPOT)
 650 ])