jdk-options.m4 revision 2024:cc16e2a24f94
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