1 #
   2 # Copyright (c) 2011, 2016, 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 
  86 ###############################################################################
  87 #
  88 # Should we build only OpenJDK even if closed sources are present?
  89 #
  90 AC_DEFUN_ONCE([JDKOPT_SETUP_OPEN_OR_CUSTOM],
  91 [
  92   AC_ARG_ENABLE([openjdk-only], [AS_HELP_STRING([--enable-openjdk-only],
  93       [suppress building custom source even if present @<:@disabled@:>@])],,[enable_openjdk_only="no"])
  94 
  95   AC_MSG_CHECKING([for presence of closed sources])
  96   if test -d "$SRC_ROOT/jdk/src/closed"; then
  97     CLOSED_SOURCE_PRESENT=yes
  98   else
  99     CLOSED_SOURCE_PRESENT=no
 100   fi
 101   AC_MSG_RESULT([$CLOSED_SOURCE_PRESENT])
 102 
 103   AC_MSG_CHECKING([if closed source is suppressed (openjdk-only)])
 104   SUPPRESS_CLOSED_SOURCE="$enable_openjdk_only"
 105   AC_MSG_RESULT([$SUPPRESS_CLOSED_SOURCE])
 106 
 107   if test "x$CLOSED_SOURCE_PRESENT" = xno; then
 108     OPENJDK=true
 109     if test "x$SUPPRESS_CLOSED_SOURCE" = "xyes"; then
 110       AC_MSG_WARN([No closed source present, --enable-openjdk-only makes no sense])
 111     fi
 112   else
 113     if test "x$SUPPRESS_CLOSED_SOURCE" = "xyes"; then
 114       OPENJDK=true
 115     else
 116       OPENJDK=false
 117     fi
 118   fi
 119 
 120   if test "x$OPENJDK" = "xtrue"; then
 121     SET_OPENJDK="OPENJDK=true"
 122   fi
 123 
 124   AC_SUBST(SET_OPENJDK)
 125 
 126   # custom-make-dir is deprecated. Please use your custom-hook.m4 to override
 127   # the IncludeCustomExtension macro.
 128   BASIC_DEPRECATED_ARG_WITH(custom-make-dir)
 129 ])
 130 
 131 AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_OPTIONS],
 132 [
 133   # Should we build a JDK/JVM with headful support (ie a graphical ui)?
 134   # We always build headless support.
 135   AC_MSG_CHECKING([headful support])
 136   AC_ARG_ENABLE([headful], [AS_HELP_STRING([--disable-headful],
 137       [disable building headful support (graphical UI support) @<:@enabled@:>@])],
 138       [SUPPORT_HEADFUL=${enable_headful}], [SUPPORT_HEADFUL=yes])
 139 
 140   SUPPORT_HEADLESS=yes
 141   BUILD_HEADLESS="BUILD_HEADLESS:=true"
 142 
 143   if test "x$SUPPORT_HEADFUL" = xyes; then
 144     # We are building both headful and headless.
 145     headful_msg="include support for both headful and headless"
 146   fi
 147 
 148   if test "x$SUPPORT_HEADFUL" = xno; then
 149     # Thus we are building headless only.
 150     BUILD_HEADLESS="BUILD_HEADLESS:=true"
 151     headful_msg="headless only"
 152   fi
 153 
 154   AC_MSG_RESULT([$headful_msg])
 155 
 156   AC_SUBST(SUPPORT_HEADLESS)
 157   AC_SUBST(SUPPORT_HEADFUL)
 158   AC_SUBST(BUILD_HEADLESS)
 159 
 160   # Choose cacerts source file
 161   AC_ARG_WITH(cacerts-file, [AS_HELP_STRING([--with-cacerts-file],
 162       [specify alternative cacerts file])])
 163   if test "x$with_cacerts_file" != x; then
 164     CACERTS_FILE=$with_cacerts_file
 165   fi
 166   AC_SUBST(CACERTS_FILE)
 167 
 168   # Enable or disable unlimited crypto
 169   AC_ARG_ENABLE(unlimited-crypto, [AS_HELP_STRING([--enable-unlimited-crypto],
 170       [Enable unlimited crypto policy @<:@disabled@:>@])],,
 171       [enable_unlimited_crypto=no])
 172   if test "x$enable_unlimited_crypto" = "xyes"; then
 173     UNLIMITED_CRYPTO=true
 174   else
 175     UNLIMITED_CRYPTO=false
 176   fi
 177   AC_SUBST(UNLIMITED_CRYPTO)
 178 
 179   # Should we build the serviceability agent (SA)?
 180   INCLUDE_SA=true
 181   if test "x$JVM_VARIANT_ZERO" = xtrue ; then
 182     INCLUDE_SA=false
 183   fi
 184   if test "x$JVM_VARIANT_ZEROSHARK" = xtrue ; then
 185     INCLUDE_SA=false
 186   fi
 187   if test "x$OPENJDK_TARGET_OS" = xaix ; then
 188     INCLUDE_SA=false
 189   fi
 190   if test "x$OPENJDK_TARGET_CPU" = xaarch64; then
 191     INCLUDE_SA=false
 192   fi
 193   AC_SUBST(INCLUDE_SA)
 194 
 195   # Compress jars
 196   COMPRESS_JARS=false
 197 
 198   AC_SUBST(COMPRESS_JARS)
 199 
 200   # Setup default copyright year. Mostly overridden when building close to a new year.
 201   AC_ARG_WITH(copyright-year, [AS_HELP_STRING([--with-copyright-year],
 202       [Set copyright year value for build @<:@current year@:>@])])
 203   if test "x$with_copyright_year" = xyes; then
 204     AC_MSG_ERROR([Copyright year must have a value])
 205   elif test "x$with_copyright_year" != x; then
 206     COPYRIGHT_YEAR="$with_copyright_year"
 207   else
 208     COPYRIGHT_YEAR=`date +'%Y'`
 209   fi
 210   AC_SUBST(COPYRIGHT_YEAR)
 211 ])
 212 
 213 ###############################################################################
 214 #
 215 # Enable or disable the elliptic curve crypto implementation
 216 #
 217 AC_DEFUN_ONCE([JDKOPT_DETECT_INTREE_EC],
 218 [
 219   AC_MSG_CHECKING([if elliptic curve crypto implementation is present])
 220 
 221   if test -d "${SRC_ROOT}/jdk/src/jdk.crypto.ec/share/native/libsunec/impl"; then
 222     ENABLE_INTREE_EC=yes
 223     AC_MSG_RESULT([yes])
 224   else
 225     ENABLE_INTREE_EC=no
 226     AC_MSG_RESULT([no])
 227   fi
 228 
 229   AC_SUBST(ENABLE_INTREE_EC)
 230 ])
 231 
 232 AC_DEFUN_ONCE([JDKOPT_SETUP_DEBUG_SYMBOLS],
 233 [
 234   #
 235   # NATIVE_DEBUG_SYMBOLS
 236   # This must be done after the toolchain is setup, since we're looking at objcopy.
 237   #
 238   AC_MSG_CHECKING([what type of native debug symbols to use])
 239   AC_ARG_WITH([native-debug-symbols],
 240       [AS_HELP_STRING([--with-native-debug-symbols],
 241       [set the native debug symbol configuration (none, internal, external, zipped) @<:@varying@:>@])],
 242       [
 243         if test "x$OPENJDK_TARGET_OS" = xaix; then
 244           if test "x$withval" = xexternal || test "x$withval" = xzipped; then
 245             AC_MSG_ERROR([AIX only supports the parameters 'none' and 'internal' for --with-native-debug-symbols])
 246           fi
 247         fi
 248       ],
 249       [
 250         if test "x$OPENJDK_TARGET_OS" = xaix; then
 251           # AIX doesn't support 'zipped' so use 'internal' as default
 252           with_native_debug_symbols="internal"
 253         else
 254           if test "x$STATIC_BUILD" = xtrue; then
 255             with_native_debug_symbols="none"
 256           else
 257             with_native_debug_symbols="zipped"
 258           fi
 259         fi
 260       ])
 261   NATIVE_DEBUG_SYMBOLS=$with_native_debug_symbols
 262   AC_MSG_RESULT([$NATIVE_DEBUG_SYMBOLS])
 263 
 264   if test "x$NATIVE_DEBUG_SYMBOLS" = xzipped; then
 265 
 266     if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then
 267       if test "x$OBJCOPY" = x; then
 268         # enabling of enable-debug-symbols and can't find objcopy
 269         # this is an error
 270         AC_MSG_ERROR([Unable to find objcopy, cannot enable native debug symbols])
 271       fi
 272     fi
 273 
 274     COMPILE_WITH_DEBUG_SYMBOLS=true
 275     COPY_DEBUG_SYMBOLS=true
 276     ZIP_EXTERNAL_DEBUG_SYMBOLS=true
 277 
 278     # Hotspot legacy support, not relevant with COPY_DEBUG_SYMBOLS=true
 279     DEBUG_BINARIES=false
 280     STRIP_POLICY=min_strip
 281 
 282   elif test "x$NATIVE_DEBUG_SYMBOLS" = xnone; then
 283     COMPILE_WITH_DEBUG_SYMBOLS=false
 284     COPY_DEBUG_SYMBOLS=false
 285     ZIP_EXTERNAL_DEBUG_SYMBOLS=false
 286 
 287     DEBUG_BINARIES=false
 288     STRIP_POLICY=no_strip
 289   elif test "x$NATIVE_DEBUG_SYMBOLS" = xinternal; then
 290     COMPILE_WITH_DEBUG_SYMBOLS=true
 291     COPY_DEBUG_SYMBOLS=false
 292     ZIP_EXTERNAL_DEBUG_SYMBOLS=false
 293 
 294     # Hotspot legacy support, will turn on -g when COPY_DEBUG_SYMBOLS=false
 295     DEBUG_BINARIES=true
 296     STRIP_POLICY=no_strip
 297     STRIP=""
 298 
 299   elif test "x$NATIVE_DEBUG_SYMBOLS" = xexternal; then
 300 
 301     if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then
 302       if test "x$OBJCOPY" = x; then
 303         # enabling of enable-debug-symbols and can't find objcopy
 304         # this is an error
 305         AC_MSG_ERROR([Unable to find objcopy, cannot enable native debug symbols])
 306       fi
 307     fi
 308 
 309     COMPILE_WITH_DEBUG_SYMBOLS=true
 310     COPY_DEBUG_SYMBOLS=true
 311     ZIP_EXTERNAL_DEBUG_SYMBOLS=false
 312 
 313     # Hotspot legacy support, not relevant with COPY_DEBUG_SYMBOLS=true
 314     DEBUG_BINARIES=false
 315     STRIP_POLICY=min_strip
 316   else
 317     AC_MSG_ERROR([Allowed native debug symbols are: none, internal, external, zipped])
 318   fi
 319 
 320   # --enable-debug-symbols is deprecated.
 321   # Please use --with-native-debug-symbols=[internal,external,zipped] .
 322   BASIC_DEPRECATED_ARG_ENABLE(debug-symbols, debug_symbols,
 323         [Please use --with-native-debug-symbols=[[internal,external,zipped]] .])
 324 
 325   # --enable-zip-debug-info is deprecated.
 326   # Please use --with-native-debug-symbols=zipped .
 327   BASIC_DEPRECATED_ARG_ENABLE(zip-debug-info, zip_debug_info,
 328                               [Please use --with-native-debug-symbols=zipped .])
 329 
 330   AC_SUBST(COMPILE_WITH_DEBUG_SYMBOLS)
 331   AC_SUBST(COPY_DEBUG_SYMBOLS)
 332   AC_SUBST(ZIP_EXTERNAL_DEBUG_SYMBOLS)
 333 
 334   # Legacy values
 335   AC_SUBST(DEBUG_BINARIES)
 336   AC_SUBST(STRIP_POLICY)
 337 ])
 338 
 339 ################################################################################
 340 #
 341 # Gcov coverage data for hotspot
 342 #
 343 AC_DEFUN_ONCE([JDKOPT_SETUP_CODE_COVERAGE],
 344 [
 345   AC_ARG_ENABLE(native-coverage, [AS_HELP_STRING([--enable-native-coverage],
 346       [enable native compilation with code coverage data@<:@disabled@:>@])])
 347   GCOV_ENABLED="false"
 348   if test "x$enable_native_coverage" = "xyes"; then
 349     if test "x$TOOLCHAIN_TYPE" = "xgcc"; then
 350       AC_MSG_CHECKING([if native coverage is enabled])
 351       AC_MSG_RESULT([yes])
 352       GCOV_CFLAGS="-fprofile-arcs -ftest-coverage -fno-inline"
 353       GCOV_LDFLAGS="-fprofile-arcs"
 354       LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS $GCOV_CFLAGS"
 355       LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS $GCOV_CFLAGS"
 356       LEGACY_EXTRA_LDFLAGS="$LEGACY_EXTRA_LDFLAGS $GCOV_LDFLAGS"
 357       CFLAGS_JDKLIB="$CFLAGS_JDKLIB $GCOV_CFLAGS"
 358       CFLAGS_JDKEXE="$CFLAGS_JDKEXE $GCOV_CFLAGS"
 359       CXXFLAGS_JDKLIB="$CXXFLAGS_JDKLIB $GCOV_CFLAGS"
 360       CXXFLAGS_JDKEXE="$CXXFLAGS_JDKEXE $GCOV_CFLAGS"
 361       LDFLAGS_JDKLIB="$LDFLAGS_JDKLIB $GCOV_LDFLAGS"
 362       LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE $GCOV_LDFLAGS"
 363       GCOV_ENABLED="true"
 364     else
 365       AC_MSG_ERROR([--enable-native-coverage only works with toolchain type gcc])
 366     fi
 367   elif test "x$enable_native_coverage" = "xno"; then
 368     AC_MSG_CHECKING([if native coverage is enabled])
 369     AC_MSG_RESULT([no])
 370   elif test "x$enable_native_coverage" != "x"; then
 371     AC_MSG_ERROR([--enable-native-coverage can only be assigned "yes" or "no"])
 372   fi
 373 
 374   AC_SUBST(GCOV_ENABLED)
 375 ])
 376 
 377 ################################################################################
 378 #
 379 # Static build support.  When enabled will generate static
 380 # libraries instead of shared libraries for all JDK libs.
 381 #
 382 AC_DEFUN_ONCE([JDKOPT_SETUP_STATIC_BUILD],
 383 [
 384   AC_ARG_ENABLE([static-build], [AS_HELP_STRING([--enable-static-build],
 385     [enable static library build @<:@disabled@:>@])])
 386   STATIC_BUILD=false
 387   if test "x$enable_static_build" = "xyes"; then
 388     AC_MSG_CHECKING([if static build is enabled])
 389     AC_MSG_RESULT([yes])
 390     if test "x$OPENJDK_TARGET_OS" != "xmacosx"; then
 391       AC_MSG_ERROR([--enable-static-build is only supported for macosx builds])
 392     fi
 393     STATIC_BUILD_CFLAGS="-DSTATIC_BUILD=1"
 394     LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS $STATIC_BUILD_CFLAGS"
 395     LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS $STATIC_BUILD_CFLAGS"
 396     CFLAGS_JDKLIB_EXTRA="$CFLAGS_JDKLIB_EXTRA $STATIC_BUILD_CFLAGS"
 397     CXXFLAGS_JDKLIB_EXTRA="$CXXFLAGS_JDKLIB_EXTRA $STATIC_BUILD_CFLAGS"
 398     STATIC_BUILD=true
 399   elif test "x$enable_static_build" = "xno"; then
 400     AC_MSG_CHECKING([if static build is enabled])
 401     AC_MSG_RESULT([no])
 402   elif test "x$enable_static_build" != "x"; then
 403     AC_MSG_ERROR([--enable-static-build can only be assigned "yes" or "no"])
 404   fi
 405 
 406   AC_SUBST(STATIC_BUILD)
 407 ])
 408 
 409 ################################################################################
 410 #
 411 # jlink options. 
 412 # We always keep packaged modules in JDK image.
 413 #
 414 AC_DEFUN_ONCE([JDKOPT_SETUP_JLINK_OPTIONS],
 415 [
 416   AC_ARG_ENABLE([keep-packaged-modules], [AS_HELP_STRING([--disable-keep-packaged-modules],
 417     [Do not keep packaged modules in jdk image @<:@enable@:>@])])
 418 
 419   if test "x$enable_keep_packaged_modules" = "xyes"; then
 420     AC_MSG_CHECKING([if packaged modules are kept])
 421     AC_MSG_RESULT([yes])
 422     JLINK_KEEP_PACKAGED_MODULES=true
 423   elif test "x$enable_keep_packaged_modules" = "xno"; then
 424     AC_MSG_CHECKING([if packaged modules are kept])
 425     AC_MSG_RESULT([no])
 426     JLINK_KEEP_PACKAGED_MODULES=false
 427   elif test "x$enable_keep_packaged_modules" = "x"; then
 428     AC_MSG_RESULT([yes (default)])
 429     JLINK_KEEP_PACKAGED_MODULES=true
 430   else
 431     AC_MSG_ERROR([--enable-keep-packaged-modules accepts no argument])
 432   fi
 433 
 434   AC_SUBST(JLINK_KEEP_PACKAGED_MODULES)
 435 ])