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