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