1 #
   2 # Copyright (c) 2011, 2015, 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 interpreter of the JVM we want to build.
  28 # Currently we have:
  29 #    template: Template interpreter (the default)
  30 #    cpp     : C++ interpreter
  31 AC_DEFUN_ONCE([HOTSPOT_SETUP_JVM_INTERPRETER],
  32 [
  33   AC_ARG_WITH([jvm-interpreter], [AS_HELP_STRING([--with-jvm-interpreter],
  34     [JVM interpreter to build (template, cpp) @<:@template@:>@])])
  35 
  36   AC_MSG_CHECKING([which interpreter of the JVM to build])
  37   if test "x$with_jvm_interpreter" = x; then
  38     JVM_INTERPRETER="template"
  39   else
  40     JVM_INTERPRETER="$with_jvm_interpreter"
  41   fi
  42   AC_MSG_RESULT([$JVM_INTERPRETER])
  43 
  44   if test "x$JVM_INTERPRETER" != xtemplate && test "x$JVM_INTERPRETER" != xcpp; then
  45     AC_MSG_ERROR([The available JVM interpreters are: template, cpp])
  46   fi
  47 
  48   AC_SUBST(JVM_INTERPRETER)
  49 ])
  50 
  51 ###############################################################################
  52 # Check which variants of the JVM that we want to build.
  53 # Currently we have:
  54 #    server: normal interpreter and a C2 or tiered C1/C2 compiler
  55 #    client: normal interpreter and C1 (no C2 compiler) (only 32-bit platforms)
  56 #    minimal1: reduced form of client with optional VM services and features stripped out
  57 #    zero: no machine code interpreter, no compiler
  58 #    zeroshark: zero interpreter and shark/llvm compiler backend
  59 #    core: interpreter only, no compiler (only works on some platforms)
  60 AC_DEFUN_ONCE([HOTSPOT_SETUP_JVM_VARIANTS],
  61 [
  62   AC_MSG_CHECKING([which variants of the JVM to build])
  63   AC_ARG_WITH([jvm-variants], [AS_HELP_STRING([--with-jvm-variants],
  64       [JVM variants (separated by commas) to build (server, client, minimal1, zero, zeroshark, core) @<:@server@:>@])])
  65 
  66   if test "x$with_jvm_variants" = x; then
  67     with_jvm_variants="server"
  68   fi
  69 
  70   JVM_VARIANTS=",$with_jvm_variants,"
  71   TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//'  -e 's/minimal1,//' -e 's/zero,//' -e 's/zeroshark,//' -e 's/core,//'`
  72 
  73   if test "x$TEST_VARIANTS" != "x,"; then
  74     AC_MSG_ERROR([The available JVM variants are: server, client, minimal1, zero, zeroshark, core])
  75   fi
  76   AC_MSG_RESULT([$with_jvm_variants])
  77 
  78   JVM_VARIANT_SERVER=`$ECHO "$JVM_VARIANTS" | $SED -e '/,server,/!s/.*/false/g' -e '/,server,/s/.*/true/g'`
  79   JVM_VARIANT_CLIENT=`$ECHO "$JVM_VARIANTS" | $SED -e '/,client,/!s/.*/false/g' -e '/,client,/s/.*/true/g'`
  80   JVM_VARIANT_MINIMAL1=`$ECHO "$JVM_VARIANTS" | $SED -e '/,minimal1,/!s/.*/false/g' -e '/,minimal1,/s/.*/true/g'`
  81   JVM_VARIANT_ZERO=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zero,/!s/.*/false/g' -e '/,zero,/s/.*/true/g'`
  82   JVM_VARIANT_ZEROSHARK=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zeroshark,/!s/.*/false/g' -e '/,zeroshark,/s/.*/true/g'`
  83   JVM_VARIANT_CORE=`$ECHO "$JVM_VARIANTS" | $SED -e '/,core,/!s/.*/false/g' -e '/,core,/s/.*/true/g'`
  84 
  85   if test "x$JVM_VARIANT_CLIENT" = xtrue; then
  86     if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
  87       AC_MSG_ERROR([You cannot build a client JVM for a 64-bit machine.])
  88     fi
  89   fi
  90   if test "x$JVM_VARIANT_MINIMAL1" = xtrue; then
  91     if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
  92       AC_MSG_ERROR([You cannot build a minimal JVM for a 64-bit machine.])
  93     fi
  94   fi
  95 
  96   # Replace the commas with AND for use in the build directory name.
  97   ANDED_JVM_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/^,//' -e 's/,$//' -e 's/,/AND/g'`
  98   COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/minimal1,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/' -e 's/core,/1/'`
  99   if test "x$COUNT_VARIANTS" != "x,1"; then
 100     BUILDING_MULTIPLE_JVM_VARIANTS=yes
 101   else
 102     BUILDING_MULTIPLE_JVM_VARIANTS=no
 103   fi
 104 
 105   if test "x$JVM_VARIANT_ZERO" = xtrue && test "x$BUILDING_MULTIPLE_JVM_VARIANTS" = xyes; then
 106     AC_MSG_ERROR([You cannot build multiple variants with zero.])
 107   fi
 108 
 109   AC_SUBST(JVM_VARIANTS)
 110   AC_SUBST(JVM_VARIANT_SERVER)
 111   AC_SUBST(JVM_VARIANT_CLIENT)
 112   AC_SUBST(JVM_VARIANT_MINIMAL1)
 113   AC_SUBST(JVM_VARIANT_ZERO)
 114   AC_SUBST(JVM_VARIANT_ZEROSHARK)
 115   AC_SUBST(JVM_VARIANT_CORE)
 116 
 117   INCLUDE_SA=true
 118   if test "x$JVM_VARIANT_ZERO" = xtrue ; then
 119     INCLUDE_SA=false
 120   fi
 121   if test "x$JVM_VARIANT_ZEROSHARK" = xtrue ; then
 122     INCLUDE_SA=false
 123   fi
 124   if test "x$OPENJDK_TARGET_OS" = xaix ; then
 125     INCLUDE_SA=false
 126   fi
 127   if test "x$OPENJDK_TARGET_CPU" = xaarch64; then
 128     INCLUDE_SA=false
 129   fi
 130   AC_SUBST(INCLUDE_SA)
 131 
 132   if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
 133     MACOSX_UNIVERSAL="true"
 134   fi
 135 
 136   AC_SUBST(MACOSX_UNIVERSAL)
 137 ])
 138 
 139 
 140 ###############################################################################
 141 # Setup legacy vars/targets and new vars to deal with different debug levels.
 142 #
 143 #    release: no debug information, all optimizations, no asserts.
 144 #    optimized: no debug information, all optimizations, no asserts, HotSpot target is 'optimized'.
 145 #    fastdebug: debug information (-g), all optimizations, all asserts
 146 #    slowdebug: debug information (-g), no optimizations, all asserts
 147 #
 148 AC_DEFUN_ONCE([HOTSPOT_SETUP_DEBUG_LEVEL],
 149 [
 150   case $DEBUG_LEVEL in
 151     release )
 152       VARIANT="OPT"
 153       FASTDEBUG="false"
 154       DEBUG_CLASSFILES="false"
 155       BUILD_VARIANT_RELEASE=""
 156       HOTSPOT_DEBUG_LEVEL="product"
 157       HOTSPOT_EXPORT="product"
 158       ;;
 159     fastdebug )
 160       VARIANT="DBG"
 161       FASTDEBUG="true"
 162       DEBUG_CLASSFILES="true"
 163       BUILD_VARIANT_RELEASE="-fastdebug"
 164       HOTSPOT_DEBUG_LEVEL="fastdebug"
 165       HOTSPOT_EXPORT="fastdebug"
 166       ;;
 167     slowdebug )
 168       VARIANT="DBG"
 169       FASTDEBUG="false"
 170       DEBUG_CLASSFILES="true"
 171       BUILD_VARIANT_RELEASE="-debug"
 172       HOTSPOT_DEBUG_LEVEL="debug"
 173       HOTSPOT_EXPORT="debug"
 174       ;;
 175     optimized )
 176       VARIANT="OPT"
 177       FASTDEBUG="false"
 178       DEBUG_CLASSFILES="false"
 179       BUILD_VARIANT_RELEASE="-optimized"
 180       HOTSPOT_DEBUG_LEVEL="optimized"
 181       HOTSPOT_EXPORT="optimized"
 182       ;;
 183   esac
 184 
 185   # The debug level 'optimized' is a little special because it is currently only
 186   # applicable to the HotSpot build where it means to build a completely
 187   # optimized version of the VM without any debugging code (like for the
 188   # 'release' debug level which is called 'product' in the HotSpot build) but
 189   # with the exception that it can contain additional code which is otherwise
 190   # protected by '#ifndef PRODUCT' macros. These 'optimized' builds are used to
 191   # test new and/or experimental features which are not intended for customer
 192   # shipment. Because these new features need to be tested and benchmarked in
 193   # real world scenarios, we want to build the containing JDK at the 'release'
 194   # debug level.
 195   if test "x$DEBUG_LEVEL" = xoptimized; then
 196     DEBUG_LEVEL="release"
 197   fi
 198 
 199   #####
 200   # Generate the legacy makefile targets for hotspot.
 201   # The hotspot api for selecting the build artifacts, really, needs to be improved.
 202   # JDK-7195896 will fix this on the hotspot side by using the JVM_VARIANT_* variables to
 203   # determine what needs to be built. All we will need to set here is all_product, all_fastdebug etc
 204   # But until then ...
 205   HOTSPOT_TARGET=""
 206 
 207   if test "x$JVM_VARIANT_SERVER" = xtrue; then
 208     HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL} "
 209   fi
 210 
 211   if test "x$JVM_VARIANT_CLIENT" = xtrue; then
 212     HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}1 "
 213   fi
 214 
 215   if test "x$JVM_VARIANT_MINIMAL1" = xtrue; then
 216     HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}minimal1 "
 217   fi
 218 
 219   if test "x$JVM_VARIANT_ZERO" = xtrue; then
 220     HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}zero "
 221   fi
 222 
 223   if test "x$JVM_VARIANT_ZEROSHARK" = xtrue; then
 224     HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}shark "
 225   fi
 226 
 227   if test "x$JVM_VARIANT_CORE" = xtrue; then
 228     HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}core "
 229   fi
 230 
 231   HOTSPOT_TARGET="$HOTSPOT_TARGET docs export_$HOTSPOT_EXPORT"
 232 
 233   # On Macosx universal binaries are produced, but they only contain
 234   # 64 bit intel. This invalidates control of which jvms are built
 235   # from configure, but only server is valid anyway. Fix this
 236   # when hotspot makefiles are rewritten.
 237   if test "x$MACOSX_UNIVERSAL" = xtrue; then
 238     HOTSPOT_TARGET=universal_${HOTSPOT_EXPORT}
 239   fi
 240 
 241   #####
 242 
 243   AC_SUBST(DEBUG_LEVEL)
 244   AC_SUBST(VARIANT)
 245   AC_SUBST(FASTDEBUG)
 246   AC_SUBST(DEBUG_CLASSFILES)
 247   AC_SUBST(BUILD_VARIANT_RELEASE)
 248 ])
 249 
 250 AC_DEFUN_ONCE([HOTSPOT_SETUP_HOTSPOT_OPTIONS],
 251 [
 252   # Control wether Hotspot runs Queens test after build.
 253   AC_ARG_ENABLE([hotspot-test-in-build], [AS_HELP_STRING([--enable-hotspot-test-in-build],
 254       [run the Queens test after Hotspot build @<:@disabled@:>@])],,
 255       [enable_hotspot_test_in_build=no])
 256   if test "x$enable_hotspot_test_in_build" = "xyes"; then
 257     TEST_IN_BUILD=true
 258   else
 259     TEST_IN_BUILD=false
 260   fi
 261   AC_SUBST(TEST_IN_BUILD)
 262 ])
 263 
 264 AC_DEFUN_ONCE([HOTSPOT_SETUP_BUILD_TWEAKS],
 265 [
 266   HOTSPOT_MAKE_ARGS="$HOTSPOT_TARGET"
 267   AC_SUBST(HOTSPOT_MAKE_ARGS)
 268 ])