6ed6dff222
Reviewed-by: mdoerr, erikj
603 lines
24 KiB
Plaintext
603 lines
24 KiB
Plaintext
#
|
|
# Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved.
|
|
# 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.
|
|
#
|
|
|
|
################################################################################
|
|
# Terminology used in this file:
|
|
#
|
|
# Valid features == All possible features that the JVM knows about.
|
|
# Deprecated features == Previously known features (not considered valid).
|
|
# Available features == Features that are possible to use in this configuration.
|
|
# Default features == Features that are on by default in this configuration.
|
|
# Enabled features == Features requested by the user to be present.
|
|
# Disabled features == Features excluded from being used by the user.
|
|
# Active features == The exact set of features to be used for a JVM variant.
|
|
#
|
|
# All valid features are considered available, unless listed as unavailable.
|
|
# All available features will be turned on as default, unless listed in a filter.
|
|
################################################################################
|
|
|
|
# We need these as m4 defines to be able to loop over them using m4 later on.
|
|
|
|
# All valid JVM features, regardless of platform
|
|
m4_define(jvm_features_valid, m4_normalize( \
|
|
ifdef([custom_jvm_features_valid], custom_jvm_features_valid) \
|
|
\
|
|
cds compiler1 compiler2 dtrace epsilongc g1gc jfr jni-check \
|
|
jvmci jvmti link-time-opt management minimal opt-size parallelgc \
|
|
serialgc services shenandoahgc vm-structs zero zgc \
|
|
))
|
|
|
|
# Deprecated JVM features (these are ignored, but with a warning)
|
|
m4_define(jvm_features_deprecated, m4_normalize(
|
|
cmsgc trace \
|
|
))
|
|
|
|
# Feature descriptions
|
|
m4_define(jvm_feature_desc_cds, [enable class data sharing (CDS)])
|
|
m4_define(jvm_feature_desc_compiler1, [enable hotspot compiler C1])
|
|
m4_define(jvm_feature_desc_compiler2, [enable hotspot compiler C2])
|
|
m4_define(jvm_feature_desc_dtrace, [enable dtrace support])
|
|
m4_define(jvm_feature_desc_epsilongc, [include the epsilon (no-op) garbage collector])
|
|
m4_define(jvm_feature_desc_g1gc, [include the G1 garbage collector])
|
|
m4_define(jvm_feature_desc_jfr, [enable JDK Flight Recorder (JFR)])
|
|
m4_define(jvm_feature_desc_jni_check, [enable -Xcheck:jni support])
|
|
m4_define(jvm_feature_desc_jvmci, [enable JVM Compiler Interface (JVMCI)])
|
|
m4_define(jvm_feature_desc_jvmti, [enable Java Virtual Machine Tool Interface (JVM TI)])
|
|
m4_define(jvm_feature_desc_link_time_opt, [enable link time optimization])
|
|
m4_define(jvm_feature_desc_management, [enable java.lang.management API support])
|
|
m4_define(jvm_feature_desc_minimal, [support building variant 'minimal'])
|
|
m4_define(jvm_feature_desc_opt_size, [optimize the JVM library for size])
|
|
m4_define(jvm_feature_desc_parallelgc, [include the parallel garbage collector])
|
|
m4_define(jvm_feature_desc_serialgc, [include the serial garbage collector])
|
|
m4_define(jvm_feature_desc_services, [enable diagnostic services and client attaching])
|
|
m4_define(jvm_feature_desc_shenandoahgc, [include the Shenandoah garbage collector])
|
|
m4_define(jvm_feature_desc_static_build, [build static library instead of dynamic])
|
|
m4_define(jvm_feature_desc_vm_structs, [export JVM structures to the Serviceablility Agent])
|
|
m4_define(jvm_feature_desc_zero, [support building variant 'zero'])
|
|
m4_define(jvm_feature_desc_zgc, [include the Z garbage collector])
|
|
|
|
################################################################################
|
|
# Parse command line options for JVM feature selection. After this function
|
|
# has run $JVM_FEATURES_ENABLED, $JVM_FEATURES_DISABLED and $JVM_FEATURES_VALID
|
|
# can be used.
|
|
#
|
|
AC_DEFUN_ONCE([JVM_FEATURES_PARSE_OPTIONS],
|
|
[
|
|
# Setup shell variables from the m4 lists
|
|
UTIL_SORT_LIST(JVM_FEATURES_VALID, "jvm_features_valid")
|
|
UTIL_SORT_LIST(JVM_FEATURES_DEPRECATED, "jvm_features_deprecated")
|
|
|
|
# For historical reasons, some jvm features have their own, shorter names.
|
|
# Keep those as aliases for the --enable-jvm-feature-* style arguments.
|
|
UTIL_ALIASED_ARG_ENABLE(cds, --enable-jvm-feature-cds)
|
|
UTIL_ALIASED_ARG_ENABLE(dtrace, --enable-jvm-feature-dtrace)
|
|
|
|
# First check for features using the
|
|
# --with-jvm-features="<[-]feature>[,<[-]feature> ...]" syntax.
|
|
AC_ARG_WITH([jvm-features], [AS_HELP_STRING([--with-jvm-features],
|
|
[JVM features to enable (foo) or disable (-foo), separated by comma. Use
|
|
'--help' to show possible values @<:@none@:>@])])
|
|
if test "x$with_jvm_features" != x; then
|
|
# Replace "," with " ".
|
|
user_jvm_feature_list=${with_jvm_features//,/ }
|
|
JVM_FEATURES_ENABLED=`$ECHO $user_jvm_feature_list | \
|
|
$AWK '{ for (i=1; i<=NF; i++) if (!match($i, /^-.*/)) printf("%s ", $i) }'`
|
|
JVM_FEATURES_DISABLED=`$ECHO $user_jvm_feature_list | \
|
|
$AWK '{ for (i=1; i<=NF; i++) if (match($i, /^-.*/)) printf("%s ", substr($i, 2))}'`
|
|
|
|
# Verify that the user has provided only valid (or deprecated) features
|
|
UTIL_GET_NON_MATCHING_VALUES(invalid_features, $JVM_FEATURES_ENABLED \
|
|
$JVM_FEATURES_DISABLED, $JVM_FEATURES_VALID $JVM_FEATURES_DEPRECATED)
|
|
if test "x$invalid_features" != x; then
|
|
AC_MSG_NOTICE([Unknown JVM features specified: '$invalid_features'])
|
|
AC_MSG_NOTICE([The available JVM features are: '$JVM_FEATURES_VALID'])
|
|
AC_MSG_ERROR([Cannot continue])
|
|
fi
|
|
|
|
# Check if the user has provided deprecated features
|
|
UTIL_GET_MATCHING_VALUES(deprecated_features, $JVM_FEATURES_ENABLED \
|
|
$JVM_FEATURES_DISABLED, $JVM_FEATURES_DEPRECATED)
|
|
if test "x$deprecated_features" != x; then
|
|
AC_MSG_WARN([Deprecated JVM features specified (will be ignored): '$deprecated_features'])
|
|
# Filter out deprecated features
|
|
UTIL_GET_NON_MATCHING_VALUES(JVM_FEATURES_ENABLED, \
|
|
$JVM_FEATURES_ENABLED, $deprecated_features)
|
|
UTIL_GET_NON_MATCHING_VALUES(JVM_FEATURES_DISABLED, \
|
|
$JVM_FEATURES_DISABLED, $deprecated_features)
|
|
fi
|
|
fi
|
|
|
|
# Then check for features using the "--enable-jvm-feature-<feature>" syntax.
|
|
# Using m4, loop over all features with the variable FEATURE.
|
|
m4_foreach(FEATURE, m4_split(jvm_features_valid), [
|
|
# Create an m4 variable containing a shell variable name (like
|
|
# "enable_jvm_feature_static_build"), and the description.
|
|
m4_define(FEATURE_SHELL, [enable_jvm_feature_]m4_translit(FEATURE, -, _))
|
|
m4_define(FEATURE_DESCRIPTION, [jvm_feature_desc_]m4_translit(FEATURE, -, _))
|
|
|
|
AC_ARG_ENABLE(jvm-feature-FEATURE, AS_HELP_STRING(
|
|
[--enable-jvm-feature-FEATURE], [enable jvm feature 'FEATURE' (FEATURE_DESCRIPTION)]))
|
|
|
|
if test "x$FEATURE_SHELL" = xyes; then
|
|
JVM_FEATURES_ENABLED="$JVM_FEATURES_ENABLED FEATURE"
|
|
elif test "x$FEATURE_SHELL" = xno; then
|
|
JVM_FEATURES_DISABLED="$JVM_FEATURES_DISABLED FEATURE"
|
|
elif test "x$FEATURE_SHELL" != x; then
|
|
AC_MSG_ERROR([Invalid value for --enable-jvm-feature-FEATURE: '$FEATURE_SHELL'])
|
|
fi
|
|
|
|
m4_undefine([FEATURE_SHELL])
|
|
m4_undefine([FEATURE_DESCRIPTION])
|
|
])
|
|
|
|
# Likewise, check for deprecated arguments.
|
|
m4_foreach(FEATURE, m4_split(jvm_features_deprecated), [
|
|
AC_ARG_ENABLE(jvm-feature-FEATURE, AS_HELP_STRING(
|
|
[--enable-jvm-feature-FEATURE],
|
|
[Deprecated. Option is kept for backwards compatibility and is ignored]))
|
|
|
|
m4_define(FEATURE_SHELL, [enable_jvm_feature_]m4_translit(FEATURE, -, _))
|
|
|
|
if test "x$FEATURE_SHELL" != x; then
|
|
AC_MSG_WARN([Deprecated JVM feature, will be ignored: --enable-jvm-feature-FEATURE])
|
|
fi
|
|
|
|
m4_undefine([FEATURE_SHELL])
|
|
])
|
|
|
|
# Check if the user has both enabled and disabled a feature
|
|
UTIL_GET_MATCHING_VALUES(enabled_and_disabled, $JVM_FEATURES_ENABLED, \
|
|
$JVM_FEATURES_DISABLED)
|
|
if test "x$enabled_and_disabled" != x; then
|
|
AC_MSG_NOTICE([These feature are both enabled and disabled: '$enabled_and_disabled'])
|
|
AC_MSG_NOTICE([This can happen if you mix --with-jvm-features and --enable-jvm-feature-*])
|
|
AC_MSG_NOTICE([The recommendation is to only use --enable-jvm-feature-*])
|
|
AC_MSG_ERROR([Cannot continue])
|
|
fi
|
|
|
|
# Clean up lists and announce results to user
|
|
UTIL_SORT_LIST(JVM_FEATURES_ENABLED, $JVM_FEATURES_ENABLED)
|
|
AC_MSG_CHECKING([for JVM features enabled by the user])
|
|
if test "x$JVM_FEATURES_ENABLED" != x; then
|
|
AC_MSG_RESULT(['$JVM_FEATURES_ENABLED'])
|
|
else
|
|
AC_MSG_RESULT([none])
|
|
fi
|
|
|
|
UTIL_SORT_LIST(JVM_FEATURES_DISABLED, $JVM_FEATURES_DISABLED)
|
|
AC_MSG_CHECKING([for JVM features disabled by the user])
|
|
if test "x$JVM_FEATURES_DISABLED" != x; then
|
|
AC_MSG_RESULT(['$JVM_FEATURES_DISABLED'])
|
|
else
|
|
AC_MSG_RESULT([none])
|
|
fi
|
|
|
|
# Makefiles use VALID_JVM_FEATURES in check-jvm-feature to verify correctness.
|
|
VALID_JVM_FEATURES="$JVM_FEATURES_VALID"
|
|
AC_SUBST(VALID_JVM_FEATURES)
|
|
])
|
|
|
|
################################################################################
|
|
# Helper function for the JVM_FEATURES_CHECK_* suite.
|
|
# The code in the code block should assign 'false' to the variable AVAILABLE
|
|
# if the feature is not available, and this function will handle everything
|
|
# else that is needed.
|
|
#
|
|
# arg 1: The name of the feature to test
|
|
# arg 2: The code block to execute
|
|
#
|
|
AC_DEFUN([JVM_FEATURES_CHECK_AVAILABILITY],
|
|
[
|
|
# Assume that feature is available
|
|
AVAILABLE=true
|
|
|
|
# Execute feature test block
|
|
$2
|
|
|
|
AC_MSG_CHECKING([if JVM feature '$1' is available])
|
|
if test "x$AVAILABLE" = "xtrue"; then
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
JVM_FEATURES_PLATFORM_UNAVAILABLE="$JVM_FEATURES_PLATFORM_UNAVAILABLE $1"
|
|
fi
|
|
])
|
|
|
|
################################################################################
|
|
# Check if the feature 'cds' is available on this platform.
|
|
#
|
|
AC_DEFUN_ONCE([JVM_FEATURES_CHECK_CDS],
|
|
[
|
|
JVM_FEATURES_CHECK_AVAILABILITY(cds, [
|
|
AC_MSG_CHECKING([if platform is supported by CDS])
|
|
if test "x$OPENJDK_TARGET_OS" = xaix; then
|
|
AC_MSG_RESULT([no, $OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU])
|
|
AVAILABLE=false
|
|
else
|
|
AC_MSG_RESULT([yes])
|
|
fi
|
|
])
|
|
])
|
|
|
|
################################################################################
|
|
# Check if the feature 'dtrace' is available on this platform.
|
|
#
|
|
AC_DEFUN_ONCE([JVM_FEATURES_CHECK_DTRACE],
|
|
[
|
|
JVM_FEATURES_CHECK_AVAILABILITY(dtrace, [
|
|
AC_MSG_CHECKING([for dtrace tool and platform support])
|
|
if test "x$OPENJDK_TARGET_CPU_ARCH" = "xppc"; then
|
|
AC_MSG_RESULT([no, $OPENJDK_TARGET_CPU_ARCH])
|
|
AVAILABLE=false
|
|
elif test "x$OPENJDK_TARGET_CPU_ARCH" = "xs390"; then
|
|
AC_MSG_RESULT([no, $OPENJDK_TARGET_CPU_ARCH])
|
|
AVAILABLE=false
|
|
elif test "x$DTRACE" != "x" && test -x "$DTRACE"; then
|
|
AC_MSG_RESULT([$DTRACE])
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
AVAILABLE=false
|
|
fi
|
|
|
|
AC_CHECK_HEADERS([sys/sdt.h], [dtrace_headers_ok=true])
|
|
if test "x$dtrace_headers_ok" != "xtrue"; then
|
|
HELP_MSG_MISSING_DEPENDENCY([dtrace])
|
|
AC_MSG_NOTICE([Cannot enable dtrace with missing dependencies. See above.])
|
|
AVAILABLE=false
|
|
fi
|
|
])
|
|
])
|
|
|
|
################################################################################
|
|
# Check if the feature 'jvmci' is available on this platform.
|
|
#
|
|
AC_DEFUN_ONCE([JVM_FEATURES_CHECK_JVMCI],
|
|
[
|
|
JVM_FEATURES_CHECK_AVAILABILITY(jvmci, [
|
|
AC_MSG_CHECKING([if platform is supported by JVMCI])
|
|
if test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then
|
|
AC_MSG_RESULT([yes])
|
|
elif test "x$OPENJDK_TARGET_CPU" = "xaarch64"; then
|
|
AC_MSG_RESULT([yes])
|
|
elif test "x$OPENJDK_TARGET_CPU" = "xriscv64"; then
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
AC_MSG_RESULT([no, $OPENJDK_TARGET_CPU])
|
|
AVAILABLE=false
|
|
fi
|
|
])
|
|
])
|
|
|
|
################################################################################
|
|
# Check if the feature 'shenandoahgc' is available on this platform.
|
|
#
|
|
AC_DEFUN_ONCE([JVM_FEATURES_CHECK_SHENANDOAHGC],
|
|
[
|
|
JVM_FEATURES_CHECK_AVAILABILITY(shenandoahgc, [
|
|
AC_MSG_CHECKING([if platform is supported by Shenandoah])
|
|
if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86" || \
|
|
test "x$OPENJDK_TARGET_CPU" = "xaarch64" || \
|
|
test "x$OPENJDK_TARGET_CPU" = "xppc64le" || \
|
|
test "x$OPENJDK_TARGET_CPU" = "xriscv64"; then
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
AC_MSG_RESULT([no, $OPENJDK_TARGET_CPU])
|
|
AVAILABLE=false
|
|
fi
|
|
])
|
|
])
|
|
|
|
################################################################################
|
|
# Check if the feature 'zgc' is available on this platform.
|
|
#
|
|
AC_DEFUN_ONCE([JVM_FEATURES_CHECK_ZGC],
|
|
[
|
|
JVM_FEATURES_CHECK_AVAILABILITY(zgc, [
|
|
AC_MSG_CHECKING([if platform is supported by ZGC])
|
|
if test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then
|
|
if test "x$OPENJDK_TARGET_OS" = "xlinux" || \
|
|
test "x$OPENJDK_TARGET_OS" = "xwindows" || \
|
|
test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
AC_MSG_RESULT([no, $OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU])
|
|
AVAILABLE=false
|
|
fi
|
|
elif test "x$OPENJDK_TARGET_CPU" = "xaarch64"; then
|
|
if test "x$OPENJDK_TARGET_OS" = "xlinux" || \
|
|
test "x$OPENJDK_TARGET_OS" = "xwindows" || \
|
|
test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
AC_MSG_RESULT([no, $OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU])
|
|
AVAILABLE=false
|
|
fi
|
|
elif test "x$OPENJDK_TARGET_CPU" = "xppc64le" || \
|
|
test "x$OPENJDK_TARGET_CPU" = "xriscv64"; then
|
|
if test "x$OPENJDK_TARGET_OS" = "xlinux"; then
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
AC_MSG_RESULT([no, $OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU])
|
|
AVAILABLE=false
|
|
fi
|
|
else
|
|
AC_MSG_RESULT([no, $OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU])
|
|
AVAILABLE=false
|
|
fi
|
|
|
|
if test "x$OPENJDK_TARGET_OS" = "xwindows"; then
|
|
AC_MSG_CHECKING([if Windows APIs required for ZGC is present])
|
|
AC_COMPILE_IFELSE(
|
|
[AC_LANG_PROGRAM([[#include <windows.h>]],
|
|
[[struct MEM_EXTENDED_PARAMETER x;]])
|
|
],
|
|
[
|
|
AC_MSG_RESULT([yes])
|
|
],
|
|
[
|
|
AC_MSG_RESULT([no, missing required APIs])
|
|
AVAILABLE=false
|
|
]
|
|
)
|
|
fi
|
|
])
|
|
])
|
|
|
|
################################################################################
|
|
# Setup JVM_FEATURES_PLATFORM_UNAVAILABLE and JVM_FEATURES_PLATFORM_FILTER
|
|
# to contain those features that are unavailable, or should be off by default,
|
|
# for this platform, regardless of JVM variant.
|
|
#
|
|
AC_DEFUN_ONCE([JVM_FEATURES_PREPARE_PLATFORM],
|
|
[
|
|
# The checks below should add unavailable features to
|
|
# JVM_FEATURES_PLATFORM_UNAVAILABLE.
|
|
|
|
JVM_FEATURES_CHECK_CDS
|
|
JVM_FEATURES_CHECK_DTRACE
|
|
JVM_FEATURES_CHECK_JVMCI
|
|
JVM_FEATURES_CHECK_SHENANDOAHGC
|
|
JVM_FEATURES_CHECK_ZGC
|
|
|
|
])
|
|
|
|
################################################################################
|
|
# Setup JVM_FEATURES_VARIANT_UNAVAILABLE and JVM_FEATURES_VARIANT_FILTER
|
|
# to contain those features that are unavailable, or should be off by default,
|
|
# for this particular JVM variant.
|
|
#
|
|
# arg 1: JVM variant
|
|
#
|
|
AC_DEFUN([JVM_FEATURES_PREPARE_VARIANT],
|
|
[
|
|
variant=$1
|
|
|
|
# Check which features are unavailable for this JVM variant.
|
|
# This means that is not possible to build these features for this variant.
|
|
if test "x$variant" = "xminimal"; then
|
|
JVM_FEATURES_VARIANT_UNAVAILABLE="cds zero"
|
|
elif test "x$variant" = "xcore"; then
|
|
JVM_FEATURES_VARIANT_UNAVAILABLE="cds minimal zero"
|
|
elif test "x$variant" = "xzero"; then
|
|
JVM_FEATURES_VARIANT_UNAVAILABLE="compiler1 compiler2 \
|
|
jvmci minimal zgc"
|
|
else
|
|
JVM_FEATURES_VARIANT_UNAVAILABLE="minimal zero"
|
|
fi
|
|
|
|
# Check which features should be off by default for this JVM variant.
|
|
if test "x$variant" = "xclient"; then
|
|
JVM_FEATURES_VARIANT_FILTER="compiler2 jvmci link-time-opt opt-size"
|
|
elif test "x$variant" = "xminimal"; then
|
|
JVM_FEATURES_VARIANT_FILTER="cds compiler2 dtrace epsilongc g1gc \
|
|
jfr jni-check jvmci jvmti management parallelgc services \
|
|
shenandoahgc vm-structs zgc"
|
|
if test "x$OPENJDK_TARGET_CPU" = xarm ; then
|
|
JVM_FEATURES_VARIANT_FILTER="$JVM_FEATURES_VARIANT_FILTER opt-size"
|
|
else
|
|
# Only arm-32 should have link-time-opt enabled as default.
|
|
JVM_FEATURES_VARIANT_FILTER="$JVM_FEATURES_VARIANT_FILTER \
|
|
link-time-opt"
|
|
fi
|
|
elif test "x$variant" = "xcore"; then
|
|
JVM_FEATURES_VARIANT_FILTER="compiler1 compiler2 jvmci \
|
|
link-time-opt opt-size"
|
|
elif test "x$variant" = "xzero"; then
|
|
JVM_FEATURES_VARIANT_FILTER="jfr link-time-opt opt-size"
|
|
else
|
|
JVM_FEATURES_VARIANT_FILTER="link-time-opt opt-size"
|
|
fi
|
|
])
|
|
|
|
################################################################################
|
|
# Calculate the actual set of active JVM features for this JVM variant. Store
|
|
# the result in JVM_FEATURES_ACTIVE.
|
|
#
|
|
# arg 1: JVM variant
|
|
#
|
|
AC_DEFUN([JVM_FEATURES_CALCULATE_ACTIVE],
|
|
[
|
|
variant=$1
|
|
|
|
# The default is set to all valid features except those unavailable or listed
|
|
# in a filter.
|
|
if test "x$variant" != xcustom; then
|
|
UTIL_GET_NON_MATCHING_VALUES(default_for_variant, $JVM_FEATURES_VALID, \
|
|
$JVM_FEATURES_PLATFORM_UNAVAILABLE $JVM_FEATURES_VARIANT_UNAVAILABLE \
|
|
$JVM_FEATURES_PLATFORM_FILTER $JVM_FEATURES_VARIANT_FILTER)
|
|
else
|
|
# Except for the 'custom' variant, where the default is to start with an
|
|
# empty set.
|
|
default_for_variant=""
|
|
fi
|
|
|
|
# Verify that explicitly enabled features are available
|
|
UTIL_GET_MATCHING_VALUES(enabled_but_unavailable, $JVM_FEATURES_ENABLED, \
|
|
$JVM_FEATURES_PLATFORM_UNAVAILABLE $JVM_FEATURES_VARIANT_UNAVAILABLE)
|
|
if test "x$enabled_but_unavailable" != x; then
|
|
AC_MSG_NOTICE([ERROR: Unavailable JVM features explicitly enabled for '$variant': '$enabled_but_unavailable'])
|
|
AC_MSG_ERROR([Cannot continue])
|
|
fi
|
|
|
|
# Notify the user if their command line options has no real effect
|
|
UTIL_GET_MATCHING_VALUES(enabled_but_default, $JVM_FEATURES_ENABLED, \
|
|
$default_for_variant)
|
|
if test "x$enabled_but_default" != x; then
|
|
AC_MSG_NOTICE([Default JVM features explicitly enabled for '$variant': '$enabled_but_default'])
|
|
fi
|
|
UTIL_GET_MATCHING_VALUES(disabled_but_unavailable, $JVM_FEATURES_DISABLED, \
|
|
$JVM_FEATURES_PLATFORM_UNAVAILABLE $JVM_FEATURES_VARIANT_UNAVAILABLE)
|
|
if test "x$disabled_but_unavailable" != x; then
|
|
AC_MSG_NOTICE([Unavailable JVM features explicitly disabled for '$variant': '$disabled_but_unavailable'])
|
|
fi
|
|
|
|
# JVM_FEATURES_ACTIVE is the set of all default features and all explicitly
|
|
# enabled features, with the explicitly disabled features filtered out.
|
|
UTIL_GET_NON_MATCHING_VALUES(JVM_FEATURES_ACTIVE, $default_for_variant \
|
|
$JVM_FEATURES_ENABLED, $JVM_FEATURES_DISABLED)
|
|
])
|
|
|
|
################################################################################
|
|
# Filter the unsupported feature combinations.
|
|
# This is called after JVM_FEATURES_ACTIVE are fully populated.
|
|
#
|
|
AC_DEFUN([JVM_FEATURES_FILTER_UNSUPPORTED],
|
|
[
|
|
# G1 late barrier expansion in C2 is not implemented for some platforms.
|
|
# Choose not to support G1 in this configuration.
|
|
if JVM_FEATURES_IS_ACTIVE(compiler2); then
|
|
if test "x$OPENJDK_TARGET_CPU" = "xx86"; then
|
|
AC_MSG_NOTICE([G1 cannot be used with C2 on this platform, disabling G1])
|
|
UTIL_GET_NON_MATCHING_VALUES(JVM_FEATURES_ACTIVE, $JVM_FEATURES_ACTIVE, "g1gc")
|
|
fi
|
|
fi
|
|
])
|
|
|
|
################################################################################
|
|
# Helper function for JVM_FEATURES_VERIFY. Check if the specified JVM
|
|
# feature is active. To be used in shell if constructs, like this:
|
|
# 'if JVM_FEATURES_IS_ACTIVE(jvmti); then'
|
|
#
|
|
# Definition kept in one line to allow inlining in if statements.
|
|
# Additional [] needed to keep m4 from mangling shell constructs.
|
|
AC_DEFUN([JVM_FEATURES_IS_ACTIVE],
|
|
[ [ [[ " $JVM_FEATURES_ACTIVE " =~ ' '$1' ' ]] ] ])
|
|
|
|
################################################################################
|
|
# Verify that the resulting set of features is consistent and legal.
|
|
#
|
|
# arg 1: JVM variant
|
|
#
|
|
AC_DEFUN([JVM_FEATURES_VERIFY],
|
|
[
|
|
variant=$1
|
|
|
|
if JVM_FEATURES_IS_ACTIVE(jvmci) && ! (JVM_FEATURES_IS_ACTIVE(compiler1) || \
|
|
JVM_FEATURES_IS_ACTIVE(compiler2)); then
|
|
AC_MSG_ERROR([Specified JVM feature 'jvmci' requires feature 'compiler2' or 'compiler1' for variant '$variant'])
|
|
fi
|
|
|
|
if JVM_FEATURES_IS_ACTIVE(jvmti) && ! JVM_FEATURES_IS_ACTIVE(services); then
|
|
AC_MSG_ERROR([Specified JVM feature 'jvmti' requires feature 'services' for variant '$variant'])
|
|
fi
|
|
|
|
# For backwards compatibility, disable a feature "globally" if one variant
|
|
# is missing the feature.
|
|
if ! JVM_FEATURES_IS_ACTIVE(cds); then
|
|
ENABLE_CDS="false"
|
|
fi
|
|
if ! JVM_FEATURES_IS_ACTIVE(jvmci); then
|
|
INCLUDE_JVMCI="false"
|
|
fi
|
|
if JVM_FEATURES_IS_ACTIVE(compiler2); then
|
|
INCLUDE_COMPILER2="true"
|
|
fi
|
|
|
|
# Verify that we have at least one gc selected (i.e., feature named "*gc").
|
|
if ! JVM_FEATURES_IS_ACTIVE(.*gc); then
|
|
AC_MSG_NOTICE([At least one gc needed for variant '$variant'.])
|
|
AC_MSG_NOTICE([Specified features: '$JVM_FEATURES_ACTIVE'])
|
|
AC_MSG_ERROR([Cannot continue])
|
|
fi
|
|
])
|
|
|
|
################################################################################
|
|
# Set up all JVM features for each enabled JVM variant. Requires that
|
|
# JVM_FEATURES_PARSE_OPTIONS has been called.
|
|
#
|
|
AC_DEFUN_ONCE([JVM_FEATURES_SETUP],
|
|
[
|
|
# Set up variant-independent factors
|
|
JVM_FEATURES_PREPARE_PLATFORM
|
|
|
|
# For backwards compatibility, tentatively enable these features "globally",
|
|
# and disable them in JVM_FEATURES_VERIFY if a variant is found that are
|
|
# missing any of them.
|
|
ENABLE_CDS="true"
|
|
INCLUDE_JVMCI="true"
|
|
INCLUDE_COMPILER2="false"
|
|
|
|
for variant in $JVM_VARIANTS; do
|
|
# Figure out if any features are unavailable, or should be filtered out
|
|
# by default, for this variant.
|
|
# Store the result in JVM_FEATURES_VARIANT_UNAVAILABLE and
|
|
# JVM_FEATURES_VARIANT_FILTER.
|
|
JVM_FEATURES_PREPARE_VARIANT($variant)
|
|
|
|
# Calculate the resulting set of enabled features for this variant.
|
|
# The result is stored in JVM_FEATURES_ACTIVE.
|
|
JVM_FEATURES_CALCULATE_ACTIVE($variant)
|
|
|
|
# Filter unsupported feature combinations from JVM_FEATURES_ACTIVE.
|
|
JVM_FEATURES_FILTER_UNSUPPORTED
|
|
|
|
# Verify consistency for JVM_FEATURES_ACTIVE.
|
|
JVM_FEATURES_VERIFY($variant)
|
|
|
|
# Keep feature list sorted and free of duplicates
|
|
UTIL_SORT_LIST(JVM_FEATURES_ACTIVE, $JVM_FEATURES_ACTIVE)
|
|
AC_MSG_CHECKING([JVM features to use for variant '$variant'])
|
|
AC_MSG_RESULT(['$JVM_FEATURES_ACTIVE'])
|
|
|
|
# Save this as e.g. JVM_FEATURES_server, using indirect variable
|
|
# referencing.
|
|
features_var_name=JVM_FEATURES_$variant
|
|
eval $features_var_name=\"$JVM_FEATURES_ACTIVE\"
|
|
done
|
|
|
|
# Unfortunately AC_SUBST does not work with non-literally named variables,
|
|
# so list all variants here.
|
|
AC_SUBST(JVM_FEATURES_server)
|
|
AC_SUBST(JVM_FEATURES_client)
|
|
AC_SUBST(JVM_FEATURES_minimal)
|
|
AC_SUBST(JVM_FEATURES_core)
|
|
AC_SUBST(JVM_FEATURES_zero)
|
|
AC_SUBST(JVM_FEATURES_custom)
|
|
|
|
AC_SUBST(INCLUDE_JVMCI)
|
|
AC_SUBST(INCLUDE_COMPILER2)
|
|
|
|
])
|