1 #
   2 # Copyright (c) 2011, 2020, 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   # Deprecated in JDK 12
  37   BASIC_DEPRECATED_ARG_WITH([jdk-variant])
  38 ])
  39 
  40 ###############################################################################
  41 # Set the debug level
  42 #    release: no debug information, all optimizations, no asserts.
  43 #    optimized: no debug information, all optimizations, no asserts, HotSpot target is 'optimized'.
  44 #    fastdebug: debug information (-g), all optimizations, all asserts
  45 #    slowdebug: debug information (-g), no optimizations, all asserts
  46 AC_DEFUN_ONCE([JDKOPT_SETUP_DEBUG_LEVEL],
  47 [
  48   DEBUG_LEVEL="release"
  49   AC_MSG_CHECKING([which debug level to use])
  50   AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug],
  51       [set the debug level to fastdebug (shorthand for --with-debug-level=fastdebug) @<:@disabled@:>@])],
  52       [
  53         ENABLE_DEBUG="${enableval}"
  54         DEBUG_LEVEL="fastdebug"
  55       ], [ENABLE_DEBUG="no"])
  56 
  57   AC_ARG_WITH([debug-level], [AS_HELP_STRING([--with-debug-level],
  58       [set the debug level (release, fastdebug, slowdebug, optimized) @<:@release@:>@])],
  59       [
  60         DEBUG_LEVEL="${withval}"
  61         if test "x$ENABLE_DEBUG" = xyes; then
  62           AC_MSG_ERROR([You cannot use both --enable-debug and --with-debug-level at the same time.])
  63         fi
  64       ])
  65   AC_MSG_RESULT([$DEBUG_LEVEL])
  66 
  67   if test "x$DEBUG_LEVEL" != xrelease && \
  68       test "x$DEBUG_LEVEL" != xoptimized && \
  69       test "x$DEBUG_LEVEL" != xfastdebug && \
  70       test "x$DEBUG_LEVEL" != xslowdebug; then
  71     AC_MSG_ERROR([Allowed debug levels are: release, fastdebug, slowdebug and optimized])
  72   fi
  73 
  74   # Translate DEBUG_LEVEL to debug level used by Hotspot
  75   HOTSPOT_DEBUG_LEVEL="$DEBUG_LEVEL"
  76   if test "x$DEBUG_LEVEL" = xrelease; then
  77     HOTSPOT_DEBUG_LEVEL="product"
  78   elif test "x$DEBUG_LEVEL" = xslowdebug; then
  79     HOTSPOT_DEBUG_LEVEL="debug"
  80   fi
  81 
  82   if test "x$DEBUG_LEVEL" = xoptimized; then
  83     # The debug level 'optimized' is a little special because it is currently only
  84     # applicable to the HotSpot build where it means to build a completely
  85     # optimized version of the VM without any debugging code (like for the
  86     # 'release' debug level which is called 'product' in the HotSpot build) but
  87     # with the exception that it can contain additional code which is otherwise
  88     # protected by '#ifndef PRODUCT' macros. These 'optimized' builds are used to
  89     # test new and/or experimental features which are not intended for customer
  90     # shipment. Because these new features need to be tested and benchmarked in
  91     # real world scenarios, we want to build the containing JDK at the 'release'
  92     # debug level.
  93     DEBUG_LEVEL="release"
  94   fi
  95 
  96   AC_SUBST(HOTSPOT_DEBUG_LEVEL)
  97   AC_SUBST(DEBUG_LEVEL)
  98 ])
  99 
 100 ###############################################################################
 101 #
 102 # Should we build only OpenJDK even if closed sources are present?
 103 #
 104 AC_DEFUN_ONCE([JDKOPT_SETUP_OPEN_OR_CUSTOM],
 105 [
 106   AC_ARG_ENABLE([openjdk-only], [AS_HELP_STRING([--enable-openjdk-only],
 107       [suppress building custom source even if present @<:@disabled@:>@])],,[enable_openjdk_only="no"])
 108 
 109   AC_MSG_CHECKING([if custom source is suppressed (openjdk-only)])
 110   AC_MSG_RESULT([$enable_openjdk_only])
 111   if test "x$enable_openjdk_only" = "xyes"; then
 112     SUPPRESS_CUSTOM_EXTENSIONS="true"
 113   elif test "x$enable_openjdk_only" = "xno"; then
 114     SUPPRESS_CUSTOM_EXTENSIONS="false"
 115   else
 116     AC_MSG_ERROR([Invalid value for --enable-openjdk-only: $enable_openjdk_only])
 117   fi
 118 ])
 119 
 120 AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_OPTIONS],
 121 [
 122   # Should we build a JDK without a graphical UI?
 123   AC_MSG_CHECKING([headless only])
 124   AC_ARG_ENABLE([headless-only], [AS_HELP_STRING([--enable-headless-only],
 125       [only build headless (no GUI) support @<:@disabled@:>@])])
 126 
 127   if test "x$enable_headless_only" = "xyes"; then
 128     ENABLE_HEADLESS_ONLY="true"
 129     AC_MSG_RESULT([yes])
 130   elif test "x$enable_headless_only" = "xno"; then
 131     ENABLE_HEADLESS_ONLY="false"
 132     AC_MSG_RESULT([no])
 133   elif test "x$enable_headless_only" = "x"; then
 134     ENABLE_HEADLESS_ONLY="false"
 135     AC_MSG_RESULT([no])
 136   else
 137     AC_MSG_ERROR([--enable-headless-only can only take yes or no])
 138   fi
 139 
 140   AC_SUBST(ENABLE_HEADLESS_ONLY)
 141 
 142   # Should we build the complete docs, or just a lightweight version?
 143   AC_ARG_ENABLE([full-docs], [AS_HELP_STRING([--enable-full-docs],
 144       [build complete documentation @<:@enabled if all tools found@:>@])])
 145 
 146   # Verify dependencies
 147   AC_MSG_CHECKING([for graphviz dot])
 148   if test "x$DOT" != "x"; then
 149     AC_MSG_RESULT([yes])
 150   else
 151     AC_MSG_RESULT([no, cannot generate full docs])
 152     FULL_DOCS_DEP_MISSING=true
 153   fi
 154 
 155   AC_MSG_CHECKING([for pandoc])
 156   if test "x$PANDOC" != "x"; then
 157     AC_MSG_RESULT([yes])
 158   else
 159     AC_MSG_RESULT([no, cannot generate full docs])
 160     FULL_DOCS_DEP_MISSING=true
 161   fi
 162 
 163   AC_MSG_CHECKING([full docs])
 164   if test "x$enable_full_docs" = xyes; then
 165     if test "x$FULL_DOCS_DEP_MISSING" = "xtrue"; then
 166       AC_MSG_RESULT([no, missing dependencies])
 167       HELP_MSG_MISSING_DEPENDENCY([dot])
 168       AC_MSG_ERROR([Cannot enable full docs with missing dependencies. See above. $HELP_MSG])
 169     else
 170       ENABLE_FULL_DOCS=true
 171       AC_MSG_RESULT([yes, forced])
 172     fi
 173   elif test "x$enable_full_docs" = xno; then
 174     ENABLE_FULL_DOCS=false
 175     AC_MSG_RESULT([no, forced])
 176   elif test "x$enable_full_docs" = x; then
 177     # Check for prerequisites
 178     if test "x$FULL_DOCS_DEP_MISSING" = xtrue; then
 179       ENABLE_FULL_DOCS=false
 180       AC_MSG_RESULT([no, missing dependencies])
 181     else
 182       ENABLE_FULL_DOCS=true
 183       AC_MSG_RESULT([yes, dependencies present])
 184     fi
 185   else
 186     AC_MSG_ERROR([--enable-full-docs can only take yes or no])
 187   fi
 188 
 189   AC_SUBST(ENABLE_FULL_DOCS)
 190 
 191   # Choose cacerts source file
 192   AC_ARG_WITH(cacerts-file, [AS_HELP_STRING([--with-cacerts-file],
 193       [specify alternative cacerts file])])
 194   AC_MSG_CHECKING([for cacerts file])
 195   if test "x$with_cacerts_file" == x; then
 196     AC_MSG_RESULT([default])
 197   else
 198     CACERTS_FILE=$with_cacerts_file
 199     if test ! -f "$CACERTS_FILE"; then
 200       AC_MSG_RESULT([fail])
 201       AC_MSG_ERROR([Specified cacerts file "$CACERTS_FILE" does not exist])
 202     fi
 203     AC_MSG_RESULT([$CACERTS_FILE])
 204   fi
 205   AC_SUBST(CACERTS_FILE)
 206 
 207   # Enable or disable unlimited crypto
 208   AC_ARG_ENABLE(unlimited-crypto, [AS_HELP_STRING([--disable-unlimited-crypto],
 209       [Disable unlimited crypto policy @<:@enabled@:>@])],,
 210       [enable_unlimited_crypto=yes])
 211   if test "x$enable_unlimited_crypto" = "xyes"; then
 212     UNLIMITED_CRYPTO=true
 213   else
 214     UNLIMITED_CRYPTO=false
 215   fi
 216   AC_SUBST(UNLIMITED_CRYPTO)
 217 
 218   # Should we build the serviceability agent (SA)?
 219   INCLUDE_SA=true
 220   if HOTSPOT_CHECK_JVM_VARIANT(zero); then
 221     INCLUDE_SA=false
 222   fi
 223   if test "x$OPENJDK_TARGET_OS" = xaix ; then
 224     INCLUDE_SA=false
 225   fi
 226   if test "x$OPENJDK_TARGET_CPU" = xs390x ; then
 227     INCLUDE_SA=false
 228   fi
 229   AC_SUBST(INCLUDE_SA)
 230 
 231   # Compress jars
 232   COMPRESS_JARS=false
 233 
 234   AC_SUBST(COMPRESS_JARS)
 235 
 236   # Setup default copyright year. Mostly overridden when building close to a new year.
 237   AC_ARG_WITH(copyright-year, [AS_HELP_STRING([--with-copyright-year],
 238       [Set copyright year value for build @<:@current year@:>@])])
 239   if test "x$with_copyright_year" = xyes; then
 240     AC_MSG_ERROR([Copyright year must have a value])
 241   elif test "x$with_copyright_year" != x; then
 242     COPYRIGHT_YEAR="$with_copyright_year"
 243   else
 244     COPYRIGHT_YEAR=`$DATE +'%Y'`
 245   fi
 246   AC_SUBST(COPYRIGHT_YEAR)
 247 
 248   # Override default library path
 249   AC_ARG_WITH([jni-libpath], [AS_HELP_STRING([--with-jni-libpath],
 250       [override default JNI library search path])])
 251   AC_MSG_CHECKING([for jni library path])
 252   if test "x${with_jni_libpath}" = "x" || test "x${with_jni_libpath}" = "xno"; then
 253     AC_MSG_RESULT([default])
 254   elif test "x${with_jni_libpath}" = "xyes"; then
 255     AC_MSG_RESULT([invalid])
 256     AC_MSG_ERROR([The --with-jni-libpath option requires an argument.])
 257   else
 258     HOTSPOT_OVERRIDE_LIBPATH=${with_jni_libpath}
 259     if test "x$OPENJDK_TARGET_OS" != "xlinux" &&
 260          test "x$OPENJDK_TARGET_OS" != "xbsd" &&
 261          test "x$OPENJDK_TARGET_OS" != "xaix"; then
 262       AC_MSG_RESULT([fail])
 263       AC_MSG_ERROR([Overriding JNI library path is supported only on Linux, BSD and AIX.])
 264     fi
 265     AC_MSG_RESULT(${HOTSPOT_OVERRIDE_LIBPATH})
 266   fi
 267   AC_SUBST(HOTSPOT_OVERRIDE_LIBPATH)
 268 
 269 ])
 270 
 271 ###############################################################################
 272 #
 273 # Enable or disable the elliptic curve crypto implementation
 274 #
 275 AC_DEFUN_ONCE([JDKOPT_DETECT_INTREE_EC],
 276 [
 277   AC_MSG_CHECKING([if elliptic curve crypto implementation is present])
 278 
 279   if test -d "${TOPDIR}/src/jdk.crypto.ec/share/native/libsunec/impl"; then
 280     ENABLE_INTREE_EC=true
 281     AC_MSG_RESULT([yes])
 282   else
 283     ENABLE_INTREE_EC=false
 284     AC_MSG_RESULT([no])
 285   fi
 286 
 287   AC_SUBST(ENABLE_INTREE_EC)
 288 ])
 289 
 290 AC_DEFUN_ONCE([JDKOPT_SETUP_DEBUG_SYMBOLS],
 291 [
 292   #
 293   # NATIVE_DEBUG_SYMBOLS
 294   # This must be done after the toolchain is setup, since we're looking at objcopy.
 295   #
 296   AC_MSG_CHECKING([what type of native debug symbols to use])
 297   AC_ARG_WITH([native-debug-symbols],
 298       [AS_HELP_STRING([--with-native-debug-symbols],
 299       [set the native debug symbol configuration (none, internal, external, zipped) @<:@varying@:>@])],
 300       [
 301         if test "x$OPENJDK_TARGET_OS" = xaix; then
 302           if test "x$withval" = xexternal || test "x$withval" = xzipped; then
 303             AC_MSG_ERROR([AIX only supports the parameters 'none' and 'internal' for --with-native-debug-symbols])
 304           fi
 305         else
 306           if test "x$OPENJDK_TARGET_OS" = xwindows; then
 307             if test "x$withval" = xinternal; then
 308               AC_MSG_ERROR([Windows does not support the parameter 'internal' for --with-native-debug-symbols])
 309             fi
 310           fi
 311         fi
 312       ],
 313       [
 314         if test "x$STATIC_BUILD" = xtrue; then
 315           with_native_debug_symbols="none"
 316         else
 317           if test "x$OPENJDK_TARGET_OS" = xaix; then
 318             # AIX doesn't support 'external' so use 'internal' as default
 319             with_native_debug_symbols="internal"
 320           else
 321             with_native_debug_symbols="external"
 322           fi
 323         fi
 324       ])
 325   NATIVE_DEBUG_SYMBOLS=$with_native_debug_symbols
 326   AC_MSG_RESULT([$NATIVE_DEBUG_SYMBOLS])
 327 
 328   if 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   elif test "x$NATIVE_DEBUG_SYMBOLS" = xzipped; then
 350 
 351     if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then
 352       if test "x$OBJCOPY" = x; then
 353         # enabling of enable-debug-symbols and can't find objcopy
 354         # this is an error
 355         AC_MSG_ERROR([Unable to find objcopy, cannot enable native debug symbols])
 356       fi
 357     fi
 358 
 359     COMPILE_WITH_DEBUG_SYMBOLS=true
 360     COPY_DEBUG_SYMBOLS=true
 361     ZIP_EXTERNAL_DEBUG_SYMBOLS=true
 362   else
 363     AC_MSG_ERROR([Allowed native debug symbols are: none, internal, external, zipped])
 364   fi
 365 
 366   AC_SUBST(COMPILE_WITH_DEBUG_SYMBOLS)
 367   AC_SUBST(COPY_DEBUG_SYMBOLS)
 368   AC_SUBST(ZIP_EXTERNAL_DEBUG_SYMBOLS)
 369 ])
 370 
 371 ################################################################################
 372 #
 373 # Native and Java code coverage
 374 #
 375 AC_DEFUN_ONCE([JDKOPT_SETUP_CODE_COVERAGE],
 376 [
 377   AC_ARG_ENABLE(native-coverage, [AS_HELP_STRING([--enable-native-coverage],
 378       [enable native compilation with code coverage data@<:@disabled@:>@])])
 379   GCOV_ENABLED="false"
 380   if test "x$enable_native_coverage" = "xyes"; then
 381     case $TOOLCHAIN_TYPE in
 382       gcc | clang)
 383         AC_MSG_CHECKING([if native coverage is enabled])
 384         AC_MSG_RESULT([yes])
 385         GCOV_CFLAGS="-fprofile-arcs -ftest-coverage -fno-inline"
 386         GCOV_LDFLAGS="-fprofile-arcs"
 387         JVM_CFLAGS="$JVM_CFLAGS $GCOV_CFLAGS"
 388         JVM_LDFLAGS="$JVM_LDFLAGS $GCOV_LDFLAGS"
 389         CFLAGS_JDKLIB="$CFLAGS_JDKLIB $GCOV_CFLAGS"
 390         CFLAGS_JDKEXE="$CFLAGS_JDKEXE $GCOV_CFLAGS"
 391         CXXFLAGS_JDKLIB="$CXXFLAGS_JDKLIB $GCOV_CFLAGS"
 392         CXXFLAGS_JDKEXE="$CXXFLAGS_JDKEXE $GCOV_CFLAGS"
 393         LDFLAGS_JDKLIB="$LDFLAGS_JDKLIB $GCOV_LDFLAGS"
 394         LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE $GCOV_LDFLAGS"
 395         GCOV_ENABLED="true"
 396         ;;
 397       *)
 398         AC_MSG_ERROR([--enable-native-coverage only works with toolchain type gcc or clang])
 399         ;;
 400     esac
 401   elif test "x$enable_native_coverage" = "xno"; then
 402     AC_MSG_CHECKING([if native coverage is enabled])
 403     AC_MSG_RESULT([no])
 404   elif test "x$enable_native_coverage" != "x"; then
 405     AC_MSG_ERROR([--enable-native-coverage can only be assigned "yes" or "no"])
 406   fi
 407   AC_SUBST(GCOV_ENABLED)
 408 
 409   AC_ARG_WITH(jcov, [AS_HELP_STRING([--with-jcov],
 410       [jcov library location])])
 411   AC_ARG_WITH(jcov-input-jdk, [AS_HELP_STRING([--with-jcov-input-jdk],
 412       [jdk image to instrument])])
 413   AC_ARG_WITH(jcov-filters, [AS_HELP_STRING([--with-jcov-filters],
 414       [filters to limit code for jcov instrumentation and report generation])])
 415   JCOV_HOME=
 416   JCOV_INPUT_JDK=
 417   JCOV_ENABLED=
 418   JCOV_FILTERS=
 419   if test "x$with_jcov" = "x" ; then
 420     JCOV_ENABLED="false"
 421   else
 422     JCOV_HOME="$with_jcov"
 423     if test ! -f "$JCOV_HOME/lib/jcov.jar"; then
 424       AC_MSG_RESULT([fail])
 425       AC_MSG_ERROR([Invalid JCov bundle: "$JCOV_HOME/lib/jcov.jar" does not exist])
 426     fi
 427     JCOV_ENABLED="true"
 428     BASIC_FIXUP_PATH(JCOV_HOME)
 429     if test "x$with_jcov_input_jdk" != "x" ; then
 430       JCOV_INPUT_JDK="$with_jcov_input_jdk"
 431       if test ! -f "$JCOV_INPUT_JDK/bin/java$EXE_SUFFIX"; then
 432         AC_MSG_RESULT([fail])
 433         AC_MSG_ERROR([Invalid JDK bundle: "$JCOV_INPUT_JDK/bin/java$EXE_SUFFIX" does not exist])
 434       fi
 435       BASIC_FIXUP_PATH(JCOV_INPUT_JDK)
 436     fi
 437     if test "x$with_jcov_filters" != "x" ; then
 438       JCOV_FILTERS="$with_jcov_filters"
 439     fi
 440   fi
 441   AC_SUBST(JCOV_ENABLED)
 442   AC_SUBST(JCOV_HOME)
 443   AC_SUBST(JCOV_INPUT_JDK)
 444   AC_SUBST(JCOV_FILTERS)
 445 ])
 446 
 447 ###############################################################################
 448 #
 449 # AddressSanitizer
 450 #
 451 AC_DEFUN_ONCE([JDKOPT_SETUP_ADDRESS_SANITIZER],
 452 [
 453   AC_ARG_ENABLE(asan, [AS_HELP_STRING([--enable-asan],
 454       [enable AddressSanitizer if possible @<:@disabled@:>@])])
 455   ASAN_ENABLED="no"
 456   if test "x$enable_asan" = "xyes"; then
 457     case $TOOLCHAIN_TYPE in
 458       gcc | clang)
 459         AC_MSG_CHECKING([if asan is enabled])
 460         AC_MSG_RESULT([yes])
 461         ASAN_CFLAGS="-fsanitize=address -fno-omit-frame-pointer"
 462         ASAN_LDFLAGS="-fsanitize=address"
 463         JVM_CFLAGS="$JVM_CFLAGS $ASAN_CFLAGS"
 464         JVM_LDFLAGS="$JVM_LDFLAGS $ASAN_LDFLAGS"
 465         CFLAGS_JDKLIB="$CFLAGS_JDKLIB $ASAN_CFLAGS"
 466         CFLAGS_JDKEXE="$CFLAGS_JDKEXE $ASAN_CFLAGS"
 467         CXXFLAGS_JDKLIB="$CXXFLAGS_JDKLIB $ASAN_CFLAGS"
 468         CXXFLAGS_JDKEXE="$CXXFLAGS_JDKEXE $ASAN_CFLAGS"
 469         LDFLAGS_JDKLIB="$LDFLAGS_JDKLIB $ASAN_LDFLAGS"
 470         LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE $ASAN_LDFLAGS"
 471         ASAN_ENABLED="yes"
 472         ;;
 473       *)
 474         AC_MSG_ERROR([--enable-asan only works with toolchain type gcc or clang])
 475         ;;
 476     esac
 477   elif test "x$enable_asan" = "xno"; then
 478     AC_MSG_CHECKING([if asan is enabled])
 479     AC_MSG_RESULT([no])
 480   elif test "x$enable_asan" != "x"; then
 481     AC_MSG_ERROR([--enable-asan can only be assigned "yes" or "no"])
 482   fi
 483 
 484   AC_SUBST(ASAN_ENABLED)
 485 ])
 486 
 487 ################################################################################
 488 #
 489 # Static build support.  When enabled will generate static
 490 # libraries instead of shared libraries for all JDK libs.
 491 #
 492 AC_DEFUN_ONCE([JDKOPT_SETUP_STATIC_BUILD],
 493 [
 494   AC_ARG_ENABLE([static-build], [AS_HELP_STRING([--enable-static-build],
 495     [enable static library build @<:@disabled@:>@])])
 496   STATIC_BUILD=false
 497   if test "x$enable_static_build" = "xyes"; then
 498     AC_MSG_CHECKING([if static build is enabled])
 499     AC_MSG_RESULT([yes])
 500     if test "x$OPENJDK_TARGET_OS" != "xmacosx"; then
 501       AC_MSG_ERROR([--enable-static-build is only supported for macosx builds])
 502     fi
 503     STATIC_BUILD_CFLAGS="-DSTATIC_BUILD=1"
 504     CFLAGS_JDKLIB_EXTRA="$CFLAGS_JDKLIB_EXTRA $STATIC_BUILD_CFLAGS"
 505     CXXFLAGS_JDKLIB_EXTRA="$CXXFLAGS_JDKLIB_EXTRA $STATIC_BUILD_CFLAGS"
 506     STATIC_BUILD=true
 507   elif test "x$enable_static_build" = "xno"; then
 508     AC_MSG_CHECKING([if static build is enabled])
 509     AC_MSG_RESULT([no])
 510   elif test "x$enable_static_build" != "x"; then
 511     AC_MSG_ERROR([--enable-static-build can only be assigned "yes" or "no"])
 512   fi
 513 
 514   AC_SUBST(STATIC_BUILD)
 515 ])
 516 
 517 ################################################################################
 518 #
 519 # jlink options.
 520 # We always keep packaged modules in JDK image.
 521 #
 522 AC_DEFUN_ONCE([JDKOPT_SETUP_JLINK_OPTIONS],
 523 [
 524   AC_ARG_ENABLE([keep-packaged-modules], [AS_HELP_STRING([--disable-keep-packaged-modules],
 525     [Do not keep packaged modules in jdk image @<:@enable@:>@])])
 526 
 527   AC_MSG_CHECKING([if packaged modules are kept])
 528   if test "x$enable_keep_packaged_modules" = "xyes"; then
 529     AC_MSG_RESULT([yes])
 530     JLINK_KEEP_PACKAGED_MODULES=true
 531   elif test "x$enable_keep_packaged_modules" = "xno"; then
 532     AC_MSG_RESULT([no])
 533     JLINK_KEEP_PACKAGED_MODULES=false
 534   elif test "x$enable_keep_packaged_modules" = "x"; then
 535     AC_MSG_RESULT([yes (default)])
 536     JLINK_KEEP_PACKAGED_MODULES=true
 537   else
 538     AC_MSG_RESULT([error])
 539     AC_MSG_ERROR([--enable-keep-packaged-modules accepts no argument])
 540   fi
 541 
 542   AC_SUBST(JLINK_KEEP_PACKAGED_MODULES)
 543 ])
 544 
 545 ################################################################################
 546 #
 547 # Check if building of the jtreg failure handler should be enabled.
 548 #
 549 AC_DEFUN_ONCE([JDKOPT_ENABLE_DISABLE_FAILURE_HANDLER],
 550 [
 551   AC_ARG_ENABLE([jtreg-failure-handler], [AS_HELP_STRING([--enable-jtreg-failure-handler],
 552     [forces build of the jtreg failure handler to be enabled, missing dependencies
 553      become fatal errors. Default is auto, where the failure handler is built if all
 554      dependencies are present and otherwise just disabled.])])
 555 
 556   AC_MSG_CHECKING([if jtreg failure handler should be built])
 557 
 558   if test "x$enable_jtreg_failure_handler" = "xyes"; then
 559     if test "x$JT_HOME" = "x"; then
 560       AC_MSG_ERROR([Cannot enable jtreg failure handler without jtreg.])
 561     else
 562       BUILD_FAILURE_HANDLER=true
 563       AC_MSG_RESULT([yes, forced])
 564     fi
 565   elif test "x$enable_jtreg_failure_handler" = "xno"; then
 566     BUILD_FAILURE_HANDLER=false
 567     AC_MSG_RESULT([no, forced])
 568   elif test "x$enable_jtreg_failure_handler" = "xauto" \
 569       || test "x$enable_jtreg_failure_handler" = "x"; then
 570     if test "x$JT_HOME" = "x"; then
 571       BUILD_FAILURE_HANDLER=false
 572       AC_MSG_RESULT([no, missing jtreg])
 573     else
 574       BUILD_FAILURE_HANDLER=true
 575       AC_MSG_RESULT([yes, jtreg present])
 576     fi
 577   else
 578     AC_MSG_ERROR([Invalid value for --enable-jtreg-failure-handler: $enable_jtreg_failure_handler])
 579   fi
 580 
 581   AC_SUBST(BUILD_FAILURE_HANDLER)
 582 ])
 583 
 584 ################################################################################
 585 #
 586 # Enable or disable generation of the classlist at build time
 587 #
 588 AC_DEFUN_ONCE([JDKOPT_ENABLE_DISABLE_GENERATE_CLASSLIST],
 589 [
 590   AC_ARG_ENABLE([generate-classlist], [AS_HELP_STRING([--disable-generate-classlist],
 591       [forces enabling or disabling of the generation of a CDS classlist at build time.
 592       Default is to generate it when either the server or client JVMs are built and
 593       enable-cds is true.])])
 594 
 595   # Check if it's likely that it's possible to generate the classlist. Depending
 596   # on exact jvm configuration it could be possible anyway.
 597   if test "x$ENABLE_CDS" = "xtrue" && (HOTSPOT_CHECK_JVM_VARIANT(server) || HOTSPOT_CHECK_JVM_VARIANT(client) || HOTSPOT_CHECK_JVM_FEATURE(cds)); then
 598     ENABLE_GENERATE_CLASSLIST_POSSIBLE="true"
 599   else
 600     ENABLE_GENERATE_CLASSLIST_POSSIBLE="false"
 601   fi
 602 
 603   AC_MSG_CHECKING([if the CDS classlist generation should be enabled])
 604   if test "x$enable_generate_classlist" = "xyes"; then
 605     AC_MSG_RESULT([yes, forced])
 606     ENABLE_GENERATE_CLASSLIST="true"
 607     if test "x$ENABLE_GENERATE_CLASSLIST_POSSIBLE" = "xfalse"; then
 608       if test "x$ENABLE_CDS" = "xfalse"; then
 609         # In GenerateLinkOptData.gmk, DumpLoadedClassList is used to generate the
 610         # classlist file. It never will work in this case since the VM will report
 611         # an error for DumpLoadedClassList when CDS is disabled.
 612         AC_MSG_ERROR([Generation of classlist is not possible with enable-cds=false])
 613       else
 614         AC_MSG_WARN([Generation of classlist might not be possible with JVM Variants $JVM_VARIANTS and enable-cds=$ENABLE_CDS])
 615       fi
 616     fi
 617   elif test "x$enable_generate_classlist" = "xno"; then
 618     AC_MSG_RESULT([no, forced])
 619     ENABLE_GENERATE_CLASSLIST="false"
 620   elif test "x$enable_generate_classlist" = "x"; then
 621     if test "x$ENABLE_GENERATE_CLASSLIST_POSSIBLE" = "xtrue"; then
 622       AC_MSG_RESULT([yes])
 623       ENABLE_GENERATE_CLASSLIST="true"
 624     else
 625       AC_MSG_RESULT([no])
 626       ENABLE_GENERATE_CLASSLIST="false"
 627     fi
 628   else
 629     AC_MSG_ERROR([Invalid value for --enable-generate-classlist: $enable_generate_classlist])
 630   fi
 631 
 632   AC_SUBST(ENABLE_GENERATE_CLASSLIST)
 633 ])
 634 
 635 ################################################################################
 636 #
 637 # Optionally filter resource translations
 638 #
 639 AC_DEFUN([JDKOPT_EXCLUDE_TRANSLATIONS],
 640 [
 641   AC_ARG_WITH([exclude-translations], [AS_HELP_STRING([--with-exclude-translations],
 642       [a comma separated list of locales to exclude translations for. Default is
 643       to include all translations present in the source.])])
 644 
 645   EXCLUDE_TRANSLATIONS=""
 646   AC_MSG_CHECKING([if any translations should be excluded])
 647   if test "x$with_exclude_translations" != "x"; then
 648     EXCLUDE_TRANSLATIONS="${with_exclude_translations//,/ }"
 649     AC_MSG_RESULT([yes: $EXCLUDE_TRANSLATIONS])
 650   else
 651     AC_MSG_RESULT([no])
 652   fi
 653 
 654   AC_SUBST(EXCLUDE_TRANSLATIONS)
 655 ])
 656 
 657 ################################################################################
 658 #
 659 # Optionally disable man pages
 660 #
 661 AC_DEFUN([JDKOPT_ENABLE_DISABLE_MANPAGES],
 662 [
 663   AC_ARG_ENABLE([manpages], [AS_HELP_STRING([--disable-manpages],
 664       [Set to disable copy of static man pages @<:@enabled@:>@])])
 665 
 666   BUILD_MANPAGES="true"
 667   AC_MSG_CHECKING([if static man pages should be copied])
 668   if test "x$enable_manpages" = "x"; then
 669     AC_MSG_RESULT([yes])
 670   elif test "x$enable_manpages" = "xyes"; then
 671     AC_MSG_RESULT([yes, forced])
 672   elif test "x$enable_manpages" = "xno"; then
 673     AC_MSG_RESULT([no, forced])
 674     BUILD_MANPAGES="false"
 675   else
 676     AC_MSG_RESULT([no])
 677     AC_MSG_ERROR([--enable-manpages can only yes/no or empty])
 678   fi
 679 
 680   AC_SUBST(BUILD_MANPAGES)
 681 ])
 682 
 683 ################################################################################
 684 #
 685 # Disable the default CDS archive generation
 686 #   cross compilation - disabled
 687 #
 688 AC_DEFUN([JDKOPT_ENABLE_DISABLE_CDS_ARCHIVE],
 689 [
 690   AC_ARG_ENABLE([cds-archive], [AS_HELP_STRING([--disable-cds-archive],
 691       [Set to disable generation of a default CDS archive in the product image @<:@enabled@:>@])])
 692 
 693   AC_MSG_CHECKING([if a default CDS archive should be generated])
 694   if test "x$ENABLE_CDS" = "xfalse"; then
 695     AC_MSG_RESULT([no, because CDS is disabled])
 696     BUILD_CDS_ARCHIVE="false"
 697   elif test "x$COMPILE_TYPE" = "xcross"; then
 698     AC_MSG_RESULT([no, not possible with cross compilation])
 699     BUILD_CDS_ARCHIVE="false"
 700   elif test "x$enable_cds_archive" = "xyes"; then
 701     AC_MSG_RESULT([yes, forced])
 702     BUILD_CDS_ARCHIVE="true"
 703   elif test "x$enable_cds_archive" = "x"; then
 704     AC_MSG_RESULT([yes])
 705     BUILD_CDS_ARCHIVE="true"
 706   elif test "x$enable_cds_archive" = "xno"; then
 707     AC_MSG_RESULT([no, forced])
 708     BUILD_CDS_ARCHIVE="false"
 709   else
 710     AC_MSG_RESULT([no])
 711     AC_MSG_ERROR([--enable-cds_archive can only be yes/no or empty])
 712   fi
 713 
 714   AC_SUBST(BUILD_CDS_ARCHIVE)
 715 ])