RFR: JDK-8220445: Support for side by side MSVC Toolset versions

Tim Bell tim.bell at oracle.com
Fri Mar 22 16:41:32 UTC 2019


Erik:

> Sorry, forgot about this. Since I modified that patch, I need another
> reviewer before I can push it.
>
> So, anyone interested in reviewing this?
>
> Webrev: http://cr.openjdk.java.net/~erikj/8220445/webrev.01/
>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8220445

Looks good.

Tim

>> /Erik
>>
>> On 2019-03-19 13:49, Ali Ince wrote:
>>> Hi Erik,
>>>
>>> Is there any action that you want me to take on this?
>>>
>>> Thanks,
>>>
>>> Ali
>>>
>>> On Mon, Mar 11, 2019 at 7:37 PM Ali Ince <ali.ince at gmail.com
>>> <mailto:ali.ince at gmail.com>> wrote:
>>>
>>>     Hi Erik,
>>>
>>>     Thanks for sponsoring this improvement. I think it will improve
>>>     build environments for different versions of OpenJDK.
>>>
>>>     Yes, I have signed OCA.
>>>
>>>     Sorry for the typos, and it definitely looks ok to me.
>>>
>>>     Best regards,
>>>
>>>     Ali
>>>
>>>     > On 11 Mar 2019, at 17:26, Erik Joelsson
>>>     <erik.joelsson at oracle.com <mailto:erik.joelsson at oracle.com>> wrote:
>>>     >
>>>     > Hello Ali,
>>>     >
>>>     > This looks like an excellent improvement! I had no idea of this
>>>     ability in Visual Studio and am very pleased to learn of it.
>>>     >
>>>     > First of all, have you signed the OCA?
>>>     >
>>>     > I took your patch for a spin. I noticed that line 256 looked
>>>     weird and corrected it to refer to the variable
>>>     with_msvc_toolset_version. I also took the liberty of reformatting
>>>     and clarifying the comment. I uploaded the modified patch here:
>>>     http://cr.openjdk.java.net/~erikj/8220445/webrev.01/ Does that
>>>     look ok to you?
>>>     >
>>>     > /Erik
>>>     >
>>>     > On 2019-03-10 10:30, Ali Ince wrote:
>>>     >> Hi Everyone,
>>>     >>
>>>     >> I've been working on getting OpenJDK builds to support
>>>     side-by-side minor version MSVC toolsets which is now available in
>>>     VS2017.
>>>     >>
>>>     >> With VS2017, Microsoft switched to a more frequent update
>>>     policy where they have delivered 8 major updates as of today. As
>>>     part of this policy, they're no more providing download support
>>>     for all major updates and they've limited the number of major
>>>     updates available for public download [1]. However, they're
>>>     providing earlier minor versions of MSVC toolsets as components
>>>     that can be installed side-by-side with the latest available major
>>>     update of VS2017 [2].
>>>     >>
>>>     >> On the other hand, known MSVC compiler versions between OpenJDK
>>>     versions change slightly. For example, within jdk, jdk12u and
>>>     jdk11u the latest known version of VS2017 is 15.8 [3], [4], [5]
>>>     whereas it is 15.6 in jdk8u [6].
>>>     >>
>>>     >> The proposed patch below enables us to provide the intended
>>>     MSVC toolset version to use, with --with-msvc-toolset-version
>>>     parameter. The provided value is then passed as 'vcvars_ver'
>>>     parameter value to 'vcvarsall.bat' invocation. The supplied
>>>     parameter configures the build environment to use the specified
>>>     toolset rather than the default one (which is currently the
>>>     toolset provided with 15.9 - with MSC_VER value of 1916).
>>>     >>
>>>     >> It also adds support for the 'VCToolsRedistDir' environment
>>>     variable introduced with VS2017 that identifies the root directory
>>>     that includes the redistributable DLLs instead of searching
>>>     through all toolset directories.
>>>     >>
>>>     >> This patch will enable a single setup of VS2017, within
>>>     multiple toolset versions present, to support building OpenJDK
>>>     with corresponding toolset versions identified as known compilers.
>>>     >>
>>>     >> I've tested the patch with both WSL and Cygwin.
>>>     >>
>>>     >> Let me know if you have any feedback/comments.
>>>     >>
>>>     >> Thanks,
>>>     >>
>>>     >> Ali
>>>     >>
>>>     >> [1]
>>>
>>> https://docs.microsoft.com/en-us/visualstudio/productinfo/installing-an-earlier-release-of-vs2017
>>>
>>>
>>>     >> [2]
>>>
>>> https://devblogs.microsoft.com/cppblog/side-by-side-minor-version-msvc-toolsets-in-visual-studio-2017/
>>>
>>>
>>>     >> [3]
>>>
>>> http://hg.openjdk.java.net/jdk/jdk/file/0324b3756aa2/src/hotspot/share/runtime/vm_version.cpp#l228
>>>
>>>
>>>     >> [4]
>>>
>>> http://hg.openjdk.java.net/jdk-updates/jdk12u/file/a5881e9139ca/src/hotspot/share/runtime/vm_version.cpp#l228
>>>
>>>
>>>     >> [5]
>>>
>>> http://hg.openjdk.java.net/jdk-updates/jdk11u/file/30892e0c9533/src/hotspot/share/runtime/vm_version.cpp#l230
>>>
>>>
>>>     >> [6]
>>>
>>> http://hg.openjdk.java.net/jdk8u/jdk8u-dev/hotspot/file/ce13ce932e31/src/share/vm/runtime/vm_version.cpp#l233
>>>
>>>
>>>     >>
>>>     >> —————————
>>>     >>
>>>     >> diff -r 0324b3756aa2 make/autoconf/toolchain_windows.m4
>>>     >> --- a/make/autoconf/toolchain_windows.m4     Fri Mar 08
>>>     17:45:40 2019 -0500
>>>     >> +++ b/make/autoconf/toolchain_windows.m4     Sun Mar 10
>>>     17:19:22 2019 +0000
>>>     >> @@ -87,6 +87,7 @@
>>>     >>  VS_VS_PLATFORM_NAME_2017="v141"
>>>     >>  VS_SDK_PLATFORM_NAME_2017=
>>>     >>  VS_SUPPORTED_2017=true
>>>     >> +VS_TOOLSET_SUPPORTED_2017=true
>>>     >>
>>>
>>> ################################################################################
>>>
>>>
>>>     >>  @@ -177,6 +178,13 @@
>>>     >>  # build environment and assigns it to VS_ENV_CMD
>>>     >>  AC_DEFUN([TOOLCHAIN_FIND_VISUAL_STUDIO_BAT_FILE],
>>>     >>  [
>>>     >> +# VS2017 provides the option to install previous minor
>>>     versions of the MSVC toolsets.
>>>     >> +# It is not possible to download earlier minor versions of
>>>     VS2017 and in order to build
>>>     >> +# with a previous minor compiler toolset version, it is now
>>>     possible to compile with
>>>     >> +# earlier minor versions by passing
>>>     -vcvars_ver=<toolset_version> argument to vcvarsall.bat
>>>     >> +  AC_ARG_WITH(msvc-toolset-version,
>>>     [AS_HELP_STRING([--with-msvc-toolset-version],
>>>     >> +      [specific MSVC toolset version to use, passed as
>>>     vcvars_ver argument to pass to vcvarsall.bat (Windows only)])])
>>>     >> +
>>>     >>    VS_VERSION="$1"
>>>     >>    eval VS_COMNTOOLS_VAR="\${VS_ENVVAR_${VS_VERSION}}"
>>>     >>    eval VS_COMNTOOLS="\$${VS_COMNTOOLS_VAR}"
>>>     >> @@ -184,6 +192,7 @@
>>>     >>    eval VS_EDITIONS="\${VS_EDITIONS_${VS_VERSION}}"
>>>     >>    eval SDK_INSTALL_DIR="\${VS_SDK_INSTALLDIR_${VS_VERSION}}"
>>>     >>    eval VS_ENV_ARGS="\${VS_ENV_ARGS_${VS_VERSION}}"
>>>     >> +  eval
>>>     VS_TOOLSET_SUPPORTED="\${VS_TOOLSET_SUPPORTED_${VS_VERSION}}"
>>>     >>      # When using --with-tools-dir, assume it points to the
>>>     correct and default
>>>     >>    # version of Visual Studio or that --with-toolchain-version
>>>     was also set.
>>>     >> @@ -240,6 +249,12 @@
>>>     >> TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT([${VS_VERSION}],
>>>     >>          [C:/Program Files (x86)/$SDK_INSTALL_DIR], [well-known
>>>     name])
>>>     >>    fi
>>>     >> +
>>>     >> +  if test "x$VS_TOOLSET_SUPPORTED" != x; then
>>>     >> +    if test "x$msvc-toolset-version" != x; then
>>>     >> +      VS_ENV_ARGS="$VS_ENV_ARGS
>>>     -vcvars_ver=$with_msvc_toolset_version"
>>>     >> +    fi
>>>     >> +  fi
>>>     >>  ])
>>>     >>
>>>
>>> ################################################################################
>>>
>>>
>>>     >> @@ -423,6 +438,8 @@
>>>     >>              >> $EXTRACT_VC_ENV_BAT_FILE
>>>     >>          $ECHO 'echo VCINSTALLDIR="%VCINSTALLDIR% " >>
>>>     set-vs-env.sh' \
>>>     >>              >> $EXTRACT_VC_ENV_BAT_FILE
>>>     >> +        $ECHO 'echo VCToolsRedistDir="%VCToolsRedistDir% " >>
>>>     set-vs-env.sh' \
>>>     >> +            >> $EXTRACT_VC_ENV_BAT_FILE
>>>     >>          $ECHO 'echo WindowsSdkDir="%WindowsSdkDir% " >>
>>>     set-vs-env.sh' \
>>>     >>              >> $EXTRACT_VC_ENV_BAT_FILE
>>>     >>          $ECHO 'echo WINDOWSSDKDIR="%WINDOWSSDKDIR% " >>
>>>     set-vs-env.sh' \
>>>     >> @@ -440,6 +457,8 @@
>>>     >>              >> $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
>>>     VCToolsRedistDir="'\"$VCToolsRedistDir \" >> 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' \
>>>     >> @@ -517,6 +536,7 @@
>>>     >>        VS_INCLUDE=`$ECHO "$VS_INCLUDE" | $SED -e 's/\\\\*;*
>>> *$//'`
>>>     >>        VS_LIB=`$ECHO "$VS_LIB" | $SED 's/\\\\*;* *$//'`
>>>     >>        VCINSTALLDIR=`$ECHO "$VCINSTALLDIR" | $SED 's/\\\\* *$//'`
>>>     >> +      VCToolsRedistDir=`$ECHO "$VCToolsRedistDir" | $SED
>>>     's/\\\\* *$//'`
>>>     >>        WindowsSdkDir=`$ECHO "$WindowsSdkDir" | $SED 's/\\\\*
>>> *$//'`
>>>     >>        WINDOWSSDKDIR=`$ECHO "$WINDOWSSDKDIR" | $SED 's/\\\\*
>>> *$//'`
>>>     >>        if test -z "$WINDOWSSDKDIR"; then
>>>     >> @@ -638,11 +658,13 @@
>>>     >>
>>>
>>> POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x86/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
>>>
>>>
>>>     >>          fi
>>>     >>        else
>>>     >> + CYGWIN_VC_TOOLS_REDIST_DIR="$VCToolsRedistDir"
>>>     >> +        BASIC_FIXUP_PATH(CYGWIN_VC_TOOLS_REDIST_DIR)
>>>     >>          # Probe: Using well-known location from VS 2017
>>>     >>          if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
>>>     >> -          POSSIBLE_MSVC_DLL="`ls
>>>
>>> $CYGWIN_VC_INSTALL_DIR/Redist/MSVC/*/x64/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME`"
>>>
>>>
>>>     >> +          POSSIBLE_MSVC_DLL="`ls
>>>
>>> $CYGWIN_VC_TOOLS_REDIST_DIR/x64/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME`"
>>>
>>>
>>>     >>          else
>>>     >> -          POSSIBLE_MSVC_DLL="`ls
>>>
>>> $CYGWIN_VC_INSTALL_DIR/Redist/MSVC/*/x86/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME`"
>>>
>>>
>>>     >> +          POSSIBLE_MSVC_DLL="`ls
>>>
>>> $CYGWIN_VC_TOOLS_REDIST_DIR/x86/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME`"
>>>
>>>
>>>     >>          fi
>>>     >>        fi
>>>     >>        # In case any of the above finds more than one file,
>>>     loop over them.
>>>     >>
>>>     >>
>>>
>



More information about the build-dev mailing list