hotspot.m4 revision 2464:1588d044d709
1234285Sdim#
2234285Sdim# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
3234285Sdim# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4234285Sdim#
5234285Sdim# This code is free software; you can redistribute it and/or modify it
6234285Sdim# under the terms of the GNU General Public License version 2 only, as
7234285Sdim# published by the Free Software Foundation.  Oracle designates this
8234285Sdim# particular file as subject to the "Classpath" exception as provided
9234285Sdim# by Oracle in the LICENSE file that accompanied this code.
10234285Sdim#
11234285Sdim# This code is distributed in the hope that it will be useful, but WITHOUT
12234285Sdim# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13234285Sdim# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14234285Sdim# version 2 for more details (a copy is included in the LICENSE file that
15234285Sdim# accompanied this code).
16234285Sdim#
17249423Sdim# You should have received a copy of the GNU General Public License version
18249423Sdim# 2 along with this work; if not, write to the Free Software Foundation,
19249423Sdim# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20249423Sdim#
21234285Sdim# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22249423Sdim# or visit www.oracle.com if you need additional information or have any
23249423Sdim# questions.
24263508Sdim#
25234285Sdim
26239462Sdim# All valid JVM features, regardless of platform
27249423SdimVALID_JVM_FEATURES="compiler1 compiler2 zero shark minimal dtrace jvmti jvmci \
28239462Sdim    graal fprof vm-structs jni-check services management all-gcs nmt cds \
29234285Sdim    static-build link-time-opt aot"
30234285Sdim
31234285Sdim# All valid JVM variants
32249423SdimVALID_JVM_VARIANTS="server client minimal core zero zeroshark custom"
33234285Sdim
34263508Sdim###############################################################################
35234285Sdim# Check if the specified JVM variant should be built. To be used in shell if
36234285Sdim# constructs, like this:
37234285Sdim# if HOTSPOT_CHECK_JVM_VARIANT(server); then
38234285Sdim#
39243830Sdim# Only valid to use after HOTSPOT_SETUP_JVM_VARIANTS has setup variants.
40243830Sdim
41243830Sdim# Definition kept in one line to allow inlining in if statements.
42243830Sdim# Additional [] needed to keep m4 from mangling shell constructs.
43243830SdimAC_DEFUN([HOTSPOT_CHECK_JVM_VARIANT],
44243830Sdim[ [ [[ " $JVM_VARIANTS " =~ " $1 " ]] ] ])
45234285Sdim
46234285Sdim###############################################################################
47234285Sdim# Check if the specified JVM features are explicitly enabled. To be used in
48234285Sdim# shell if constructs, like this:
49234285Sdim# if HOTSPOT_CHECK_JVM_FEATURE(jvmti); then
50234285Sdim#
51234285Sdim# Only valid to use after HOTSPOT_SETUP_JVM_FEATURES has setup features.
52234285Sdim
53234285Sdim# Definition kept in one line to allow inlining in if statements.
54234285Sdim# Additional [] needed to keep m4 from mangling shell constructs.
55234285SdimAC_DEFUN([HOTSPOT_CHECK_JVM_FEATURE],
56263508Sdim[ [ [[ " $JVM_FEATURES " =~ " $1 " ]] ] ])
57263508Sdim
58251662Sdim###############################################################################
59263508Sdim# Check which variants of the JVM that we want to build. Available variants are:
60263508Sdim#   server: normal interpreter, and a tiered C1/C2 compiler
61263508Sdim#   client: normal interpreter, and C1 (no C2 compiler)
62249423Sdim#   minimal: reduced form of client with optional features stripped out
63249423Sdim#   core: normal interpreter only, no compiler
64243830Sdim#   zero: C++ based interpreter only, no compiler
65249423Sdim#   zeroshark: C++ based interpreter, and a llvm-based compiler
66249423Sdim#   custom: baseline JVM with no default features
67249423Sdim#
68249423SdimAC_DEFUN_ONCE([HOTSPOT_SETUP_JVM_VARIANTS],
69249423Sdim[
70249423Sdim  AC_ARG_WITH([jvm-variants], [AS_HELP_STRING([--with-jvm-variants],
71249423Sdim      [JVM variants (separated by commas) to build (server,client,minimal,core,zero,zeroshark,custom) @<:@server@:>@])])
72249423Sdim
73249423Sdim  SETUP_HOTSPOT_TARGET_CPU_PORT
74249423Sdim
75263508Sdim  if test "x$with_jvm_variants" = x; then
76263508Sdim    with_jvm_variants="server"
77263508Sdim  fi
78263508Sdim  JVM_VARIANTS_OPT="$with_jvm_variants"
79234285Sdim
80234285Sdim  # Has the user listed more than one variant?
81234285Sdim  # Additional [] needed to keep m4 from mangling shell constructs.
82234285Sdim  if [ [[ "$JVM_VARIANTS_OPT" =~ "," ]] ]; then
83239462Sdim    BUILDING_MULTIPLE_JVM_VARIANTS=true
84239462Sdim  else
85239462Sdim    BUILDING_MULTIPLE_JVM_VARIANTS=false
86239462Sdim  fi
87239462Sdim  # Replace the commas with AND for use in the build directory name.
88239462Sdim  JVM_VARIANTS_WITH_AND=`$ECHO "$JVM_VARIANTS_OPT" | $SED -e 's/,/AND/g'`
89239462Sdim
90239462Sdim  AC_MSG_CHECKING([which variants of the JVM to build])
91239462Sdim  # JVM_VARIANTS is a space-separated list.
92234285Sdim  # Also use minimal, not minimal1 (which is kept for backwards compatibility).
93234285Sdim  JVM_VARIANTS=`$ECHO $JVM_VARIANTS_OPT | $SED -e 's/,/ /g' -e 's/minimal1/minimal/'`
94234285Sdim  AC_MSG_RESULT([$JVM_VARIANTS])
95234285Sdim
96234285Sdim  # Check that the selected variants are valid
97234285Sdim
98234285Sdim  # grep filter function inspired by a comment to http://stackoverflow.com/a/1617326
99234285Sdim  # Notice that the original variant failes on SLES 10 and 11
100234285Sdim  NEEDLE=${VALID_JVM_VARIANTS// /$'\n'}
101234285Sdim  STACK=${JVM_VARIANTS// /$'\n'}
102234285Sdim  INVALID_VARIANTS=`$GREP -Fvx "${NEEDLE}" <<< "${STACK}"`
103234285Sdim  if test "x$INVALID_VARIANTS" != x; then
104234285Sdim    AC_MSG_NOTICE([Unknown variant(s) specified: $INVALID_VARIANTS])
105234285Sdim    AC_MSG_ERROR([The available JVM variants are: $VALID_JVM_VARIANTS])
106234285Sdim  fi
107234285Sdim
108263508Sdim  # All "special" variants share the same output directory ("server")
109263508Sdim  VALID_MULTIPLE_JVM_VARIANTS="server client minimal"
110263508Sdim  NEEDLE=${VALID_MULTIPLE_JVM_VARIANTS// /$'\n'}
111234285Sdim  STACK=${JVM_VARIANTS// /$'\n'}
112234285Sdim  INVALID_MULTIPLE_VARIANTS=`$GREP -Fvx "${NEEDLE}" <<< "${STACK}"`
113234285Sdim  if  test "x$INVALID_MULTIPLE_VARIANTS" != x && test "x$BUILDING_MULTIPLE_JVM_VARIANTS" = xtrue; then
114234285Sdim    AC_MSG_ERROR([You cannot build multiple variants with anything else than $VALID_MULTIPLE_JVM_VARIANTS.])
115234285Sdim  fi
116234285Sdim
117234285Sdim  # The "main" variant is the one used by other libs to link against during the
118234285Sdim  # build.
119234285Sdim  if test "x$BUILDING_MULTIPLE_JVM_VARIANTS" = "xtrue"; then
120234285Sdim    MAIN_VARIANT_PRIO_ORDER="server client minimal"
121234285Sdim    for variant in $MAIN_VARIANT_PRIO_ORDER; do
122234285Sdim      if HOTSPOT_CHECK_JVM_VARIANT($variant); then
123234285Sdim        JVM_VARIANT_MAIN="$variant"
124234285Sdim        break
125234285Sdim      fi
126234285Sdim    done
127234285Sdim  else
128234285Sdim    JVM_VARIANT_MAIN="$JVM_VARIANTS"
129234285Sdim  fi
130234285Sdim
131234285Sdim  AC_SUBST(JVM_VARIANTS)
132234285Sdim  AC_SUBST(VALID_JVM_VARIANTS)
133234285Sdim  AC_SUBST(JVM_VARIANT_MAIN)
134234285Sdim
135234285Sdim  if HOTSPOT_CHECK_JVM_VARIANT(zero) || HOTSPOT_CHECK_JVM_VARIANT(zeroshark); then
136234285Sdim    # zero behaves as a platform and rewrites these values. This is really weird. :(
137234285Sdim    # We are guaranteed that we do not build any other variants when building zero.
138234285Sdim    HOTSPOT_TARGET_CPU=zero
139234285Sdim    HOTSPOT_TARGET_CPU_ARCH=zero
140234285Sdim  fi
141234285Sdim])
142234285Sdim
143234285Sdim###############################################################################
144234285Sdim# Check if dtrace should be enabled and has all prerequisites present.
145234285Sdim#
146234285SdimAC_DEFUN_ONCE([HOTSPOT_SETUP_DTRACE],
147234285Sdim[
148234285Sdim  # Test for dtrace dependencies
149234285Sdim  AC_ARG_ENABLE([dtrace], [AS_HELP_STRING([--enable-dtrace@<:@=yes/no/auto@:>@],
150234285Sdim      [enable dtrace. Default is auto, where dtrace is enabled if all dependencies
151234285Sdim      are present.])])
152234285Sdim
153234285Sdim  DTRACE_DEP_MISSING=false
154234285Sdim
155234285Sdim  AC_MSG_CHECKING([for dtrace tool])
156234285Sdim  if test "x$DTRACE" != "x" && test -x "$DTRACE"; then
157234285Sdim    AC_MSG_RESULT([$DTRACE])
158234285Sdim  else
159234285Sdim    AC_MSG_RESULT([not found, cannot build dtrace])
160234285Sdim    DTRACE_DEP_MISSING=true
161234285Sdim  fi
162234285Sdim
163234285Sdim  AC_CHECK_HEADERS([sys/sdt.h], [DTRACE_HEADERS_OK=yes],[DTRACE_HEADERS_OK=no])
164234285Sdim  if test "x$DTRACE_HEADERS_OK" != "xyes"; then
165263508Sdim    DTRACE_DEP_MISSING=true
166234285Sdim  fi
167239462Sdim
168239462Sdim  AC_MSG_CHECKING([if dtrace should be built])
169263508Sdim  if test "x$enable_dtrace" = "xyes"; then
170263508Sdim    if test "x$DTRACE_DEP_MISSING" = "xtrue"; then
171263508Sdim      AC_MSG_RESULT([no, missing dependencies])
172239462Sdim      HELP_MSG_MISSING_DEPENDENCY([dtrace])
173239462Sdim      AC_MSG_ERROR([Cannot enable dtrace with missing dependencies. See above. $HELP_MSG])
174239462Sdim    else
175239462Sdim      INCLUDE_DTRACE=true
176239462Sdim      AC_MSG_RESULT([yes, forced])
177239462Sdim    fi
178239462Sdim  elif test "x$enable_dtrace" = "xno"; then
179239462Sdim    INCLUDE_DTRACE=false
180263508Sdim    AC_MSG_RESULT([no, forced])
181263508Sdim  elif test "x$enable_dtrace" = "xauto" || test "x$enable_dtrace" = "x"; then
182263508Sdim    if test "x$DTRACE_DEP_MISSING" = "xtrue"; then
183263508Sdim      INCLUDE_DTRACE=false
184263508Sdim      AC_MSG_RESULT([no, missing dependencies])
185263508Sdim    else
186263508Sdim      INCLUDE_DTRACE=true
187263508Sdim      AC_MSG_RESULT([yes, dependencies present])
188239462Sdim    fi
189239462Sdim  else
190263508Sdim    AC_MSG_ERROR([Invalid value for --enable-dtrace: $enable_dtrace])
191263508Sdim  fi
192263508Sdim])
193239462Sdim
194239462Sdim################################################################################
195239462Sdim# Check if AOT should be enabled
196239462Sdim#
197239462SdimAC_DEFUN_ONCE([HOTSPOT_ENABLE_DISABLE_AOT],
198239462Sdim[
199239462Sdim  AC_ARG_ENABLE([aot], [AS_HELP_STRING([--enable-aot@<:@=yes/no/auto@:>@],
200263508Sdim      [enable ahead of time compilation feature. Default is auto, where aot is enabled if all dependencies are present.])])
201263508Sdim
202263508Sdim  if test "x$enable_aot" = "x" || test "x$enable_aot" = "xauto"; then
203263508Sdim    ENABLE_AOT="true"
204263508Sdim  elif test "x$enable_aot" = "xyes"; then
205263508Sdim    ENABLE_AOT="true"
206263508Sdim  elif test "x$enable_aot" = "xno"; then
207263508Sdim    ENABLE_AOT="false"
208263508Sdim    AC_MSG_CHECKING([if aot should be enabled])
209263508Sdim    AC_MSG_RESULT([no, forced])
210263508Sdim  else
211263508Sdim    AC_MSG_ERROR([Invalid value for --enable-aot: $enable_aot])
212263508Sdim  fi
213263508Sdim
214263508Sdim  if test "x$ENABLE_AOT" = "xtrue"; then
215263508Sdim    # Only enable AOT on linux-X64.
216263508Sdim    if test "x$OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU" = "xlinux-x86_64"; then
217263508Sdim      if test -e "$HOTSPOT_TOPDIR/src/jdk.aot"; then
218263508Sdim        if test -e "$HOTSPOT_TOPDIR/src/jdk.vm.compiler"; then
219263508Sdim          ENABLE_AOT="true"
220263508Sdim        else
221263508Sdim          ENABLE_AOT="false"
222263508Sdim          if test "x$enable_aot" = "xyes"; then
223263508Sdim            AC_MSG_ERROR([Cannot build AOT without hotspot/src/jdk.vm.compiler sources. Remove --enable-aot.])
224263508Sdim          fi
225263508Sdim        fi
226263508Sdim      else
227263508Sdim        ENABLE_AOT="false"
228234285Sdim        if test "x$enable_aot" = "xyes"; then
229234285Sdim          AC_MSG_ERROR([Cannot build AOT without hotspot/src/jdk.aot sources. Remove --enable-aot.])
230234285Sdim        fi
231234285Sdim      fi
232234285Sdim    else
233234285Sdim      ENABLE_AOT="false"
234234285Sdim      if test "x$enable_aot" = "xyes"; then
235234285Sdim        AC_MSG_ERROR([AOT is currently only supported on Linux-x86_64. Remove --enable-aot.])
236234285Sdim      fi
237234285Sdim    fi
238234285Sdim  fi
239234285Sdim
240234285Sdim  AC_SUBST(ENABLE_AOT)
241234285Sdim])
242234285Sdim
243234285Sdim###############################################################################
244234285Sdim# Set up all JVM features for each JVM variant.
245239462Sdim#
246239462SdimAC_DEFUN_ONCE([HOTSPOT_SETUP_JVM_FEATURES],
247234285Sdim[
248234285Sdim  # The user can in some cases supply additional jvm features. For the custom
249234285Sdim  # variant, this defines the entire variant.
250234285Sdim  AC_ARG_WITH([jvm-features], [AS_HELP_STRING([--with-jvm-features],
251234285Sdim      [additional JVM features to enable (separated by comma),  use '--help' to show possible values @<:@none@:>@])])
252234285Sdim  if test "x$with_jvm_features" != x; then
253234285Sdim    AC_MSG_CHECKING([additional JVM features])
254234285Sdim    JVM_FEATURES=`$ECHO $with_jvm_features | $SED -e 's/,/ /g'`
255234285Sdim    AC_MSG_RESULT([$JVM_FEATURES])
256234285Sdim  fi
257249423Sdim
258263508Sdim  # Override hotspot cpu definitions for ARM platforms
259249423Sdim  if test "x$OPENJDK_TARGET_CPU" = xarm; then
260249423Sdim    HOTSPOT_TARGET_CPU=arm_32
261239462Sdim    HOTSPOT_TARGET_CPU_DEFINE="ARM32"
262239462Sdim    JVM_LDFLAGS="$JVM_LDFLAGS -fsigned-char"
263263508Sdim    JVM_CFLAGS="$JVM_CFLAGS -DARM -fsigned-char"
264263508Sdim  elif test "x$OPENJDK_TARGET_CPU" = xaarch64 && test "x$HOTSPOT_TARGET_CPU_PORT" = xarm64; then
265263508Sdim    HOTSPOT_TARGET_CPU=arm_64
266234285Sdim    HOTSPOT_TARGET_CPU_ARCH=arm
267234285Sdim    JVM_LDFLAGS="$JVM_LDFLAGS -fsigned-char"
268239462Sdim    JVM_CFLAGS="$JVM_CFLAGS -DARM -fsigned-char"
269239462Sdim  fi
270239462Sdim
271234285Sdim  # Verify that dependencies are met for explicitly set features.
272234285Sdim  if HOTSPOT_CHECK_JVM_FEATURE(jvmti) && ! HOTSPOT_CHECK_JVM_FEATURE(services); then
273234285Sdim    AC_MSG_ERROR([Specified JVM feature 'jvmti' requires feature 'services'])
274234285Sdim  fi
275234285Sdim
276234285Sdim  if HOTSPOT_CHECK_JVM_FEATURE(management) && ! HOTSPOT_CHECK_JVM_FEATURE(nmt); then
277239462Sdim    AC_MSG_ERROR([Specified JVM feature 'management' requires feature 'nmt'])
278234285Sdim  fi
279234285Sdim
280234285Sdim  if HOTSPOT_CHECK_JVM_FEATURE(jvmci) && ! (HOTSPOT_CHECK_JVM_FEATURE(compiler1) || HOTSPOT_CHECK_JVM_FEATURE(compiler2)); then
281234285Sdim    AC_MSG_ERROR([Specified JVM feature 'jvmci' requires feature 'compiler2' or 'compiler1'])
282234285Sdim  fi
283234285Sdim
284234285Sdim  if HOTSPOT_CHECK_JVM_FEATURE(compiler2) && ! HOTSPOT_CHECK_JVM_FEATURE(all-gcs); then
285234285Sdim    AC_MSG_ERROR([Specified JVM feature 'compiler2' requires feature 'all-gcs'])
286243830Sdim  fi
287234285Sdim
288234285Sdim  if HOTSPOT_CHECK_JVM_FEATURE(vm-structs) && ! HOTSPOT_CHECK_JVM_FEATURE(all-gcs); then
289239462Sdim    AC_MSG_ERROR([Specified JVM feature 'vm-structs' requires feature 'all-gcs'])
290234285Sdim  fi
291234285Sdim
292234285Sdim  # Turn on additional features based on other parts of configure
293234285Sdim  if test "x$INCLUDE_DTRACE" = "xtrue"; then
294234285Sdim    JVM_FEATURES="$JVM_FEATURES dtrace"
295243830Sdim  else
296234285Sdim    if HOTSPOT_CHECK_JVM_FEATURE(dtrace); then
297234285Sdim      AC_MSG_ERROR([To enable dtrace, you must use --enable-dtrace])
298234285Sdim    fi
299234285Sdim  fi
300263508Sdim
301234285Sdim  if test "x$STATIC_BUILD" = "xtrue"; then
302263508Sdim    JVM_FEATURES="$JVM_FEATURES static-build"
303234285Sdim  else
304234285Sdim    if HOTSPOT_CHECK_JVM_FEATURE(static-build); then
305234285Sdim      AC_MSG_ERROR([To enable static-build, you must use --enable-static-build])
306234285Sdim    fi
307234285Sdim  fi
308263508Sdim
309234285Sdim  if ! HOTSPOT_CHECK_JVM_VARIANT(zero) && ! HOTSPOT_CHECK_JVM_VARIANT(zeroshark); then
310234285Sdim    if HOTSPOT_CHECK_JVM_FEATURE(zero); then
311234285Sdim      AC_MSG_ERROR([To enable zero/zeroshark, you must use --with-jvm-variants=zero/zeroshark])
312234285Sdim    fi
313234285Sdim  fi
314234285Sdim
315234285Sdim  if ! HOTSPOT_CHECK_JVM_VARIANT(zeroshark); then
316234285Sdim    if HOTSPOT_CHECK_JVM_FEATURE(shark); then
317239462Sdim      AC_MSG_ERROR([To enable shark, you must use --with-jvm-variants=zeroshark])
318243830Sdim    fi
319249423Sdim  fi
320249423Sdim
321234285Sdim  # Only enable jvmci on x86_64, sparcv9 and aarch64.
322234285Sdim  if test "x$OPENJDK_TARGET_CPU" = "xx86_64" || \
323263508Sdim     test "x$OPENJDK_TARGET_CPU" = "xsparcv9" || \
324263508Sdim     test "x$OPENJDK_TARGET_CPU" = "xaarch64" ; then
325234285Sdim    JVM_FEATURES_jvmci="jvmci"
326234285Sdim  else
327234285Sdim    JVM_FEATURES_jvmci=""
328234285Sdim  fi
329234285Sdim
330234285Sdim  AC_MSG_CHECKING([if jdk.vm.compiler should be built])
331234285Sdim  if HOTSPOT_CHECK_JVM_FEATURE(graal); then
332234285Sdim    AC_MSG_RESULT([yes, forced])
333234285Sdim    if test "x$JVM_FEATURES_jvmci" != "xjvmci" ; then
334234285Sdim      AC_MSG_ERROR([Specified JVM feature 'graal' requires feature 'jvmci'])
335234285Sdim    fi
336234285Sdim    INCLUDE_GRAAL="true"
337243830Sdim  else
338234285Sdim    # By default enable graal build where AOT is available
339234285Sdim    if test "x$ENABLE_AOT" = "xtrue"; then
340234285Sdim      AC_MSG_RESULT([yes])
341263508Sdim      JVM_FEATURES_graal="graal"
342249423Sdim      INCLUDE_GRAAL="true"
343249423Sdim    else
344234285Sdim      AC_MSG_RESULT([no])
345234285Sdim      JVM_FEATURES_graal=""
346234285Sdim      INCLUDE_GRAAL="false"
347234285Sdim    fi
348234285Sdim  fi
349234285Sdim
350234285Sdim  AC_SUBST(INCLUDE_GRAAL)
351243830Sdim
352243830Sdim  AC_MSG_CHECKING([if aot should be enabled])
353263508Sdim  if test "x$ENABLE_AOT" = "xtrue"; then
354243830Sdim    if test "x$enable_aot" = "xyes"; then
355243830Sdim      AC_MSG_RESULT([yes, forced])
356243830Sdim    else
357243830Sdim      AC_MSG_RESULT([yes])
358243830Sdim    fi
359234285Sdim    JVM_FEATURES_aot="aot"
360234285Sdim  else
361234285Sdim    if test "x$enable_aot" = "xno"; then
362234285Sdim      AC_MSG_RESULT([no, forced])
363234285Sdim    else
364234285Sdim      AC_MSG_RESULT([no])
365249423Sdim    fi
366249423Sdim    JVM_FEATURES_aot=""
367249423Sdim  fi
368249423Sdim
369249423Sdim  if test "x$OPENJDK_TARGET_CPU" = xarm ; then
370249423Sdim    # Default to use link time optimizations on minimal on arm
371251662Sdim    JVM_FEATURES_link_time_opt="link-time-opt"
372251662Sdim  else
373251662Sdim    JVM_FEATURES_link_time_opt=""
374251662Sdim  fi
375249423Sdim
376249423Sdim  # All variants but minimal (and custom) get these features
377249423Sdim  NON_MINIMAL_FEATURES="$NON_MINIMAL_FEATURES jvmti fprof vm-structs jni-check services management all-gcs nmt cds"
378249423Sdim
379249423Sdim  # Enable features depending on variant.
380249423Sdim  JVM_FEATURES_server="compiler1 compiler2 $NON_MINIMAL_FEATURES $JVM_FEATURES $JVM_FEATURES_jvmci $JVM_FEATURES_aot $JVM_FEATURES_graal"
381249423Sdim  JVM_FEATURES_client="compiler1 $NON_MINIMAL_FEATURES $JVM_FEATURES $JVM_FEATURES_jvmci"
382249423Sdim  JVM_FEATURES_core="$NON_MINIMAL_FEATURES $JVM_FEATURES"
383249423Sdim  JVM_FEATURES_minimal="compiler1 minimal $JVM_FEATURES $JVM_FEATURES_link_time_opt"
384249423Sdim  JVM_FEATURES_zero="zero $NON_MINIMAL_FEATURES $JVM_FEATURES"
385249423Sdim  JVM_FEATURES_zeroshark="zero shark $NON_MINIMAL_FEATURES $JVM_FEATURES"
386249423Sdim  JVM_FEATURES_custom="$JVM_FEATURES"
387249423Sdim
388234285Sdim  AC_SUBST(JVM_FEATURES_server)
389234285Sdim  AC_SUBST(JVM_FEATURES_client)
390239462Sdim  AC_SUBST(JVM_FEATURES_core)
391239462Sdim  AC_SUBST(JVM_FEATURES_minimal)
392234285Sdim  AC_SUBST(JVM_FEATURES_zero)
393234285Sdim  AC_SUBST(JVM_FEATURES_zeroshark)
394234285Sdim  AC_SUBST(JVM_FEATURES_custom)
395249423Sdim
396249423Sdim  # Used for verification of Makefiles by check-jvm-feature
397249423Sdim  AC_SUBST(VALID_JVM_FEATURES)
398249423Sdim
399249423Sdim  # We don't support --with-jvm-interpreter anymore, use zero instead.
400249423Sdim  BASIC_DEPRECATED_ARG_WITH(jvm-interpreter)
401234285Sdim])
402234285Sdim
403234285Sdim###############################################################################
404234285Sdim# Validate JVM features once all setup is complete, including custom setup.
405234285Sdim#
406234285SdimAC_DEFUN_ONCE([HOTSPOT_VALIDATE_JVM_FEATURES],
407234285Sdim[
408234285Sdim  # Keep feature lists sorted and free of duplicates
409234285Sdim  JVM_FEATURES_server="$($ECHO $($PRINTF '%s\n' $JVM_FEATURES_server | $SORT -u))"
410234285Sdim  JVM_FEATURES_client="$($ECHO $($PRINTF '%s\n' $JVM_FEATURES_client | $SORT -u))"
411234285Sdim  JVM_FEATURES_core="$($ECHO $($PRINTF '%s\n' $JVM_FEATURES_core | $SORT -u))"
412234285Sdim  JVM_FEATURES_minimal="$($ECHO $($PRINTF '%s\n' $JVM_FEATURES_minimal | $SORT -u))"
413234285Sdim  JVM_FEATURES_zero="$($ECHO $($PRINTF '%s\n' $JVM_FEATURES_zero | $SORT -u))"
414234285Sdim  JVM_FEATURES_zeroshark="$($ECHO $($PRINTF '%s\n' $JVM_FEATURES_zeroshark | $SORT -u))"
415234285Sdim  JVM_FEATURES_custom="$($ECHO $($PRINTF '%s\n' $JVM_FEATURES_custom | $SORT -u))"
416234285Sdim
417234285Sdim  # Validate features
418234285Sdim  for variant in $JVM_VARIANTS; do
419234285Sdim    AC_MSG_CHECKING([JVM features for JVM variant '$variant'])
420234285Sdim    features_var_name=JVM_FEATURES_$variant
421234285Sdim    JVM_FEATURES_TO_TEST=${!features_var_name}
422234285Sdim    AC_MSG_RESULT([$JVM_FEATURES_TO_TEST])
423234285Sdim    NEEDLE=${VALID_JVM_FEATURES// /$'\n'}
424239462Sdim    STACK=${JVM_FEATURES_TO_TEST// /$'\n'}
425239462Sdim    INVALID_FEATURES=`$GREP -Fvx "${NEEDLE}" <<< "${STACK}"`
426234285Sdim    if test "x$INVALID_FEATURES" != x; then
427234285Sdim      AC_MSG_ERROR([Invalid JVM feature(s): $INVALID_FEATURES])
428234285Sdim    fi
429249423Sdim  done
430249423Sdim])
431249423Sdim
432249423Sdim################################################################################
433249423Sdim#
434249423Sdim# Specify which sources will be used to build the 64-bit ARM port
435234285Sdim#
436234285Sdim# --with-cpu-port=arm64   will use hotspot/src/cpu/arm
437234285Sdim# --with-cpu-port=aarch64 will use hotspot/src/cpu/aarch64
438234285Sdim#
439234285SdimAC_DEFUN([SETUP_HOTSPOT_TARGET_CPU_PORT],
440234285Sdim[
441234285Sdim  AC_ARG_WITH(cpu-port, [AS_HELP_STRING([--with-cpu-port],
442234285Sdim      [specify sources to use for Hotspot 64-bit ARM port (arm64,aarch64) @<:@aarch64@:>@ ])])
443234285Sdim
444234285Sdim  if test "x$with_cpu_port" != x; then
445234285Sdim    if test "x$OPENJDK_TARGET_CPU" != xaarch64; then
446234285Sdim      AC_MSG_ERROR([--with-cpu-port only available on aarch64])
447234285Sdim    fi
448234285Sdim    if test "x$with_cpu_port" != xarm64 && \
449234285Sdim        test "x$with_cpu_port" != xaarch64; then
450234285Sdim      AC_MSG_ERROR([--with-cpu-port must specify arm64 or aarch64])
451234285Sdim    fi
452234285Sdim    HOTSPOT_TARGET_CPU_PORT="$with_cpu_port"
453234285Sdim  fi
454234285Sdim])
455234285Sdim
456251662Sdim
457251662Sdim################################################################################
458234285Sdim# Check if gtest should be built
459234285Sdim#
460239462SdimAC_DEFUN_ONCE([HOTSPOT_ENABLE_DISABLE_GTEST],
461234285Sdim[
462239462Sdim  AC_ARG_ENABLE([hotspot-gtest], [AS_HELP_STRING([--disable-hotspot-gtest],
463239462Sdim      [Disables building of the Hotspot unit tests])])
464239462Sdim
465234285Sdim  if test -e "$HOTSPOT_TOPDIR/test/native"; then
466239462Sdim    GTEST_DIR_EXISTS="true"
467239462Sdim  else
468243830Sdim    GTEST_DIR_EXISTS="false"
469239462Sdim  fi
470239462Sdim
471234285Sdim  AC_MSG_CHECKING([if Hotspot gtest unit tests should be built])
472234285Sdim  if test "x$enable_hotspot_gtest" = "xyes"; then
473234285Sdim    if test "x$GTEST_DIR_EXISTS" = "xtrue"; then
474234285Sdim      AC_MSG_RESULT([yes, forced])
475234285Sdim      BUILD_GTEST="true"
476234285Sdim    else
477234285Sdim      AC_MSG_ERROR([Cannot build gtest without the test source])
478234285Sdim    fi
479234285Sdim  elif test "x$enable_hotspot_gtest" = "xno"; then
480234285Sdim    AC_MSG_RESULT([no, forced])
481234285Sdim    BUILD_GTEST="false"
482234285Sdim  elif test "x$enable_hotspot_gtest" = "x"; then
483234285Sdim    if test "x$GTEST_DIR_EXISTS" = "xtrue"; then
484234285Sdim      AC_MSG_RESULT([yes])
485234285Sdim      BUILD_GTEST="true"
486239462Sdim    else
487239462Sdim      AC_MSG_RESULT([no])
488239462Sdim      BUILD_GTEST="false"
489239462Sdim    fi
490239462Sdim  else
491239462Sdim    AC_MSG_ERROR([--enable-gtest must be either yes or no])
492239462Sdim  fi
493263508Sdim
494239462Sdim  AC_SUBST(BUILD_GTEST)
495263508Sdim])
496239462Sdim