# HG changeset patch # User duke # Date 1499278744 -7200 # Node ID bf5b664754ef68989fa0fb2e9f17a427a2842041 # Parent 5fb7181195162cc1549b47a2e55d8480c03d6a20# Parent 5d0c07a90e8248a42b1dfa1b3af8f251d5575983 Merge diff -r 5fb718119516 -r bf5b664754ef .hgtags-top-repo --- a/.hgtags-top-repo Thu Feb 12 16:39:35 2015 -0800 +++ b/.hgtags-top-repo Wed Jul 05 20:19:04 2017 +0200 @@ -292,3 +292,4 @@ b6cca3e6175a69f39e5799b7349ddb0176630291 jdk9-b47 0064e246d83f6f9fc245c19b6d05041ecaf4b6d4 jdk9-b48 d91ed1951b948210590ce1394bea5515357246ba jdk9-b49 +d1f37d39ff2421f956a6ddf316cf763807bc3363 jdk9-b50 diff -r 5fb718119516 -r bf5b664754ef README-builds.html --- a/README-builds.html Thu Feb 12 16:39:35 2015 -0800 +++ b/README-builds.html Wed Jul 05 20:19:04 2017 +0200 @@ -1463,14 +1463,13 @@

Building with ccache

-

A simple way to radically speed up compilation of native code - (typically hotspot and native libraries in JDK) is to install - ccache. This will cache and reuse prior compilation results, if the - source code is unchanged. However, ccache versions prior to 3.1.4 - does not work correctly with the precompiled headers used in - OpenJDK. So if your platform supports ccache at 3.1.4 or later, we - highly recommend installing it. This is currently only supported on - linux.

+

The OpenJDK build supports building with ccache + when using gcc or clang. Using ccache can + radically speed up compilation of native code if + you often rebuild the same sources. Your milage + may vary however so we recommend evaluating it for + yourself. To enable it, make sure it's on the path + and configure with --enable-ccache.

Building on local disk

diff -r 5fb718119516 -r bf5b664754ef common/autoconf/basics.m4 --- a/common/autoconf/basics.m4 Thu Feb 12 16:39:35 2015 -0800 +++ b/common/autoconf/basics.m4 Wed Jul 05 20:19:04 2017 +0200 @@ -242,6 +242,9 @@ [ # Save the original command line. This is passed to us by the wrapper configure script. AC_SUBST(CONFIGURE_COMMAND_LINE) + # Save the path variable before it gets changed + ORIGINAL_PATH="$PATH" + AC_SUBST(ORIGINAL_PATH) DATE_WHEN_CONFIGURED=`LANG=C date` AC_SUBST(DATE_WHEN_CONFIGURED) AC_MSG_NOTICE([Configuration created at $DATE_WHEN_CONFIGURED.]) diff -r 5fb718119516 -r bf5b664754ef common/autoconf/build-performance.m4 --- a/common/autoconf/build-performance.m4 Thu Feb 12 16:39:35 2015 -0800 +++ b/common/autoconf/build-performance.m4 Wed Jul 05 20:19:04 2017 +0200 @@ -164,19 +164,26 @@ [enable using ccache to speed up recompilations @<:@disabled@:>@])]) CCACHE= + CCACHE_STATUS= AC_MSG_CHECKING([is ccache enabled]) - ENABLE_CCACHE=$enable_ccache if test "x$enable_ccache" = xyes; then - AC_MSG_RESULT([yes]) - OLD_PATH="$PATH" - if test "x$TOOLCHAIN_PATH" != x; then - PATH=$TOOLCHAIN_PATH:$PATH + if test "x$TOOLCHAIN_TYPE" = "xgcc" -o "x$TOOLCHAIN_TYPE" = "xclang"; then + AC_MSG_RESULT([yes]) + OLD_PATH="$PATH" + if test "x$TOOLCHAIN_PATH" != x; then + PATH=$TOOLCHAIN_PATH:$PATH + fi + BASIC_REQUIRE_PROGS(CCACHE, ccache) + PATH="$OLD_PATH" + CCACHE_VERSION=[`$CCACHE --version | head -n1 | $SED 's/[A-Za-z ]*//'`] + CCACHE_STATUS="Active ($CCACHE_VERSION)" + else + AC_MSG_RESULT([no]) + AC_MSG_WARN([ccache is not supported with toolchain type $TOOLCHAIN_TYPE]) fi - BASIC_REQUIRE_PROGS(CCACHE, ccache) - CCACHE_STATUS="enabled" - PATH="$OLD_PATH" elif test "x$enable_ccache" = xno; then AC_MSG_RESULT([no, explicitly disabled]) + CCACHE_STATUS="Disabled" elif test "x$enable_ccache" = x; then AC_MSG_RESULT([no]) else @@ -206,35 +213,31 @@ AC_DEFUN([BPERF_SETUP_CCACHE_USAGE], [ if test "x$CCACHE" != x; then - # Only use ccache if it is 3.1.4 or later, which supports - # precompiled headers. - AC_MSG_CHECKING([if ccache supports precompiled headers]) - HAS_GOOD_CCACHE=`($CCACHE --version | head -n 1 | grep -E 3.1.@<:@456789@:>@) 2> /dev/null` - if test "x$HAS_GOOD_CCACHE" = x; then - AC_MSG_RESULT([no, disabling ccache]) - CCACHE= - CCACHE_STATUS="disabled" - else - AC_MSG_RESULT([yes]) + if test "x$USE_PRECOMPILED_HEADER" = "x1"; then + HAS_BAD_CCACHE=[`$ECHO $CCACHE_VERSION | \ + $GREP -e '^1.*' -e '^2.*' -e '^3\.0.*' -e '^3\.1\.[0123]'`] + if test "x$HAS_BAD_CCACHE" != "x"; then + AC_MSG_ERROR([Precompiled headers requires ccache 3.1.4 or later, found $CCACHE_VERSION]) + fi AC_MSG_CHECKING([if C-compiler supports ccache precompiled headers]) + CCACHE_PRECOMP_FLAG="-fpch-preprocess" PUSHED_FLAGS="$CXXFLAGS" - CXXFLAGS="-fpch-preprocess $CXXFLAGS" + CXXFLAGS="$CCACHE_PRECOMP_FLAG $CXXFLAGS" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [CC_KNOWS_CCACHE_TRICK=yes], [CC_KNOWS_CCACHE_TRICK=no]) CXXFLAGS="$PUSHED_FLAGS" if test "x$CC_KNOWS_CCACHE_TRICK" = xyes; then AC_MSG_RESULT([yes]) + CFLAGS_CCACHE="$CCACHE_PRECOMP_FLAG" + AC_SUBST(CFLAGS_CCACHE) + CCACHE_SLOPPINESS=pch_defines,time_macros else - AC_MSG_RESULT([no, disabling ccaching of precompiled headers]) - CCACHE= - CCACHE_STATUS="disabled" + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Cannot use ccache with precompiled headers without compiler support for $CCACHE_PRECOMP_FLAG]) fi fi - fi - if test "x$CCACHE" != x; then - CCACHE_SLOPPINESS=time_macros - CCACHE="CCACHE_COMPRESS=1 $SET_CCACHE_DIR CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS $CCACHE" - CCACHE_FLAGS=-fpch-preprocess + CCACHE="CCACHE_COMPRESS=1 $SET_CCACHE_DIR \ + CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS CCACHE_BASEDIR=$TOPDIR $CCACHE" if test "x$SET_CCACHE_DIR" != x; then mkdir -p $CCACHE_DIR > /dev/null 2>&1 diff -r 5fb718119516 -r bf5b664754ef common/autoconf/configure --- a/common/autoconf/configure Thu Feb 12 16:39:35 2015 -0800 +++ b/common/autoconf/configure Wed Jul 05 20:19:04 2017 +0200 @@ -40,8 +40,9 @@ echo "Error: This script must be run using bash." 1>&2 exit 1 fi -# Force autoconf to use bash +# Force autoconf to use bash. This also means we must disable autoconf re-exec. export CONFIG_SHELL=$BASH +export _as_can_reexec=no conf_script_dir="$TOPDIR/common/autoconf" diff -r 5fb718119516 -r bf5b664754ef common/autoconf/generated-configure.sh --- a/common/autoconf/generated-configure.sh Thu Feb 12 16:39:35 2015 -0800 +++ b/common/autoconf/generated-configure.sh Wed Jul 05 20:19:04 2017 +0200 @@ -629,6 +629,7 @@ ac_subst_vars='LTLIBOBJS LIBOBJS +CFLAGS_CCACHE CCACHE USE_PRECOMPILED_HEADER SJAVAC_SERVER_DIR @@ -991,6 +992,7 @@ BASH BASENAME DATE_WHEN_CONFIGURED +ORIGINAL_PATH CONFIGURE_COMMAND_LINE target_alias host_alias @@ -4333,7 +4335,7 @@ #CUSTOM_AUTOCONF_INCLUDE # Do not change or remove the following line, it is needed for consistency checks: -DATE_WHEN_GENERATED=1421247827 +DATE_WHEN_GENERATED=1423567509 ############################################################################### # @@ -4366,6 +4368,9 @@ # Save the original command line. This is passed to us by the wrapper configure script. + # Save the path variable before it gets changed + ORIGINAL_PATH="$PATH" + DATE_WHEN_CONFIGURED=`LANG=C date` { $as_echo "$as_me:${as_lineno-$LINENO}: Configuration created at $DATE_WHEN_CONFIGURED." >&5 @@ -27438,8 +27443,8 @@ # The trailing space for everyone except PATH is no typo, but is needed due # to trailing \ in the Windows paths. These will be stripped later. $ECHO "$WINPATH_BASH -c 'echo VS_PATH="'\"$PATH\" > set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE - $ECHO "$WINPATH_BASH -c 'echo VS_INCLUDE="'\"$INCLUDE \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE - $ECHO "$WINPATH_BASH -c 'echo VS_LIB="'\"$LIB \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE + $ECHO "$WINPATH_BASH -c 'echo VS_INCLUDE="'\"$INCLUDE\;$include \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE + $ECHO "$WINPATH_BASH -c 'echo VS_LIB="'\"$LIB\;$lib \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE $ECHO "$WINPATH_BASH -c 'echo VCINSTALLDIR="'\"$VCINSTALLDIR \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE $ECHO "$WINPATH_BASH -c 'echo WindowsSdkDir="'\"$WindowsSdkDir \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE $ECHO "$WINPATH_BASH -c 'echo WINDOWSSDKDIR="'\"$WINDOWSSDKDIR \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE @@ -27486,9 +27491,9 @@ else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } - # Remove any trailing "\" and " " from the variables. - VS_INCLUDE=`$ECHO "$VS_INCLUDE" | $SED 's/\\\\* *$//'` - VS_LIB=`$ECHO "$VS_LIB" | $SED 's/\\\\* *$//'` + # Remove any trailing "\" ";" and " " from the variables. + VS_INCLUDE=`$ECHO "$VS_INCLUDE" | $SED -e 's/\\\\*;* *$//'` + VS_LIB=`$ECHO "$VS_LIB" | $SED 's/\\\\*;* *$//'` VCINSTALLDIR=`$ECHO "$VCINSTALLDIR" | $SED 's/\\\\* *$//'` WindowsSDKDir=`$ECHO "$WindowsSDKDir" | $SED 's/\\\\* *$//'` WINDOWSSDKDIR=`$ECHO "$WINDOWSSDKDIR" | $SED 's/\\\\* *$//'` @@ -27499,6 +27504,268 @@ + + # Convert VS_INCLUDE into SYSROOT_CFLAGS + OLDIFS="$IFS" + IFS=";" + for i in $VS_INCLUDE; do + ipath=$i + IFS="$OLDIFS" + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$ipath" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of ipath, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of ipath, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of ipath" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + ipath="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting ipath to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting ipath to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$ipath" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + ipath="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting ipath to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting ipath to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a unix platform. Hooray! :) + path="$ipath" + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of ipath, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of ipath, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + + # Use eval to expand a potential ~ + eval path="$path" + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of ipath, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + ipath="`cd "$path"; $THEPWDCMD -L`" + fi + + IFS=";" + SYSROOT_CFLAGS="$SYSROOT_CFLAGS -I$ipath" + done + # Convert VS_LIB into SYSROOT_LDFLAGS + for i in $VS_LIB; do + libpath=$i + IFS="$OLDIFS" + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$libpath" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of libpath, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of libpath, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of libpath" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + libpath="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting libpath to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting libpath to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$libpath" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + libpath="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting libpath to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting libpath to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a unix platform. Hooray! :) + path="$libpath" + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of libpath, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of libpath, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + + # Use eval to expand a potential ~ + eval path="$path" + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of libpath, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + libpath="`cd "$path"; $THEPWDCMD -L`" + fi + + IFS=";" + SYSROOT_LDFLAGS="$SYSROOT_LDFLAGS -libpath:$libpath" + done + IFS="$OLDIFS" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 @@ -50616,16 +50883,17 @@ CCACHE= + CCACHE_STATUS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking is ccache enabled" >&5 $as_echo_n "checking is ccache enabled... " >&6; } - ENABLE_CCACHE=$enable_ccache if test "x$enable_ccache" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 + if test "x$TOOLCHAIN_TYPE" = "xgcc" -o "x$TOOLCHAIN_TYPE" = "xclang"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } - OLD_PATH="$PATH" - if test "x$TOOLCHAIN_PATH" != x; then - PATH=$TOOLCHAIN_PATH:$PATH - fi + OLD_PATH="$PATH" + if test "x$TOOLCHAIN_PATH" != x; then + PATH=$TOOLCHAIN_PATH:$PATH + fi @@ -50819,11 +51087,19 @@ fi - CCACHE_STATUS="enabled" - PATH="$OLD_PATH" + PATH="$OLD_PATH" + CCACHE_VERSION=`$CCACHE --version | head -n1 | $SED 's/[A-Za-z ]*//'` + CCACHE_STATUS="Active ($CCACHE_VERSION)" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ccache is not supported with toolchain type $TOOLCHAIN_TYPE" >&5 +$as_echo "$as_me: WARNING: ccache is not supported with toolchain type $TOOLCHAIN_TYPE" >&2;} + fi elif test "x$enable_ccache" = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, explicitly disabled" >&5 $as_echo "no, explicitly disabled" >&6; } + CCACHE_STATUS="Disabled" elif test "x$enable_ccache" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -50854,23 +51130,17 @@ if test "x$CCACHE" != x; then if test "x$CCACHE" != x; then - # Only use ccache if it is 3.1.4 or later, which supports - # precompiled headers. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ccache supports precompiled headers" >&5 -$as_echo_n "checking if ccache supports precompiled headers... " >&6; } - HAS_GOOD_CCACHE=`($CCACHE --version | head -n 1 | grep -E 3.1.[456789]) 2> /dev/null` - if test "x$HAS_GOOD_CCACHE" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, disabling ccache" >&5 -$as_echo "no, disabling ccache" >&6; } - CCACHE= - CCACHE_STATUS="disabled" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + if test "x$USE_PRECOMPILED_HEADER" = "x1"; then + HAS_BAD_CCACHE=`$ECHO $CCACHE_VERSION | \ + $GREP -e '^1.*' -e '^2.*' -e '^3\.0.*' -e '^3\.1\.[0123]'` + if test "x$HAS_BAD_CCACHE" != "x"; then + as_fn_error $? "Precompiled headers requires ccache 3.1.4 or later, found $CCACHE_VERSION" "$LINENO" 5 + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if C-compiler supports ccache precompiled headers" >&5 $as_echo_n "checking if C-compiler supports ccache precompiled headers... " >&6; } + CCACHE_PRECOMP_FLAG="-fpch-preprocess" PUSHED_FLAGS="$CXXFLAGS" - CXXFLAGS="-fpch-preprocess $CXXFLAGS" + CXXFLAGS="$CCACHE_PRECOMP_FLAG $CXXFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -50892,19 +51162,18 @@ if test "x$CC_KNOWS_CCACHE_TRICK" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, disabling ccaching of precompiled headers" >&5 -$as_echo "no, disabling ccaching of precompiled headers" >&6; } - CCACHE= - CCACHE_STATUS="disabled" - fi - fi - fi - - if test "x$CCACHE" != x; then - CCACHE_SLOPPINESS=time_macros - CCACHE="CCACHE_COMPRESS=1 $SET_CCACHE_DIR CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS $CCACHE" - CCACHE_FLAGS=-fpch-preprocess + CFLAGS_CCACHE="$CCACHE_PRECOMP_FLAG" + + CCACHE_SLOPPINESS=pch_defines,time_macros + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "Cannot use ccache with precompiled headers without compiler support for $CCACHE_PRECOMP_FLAG" "$LINENO" 5 + fi + fi + + CCACHE="CCACHE_COMPRESS=1 $SET_CCACHE_DIR \ + CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS CCACHE_BASEDIR=$TOPDIR $CCACHE" if test "x$SET_CCACHE_DIR" != x; then mkdir -p $CCACHE_DIR > /dev/null 2>&1 diff -r 5fb718119516 -r bf5b664754ef common/autoconf/hotspot-spec.gmk.in --- a/common/autoconf/hotspot-spec.gmk.in Thu Feb 12 16:39:35 2015 -0800 +++ b/common/autoconf/hotspot-spec.gmk.in Wed Jul 05 20:19:04 2017 +0200 @@ -109,8 +109,8 @@ MT:=@HOTSPOT_MT@ RC:=@HOTSPOT_RC@ -EXTRA_CFLAGS=@LEGACY_EXTRA_CFLAGS@ -EXTRA_CXXFLAGS=@LEGACY_EXTRA_CXXFLAGS@ +EXTRA_CFLAGS=@LEGACY_EXTRA_CFLAGS@ $(CFLAGS_CCACHE) +EXTRA_CXXFLAGS=@LEGACY_EXTRA_CXXFLAGS@ $(CFLAGS_CCACHE) EXTRA_LDFLAGS=@LEGACY_EXTRA_LDFLAGS@ USE_PRECOMPILED_HEADER=@USE_PRECOMPILED_HEADER@ @@ -132,6 +132,13 @@ ZIP_DEBUGINFO_FILES:=0 endif +ifeq ($(OPENJDK_TARGET_OS), windows) + # On Windows, the Visual Studio toolchain needs the LIB and INCLUDE + # environment variables (in Windows path style). + export INCLUDE:=@VS_INCLUDE@ + export LIB:=@VS_LIB@ +endif + # Sneak this in via the spec.gmk file, since we don't want to mess around too much with the Hotspot make files. # This is needed to get the LOG setting to work properly. include $(SRC_ROOT)/make/common/MakeBase.gmk diff -r 5fb718119516 -r bf5b664754ef common/autoconf/spec.gmk.in --- a/common/autoconf/spec.gmk.in Thu Feb 12 16:39:35 2015 -0800 +++ b/common/autoconf/spec.gmk.in Wed Jul 05 20:19:04 2017 +0200 @@ -129,14 +129,12 @@ # colon or semicolon PATH_SEP:=@PATH_SEP@ +# Save the original path before replacing it with the Visual Studio tools +ORIGINAL_PATH:=@ORIGINAL_PATH@ ifeq ($(OPENJDK_TARGET_OS), windows) - # On Windows, the Visual Studio toolchain needs the LIB and INCLUDE - # environment variables (in Windows path style), and the PATH needs to - # be adjusted to include Visual Studio tools (but this needs to be in - # cygwin/msys style). + # On Windows, the Visual Studio toolchain needs the PATH to be adjusted + # to include Visual Studio tools (this needs to be in cygwin/msys style). export PATH:=@VS_PATH@ - export INCLUDE:=@VS_INCLUDE@ - export LIB:=@VS_LIB@ endif SYSROOT_CFLAGS := @SYSROOT_CFLAGS@ @@ -328,6 +326,8 @@ CFLAGS_WARNINGS_ARE_ERRORS:=@CFLAGS_WARNINGS_ARE_ERRORS@ +CFLAGS_CCACHE:=@CFLAGS_CCACHE@ + # Tools that potentially need to be cross compilation aware. CC:=@FIXPATH@ @CCACHE@ @CC@ diff -r 5fb718119516 -r bf5b664754ef common/autoconf/toolchain_windows.m4 --- a/common/autoconf/toolchain_windows.m4 Thu Feb 12 16:39:35 2015 -0800 +++ b/common/autoconf/toolchain_windows.m4 Wed Jul 05 20:19:04 2017 +0200 @@ -213,9 +213,9 @@ AC_MSG_ERROR([Your VC command prompt seems broken, INCLUDE and/or LIB is missing.]) else AC_MSG_RESULT([ok]) - # Remove any trailing "\" and " " from the variables. - VS_INCLUDE=`$ECHO "$VS_INCLUDE" | $SED 's/\\\\* *$//'` - VS_LIB=`$ECHO "$VS_LIB" | $SED 's/\\\\* *$//'` + # Remove any trailing "\" ";" and " " from the variables. + VS_INCLUDE=`$ECHO "$VS_INCLUDE" | $SED -e 's/\\\\*;* *$//'` + VS_LIB=`$ECHO "$VS_LIB" | $SED 's/\\\\*;* *$//'` VCINSTALLDIR=`$ECHO "$VCINSTALLDIR" | $SED 's/\\\\* *$//'` WindowsSDKDir=`$ECHO "$WindowsSDKDir" | $SED 's/\\\\* *$//'` WINDOWSSDKDIR=`$ECHO "$WINDOWSSDKDIR" | $SED 's/\\\\* *$//'` @@ -226,6 +226,26 @@ AC_SUBST(VS_PATH) AC_SUBST(VS_INCLUDE) AC_SUBST(VS_LIB) + + # Convert VS_INCLUDE into SYSROOT_CFLAGS + OLDIFS="$IFS" + IFS=";" + for i in $VS_INCLUDE; do + ipath=$i + IFS="$OLDIFS" + BASIC_FIXUP_PATH([ipath]) + IFS=";" + SYSROOT_CFLAGS="$SYSROOT_CFLAGS -I$ipath" + done + # Convert VS_LIB into SYSROOT_LDFLAGS + for i in $VS_LIB; do + libpath=$i + IFS="$OLDIFS" + BASIC_FIXUP_PATH([libpath]) + IFS=";" + SYSROOT_LDFLAGS="$SYSROOT_LDFLAGS -libpath:$libpath" + done + IFS="$OLDIFS" fi else AC_MSG_RESULT([not found]) diff -r 5fb718119516 -r bf5b664754ef make/Main.gmk --- a/make/Main.gmk Thu Feb 12 16:39:35 2015 -0800 +++ b/make/Main.gmk Wed Jul 05 20:19:04 2017 +0200 @@ -212,7 +212,7 @@ @$(RM) $@ @$(call GetSourceTips) -BOOTCYCLE_TARGET := images +BOOTCYCLE_TARGET := product-images bootcycle-images: @$(ECHO) Boot cycle build step 2: Building a new JDK image using previously built image +$(MAKE) $(MAKE_ARGS) -f Main.gmk SPEC=$(dir $(SPEC))bootcycle-spec.gmk $(BOOTCYCLE_TARGET) @@ -443,31 +443,45 @@ ALL_MODULE_TARGETS := $(sort $(GENSRC_MODULES) $(JAVA_MODULES) \ $(GENDATA_MODULES) $(LIBS_MODULES) $(LAUNCHER_MODULES) $(COPY_MODULES)) +# The "exploded image" is a locally runnable JDK in $(BUILD_OUTPUT)/jdk. exploded-image: $(ALL_MODULE_TARGETS) -# The old 'jdk' target most closely matches the new exploded-image. Keep an -# alias for ease of use. -jdk: exploded-image + +# The $(BUILD_OUTPUT)/images directory contain the resulting deliverables, +# and in line with this, our targets for creating these are named *-image[s]. -images: test-image jimages demos samples zip-security verify-modules +# This target builds the product images, e.g. the JRE and JDK image +# (and possibly other, more specific versions) +product-images: jimages demos samples zip-security verify-modules ifeq ($(OPENJDK_TARGET_OS), macosx) - images: mac-bundles + product-images: mac-bundles endif -docs: docs-javadoc docs-jvmtidoc +# This target builds the documentation image +docs-image: docs-javadoc docs-jvmtidoc +# This target builds the test image test-image: prepare-test-image +# all-images is the top-most target, it builds all our deliverables ("images"). +all-images: product-images test-image docs-image + ALL_TARGETS += buildtools gensrc gendata copy java rmic libs launchers \ - jdk.jdwp.agent-gensrc $(ALL_MODULE_TARGETS) exploded-image jdk images \ - docs test-image + jdk.jdwp.agent-gensrc $(ALL_MODULE_TARGETS) exploded-image \ + product-images docs-image test-image all-images ################################################################################ -all: images +# Traditional targets typically run by users. +# These can be considered aliases for the targets now named by a more +# "modern" naming scheme. default: exploded-image +jdk: exploded-image +images: product-images +docs: docs-image +all: all-images -ALL_TARGETS += default all +ALL_TARGETS += default jdk images docs all ################################################################################ ################################################################################ @@ -553,7 +567,8 @@ else @$(ECHO) "Re-running configure using default settings" endif - @( cd $(OUTPUT_ROOT) && $(BASH) $(TOPDIR)/configure $(CONFIGURE_COMMAND_LINE) ) + @( cd $(OUTPUT_ROOT) && PATH="$(ORIGINAL_PATH)" \ + $(BASH) $(TOPDIR)/configure $(CONFIGURE_COMMAND_LINE) ) ALL_TARGETS += reconfigure diff -r 5fb718119516 -r bf5b664754ef make/StripBinaries.gmk --- a/make/StripBinaries.gmk Thu Feb 12 16:39:35 2015 -0800 +++ b/make/StripBinaries.gmk Wed Jul 05 20:19:04 2017 +0200 @@ -53,7 +53,7 @@ endif # Don't include debug info for executables. -ALL_CMDS_SRC := $(filter-out %.debuginfo %.diz %.map %.pdb, \ +ALL_CMDS_SRC := $(filter-out %.bc %.debuginfo %.diz %.map %.pdb, \ $(shell $(FIND) $(SUPPORT_OUTPUTDIR)/modules_cmds -type f -o -type l)) COPY_CMDS_SRC := $(filter %.cgi, $(ALL_CMDS_SRC)) STRIP_CMDS_SRC := $(filter-out $(COPY_CMDS_SRC), $(ALL_CMDS_SRC)) diff -r 5fb718119516 -r bf5b664754ef make/common/NativeCompilation.gmk --- a/make/common/NativeCompilation.gmk Thu Feb 12 16:39:35 2015 -0800 +++ b/make/common/NativeCompilation.gmk Wed Jul 05 20:19:04 2017 +0200 @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2015, 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 @@ -53,6 +53,8 @@ UNIX_PATH_PREFIX := endif +# This pattern is used to transform the output of the microsoft CL compiler +# into a make syntax dependency file (.d) WINDOWS_SHOWINCLUDE_SED_PATTERN := \ -e '/^Note: including file:/!d' \ -e 's|Note: including file: *||' \ @@ -62,6 +64,16 @@ -e 's|$$$$| \\|g' \ # +# This pattern is used to transform a dependency file (.d) to a list +# of make targets for dependent files (.d.targets) +DEPENDENCY_TARGET_SED_PATTERN := \ + -e 's/\#.*//' \ + -e 's/^[^:]*: *//' \ + -e 's/ *\\$$$$//' \ + -e '/^$$$$/ d' \ + -e 's/$$$$/ :/' \ + # + define add_native_source # param 1 = BUILD_MYPACKAGE # parma 2 = the source file name (..../alfa.c or .../beta.cpp) @@ -75,12 +87,12 @@ ifneq (,$$(filter %.c,$2)) # Compile as a C file - $1_$2_FLAGS=$4 $$($1_$(notdir $2)_CFLAGS) -DTHIS_FILE='"$$( $$($1_$2_DEP) endif + # Create a dependency target file from the dependency file. + # Solution suggested by http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/ + ifneq ($$($1_$2_DEP),) + $(SED) $(DEPENDENCY_TARGET_SED_PATTERN) $$($1_$2_DEP) > $$($1_$2_DEP_TARGETS) + endif endif endef @@ -428,7 +450,7 @@ $1_BUILD_INFO := $$($1_OBJECT_DIR)/_build-info.marker # Track variable changes for all variables that affect the compilation command - # lines for all object files in this setup. This includes at least all the + # lines for all object files in this setup. This includes at least all the # variables used in the call to add_native_source below. $1_COMPILE_VARDEPS := $$($1_CFLAGS) $$($1_EXTRA_CFLAGS) $(SYSROOT_CFLAGS) \ $$($1_CXXFLAGS) $$($1_EXTRA_CXXFLAGS) \ @@ -452,7 +474,10 @@ ifeq ($$(wildcard $$($1_TARGET)),) $(ECHO) 'Creating $$($1_BASENAME) from $$(words $$(filter-out %.vardeps, $$?)) file(s)' else - $(ECHO) 'Updating $$($1_BASENAME) from $$(words $$(filter-out %.vardeps, $$?)) file(s)' + $(ECHO) $$(strip 'Updating $$($1_BASENAME)' \ + $$(if $$(filter-out %.vardeps, $$?), \ + 'from $$(words $$(filter-out %.vardeps, $$?)) file(s)') \ + $$(if $$(filter %.vardeps, $$?), 'due to makefile changes')) endif $(TOUCH) $$@ @@ -461,7 +486,9 @@ ifneq (,$$($1_VERSIONINFO_RESOURCE)) $1_RES:=$$($1_OBJECT_DIR)/$$($1_BASENAME).res $1_RES_DEP:=$$($1_RES).d + $1_RES_DEP_TARGETS:=$$($1_RES).d.targets -include $$($1_RES_DEP) + -include $$($1_RES_DEP_TARGETS) $1_RES_VARDEPS := $(RC) $$($1_RC_FLAGS) $1_RES_VARDEPS_FILE := $$(call DependOnVariable, $1_RES_VARDEPS, \ @@ -469,12 +496,14 @@ $$($1_RES): $$($1_VERSIONINFO_RESOURCE) $$($1_RES_VARDEPS_FILE) $(ECHO) $(LOG_INFO) "Compiling resource $$(notdir $$($1_VERSIONINFO_RESOURCE)) (for $$(notdir $$($1_TARGET)))" - $(RC) $$($1_RC_FLAGS) $(CC_OUT_OPTION)$$@ $$($1_VERSIONINFO_RESOURCE) + $(RC) $$($1_RC_FLAGS) $(SYSROOT_CFLAGS) $(CC_OUT_OPTION)$$@ \ + $$($1_VERSIONINFO_RESOURCE) # Windows RC compiler does not support -showIncludes, so we mis-use CL for this. - $(CC) $$($1_RC_FLAGS) -showIncludes -nologo -TC \ + $(CC) $$($1_RC_FLAGS) $(SYSROOT_CFLAGS) -showIncludes -nologo -TC \ $(CC_OUT_OPTION)$$($1_RES_DEP).obj $$($1_VERSIONINFO_RESOURCE) > $$($1_RES_DEP).raw 2>&1 || exit 0 ($(ECHO) $$($1_RES): \\ \ && $(SED) $(WINDOWS_SHOWINCLUDE_SED_PATTERN) $$($1_RES_DEP).raw) > $$($1_RES_DEP) + $(SED) $(DEPENDENCY_TARGET_SED_PATTERN) $$($1_RES_DEP) > $$($1_RES_DEP_TARGETS) endif ifneq (,$$($1_MANIFEST)) $1_GEN_MANIFEST:=$$($1_OBJECT_DIR)/$$($1_PROGRAM).manifest