make/autoconf/toolchain_windows.m4
changeset 48678 bcce1fa183e7
parent 47216 71c04702a3d5
child 49208 a9d89773efca
equal deleted inserted replaced
48677:62b6e9b1dfdc 48678:bcce1fa183e7
    23 # questions.
    23 # questions.
    24 #
    24 #
    25 
    25 
    26 ################################################################################
    26 ################################################################################
    27 # The order of these defines the priority by which we try to find them.
    27 # The order of these defines the priority by which we try to find them.
    28 VALID_VS_VERSIONS="2013 2012 2010"
    28 VALID_VS_VERSIONS="2013 2012 2010 2015 2017"
    29 
    29 
    30 VS_DESCRIPTION_2010="Microsoft Visual Studio 2010"
    30 VS_DESCRIPTION_2010="Microsoft Visual Studio 2010"
    31 VS_VERSION_INTERNAL_2010=100
    31 VS_VERSION_INTERNAL_2010=100
    32 VS_MSVCR_2010=msvcr100.dll
    32 VS_MSVCR_2010=msvcr100.dll
    33 # We don't use msvcp on Visual Studio 2010
    33 # We don't use msvcp on Visual Studio 2010
    56 VS_VS_INSTALLDIR_2013="Microsoft Visual Studio 12.0"
    56 VS_VS_INSTALLDIR_2013="Microsoft Visual Studio 12.0"
    57 VS_SDK_INSTALLDIR_2013=
    57 VS_SDK_INSTALLDIR_2013=
    58 VS_VS_PLATFORM_NAME_2013="v120"
    58 VS_VS_PLATFORM_NAME_2013="v120"
    59 VS_SDK_PLATFORM_NAME_2013=
    59 VS_SDK_PLATFORM_NAME_2013=
    60 
    60 
       
    61 VS_DESCRIPTION_2015="Microsoft Visual Studio 2015 - CURRENTLY NOT WORKING"
       
    62 VS_VERSION_INTERNAL_2015=140
       
    63 VS_MSVCR_2015=vcruntime140.dll
       
    64 VS_MSVCP_2015=msvcp140.dll
       
    65 VS_ENVVAR_2015="VS140COMNTOOLS"
       
    66 VS_VS_INSTALLDIR_2015="Microsoft Visual Studio 14.0"
       
    67 VS_SDK_INSTALLDIR_2015=
       
    68 VS_VS_PLATFORM_NAME_2015="v140"
       
    69 VS_SDK_PLATFORM_NAME_2015=
       
    70 # The vcvars of 2015 breaks if 2017 is also installed. Work around this by
       
    71 # explicitly specifying Windows Kit 8.1 to be used.
       
    72 VS_ENV_ARGS_2015="8.1"
       
    73 
       
    74 VS_DESCRIPTION_2017="Microsoft Visual Studio 2017 - CURRENTLY NOT WORKING"
       
    75 VS_VERSION_INTERNAL_2017=141
       
    76 VS_MSVCR_2017=vcruntime140.dll
       
    77 VS_MSVCP_2017=msvcp140.dll
       
    78 VS_ENVVAR_2017="VS150COMNTOOLS"
       
    79 VS_VS_INSTALLDIR_2017="Microsoft Visual Studio/2017"
       
    80 VS_EDITIONS_2017="Community Professional Enterprise"
       
    81 VS_SDK_INSTALLDIR_2017=
       
    82 VS_VS_PLATFORM_NAME_2017="v141"
       
    83 VS_SDK_PLATFORM_NAME_2017=
       
    84 
    61 ################################################################################
    85 ################################################################################
    62 
    86 
    63 AC_DEFUN([TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT],
    87 AC_DEFUN([TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT],
    64 [
    88 [
    65   if test "x$VS_ENV_CMD" = x; then
    89   if test "x$VS_ENV_CMD" = x; then
    66     VS_VERSION="$1"
    90     VS_VERSION="$1"
    67     VS_BASE="$2"
    91     VS_BASE="$2"
    68     METHOD="$3"
    92     METHOD="$3"
    69 
    93 
    70     if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
       
    71       VCVARSFILE="vc/bin/vcvars32.bat"
       
    72     else
       
    73       VCVARSFILE="vc/bin/amd64/vcvars64.bat"
       
    74     fi
       
    75 
       
    76     BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(VS_BASE)
    94     BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(VS_BASE)
       
    95     # In VS 2017, the default installation is in a subdir named after the edition.
       
    96     # Find the first one present and use that.
       
    97     if test "x$VS_EDITIONS" != x; then
       
    98       for edition in $VS_EDITIONS; do
       
    99         if test -d "$VS_BASE/$edition"; then
       
   100           VS_BASE="$VS_BASE/$edition"
       
   101           break
       
   102         fi
       
   103       done
       
   104     fi
       
   105 
    77     if test -d "$VS_BASE"; then
   106     if test -d "$VS_BASE"; then
    78       if test -f "$VS_BASE/$VCVARSFILE"; then
   107       AC_MSG_NOTICE([Found Visual Studio installation at $VS_BASE using $METHOD])
    79         AC_MSG_NOTICE([Found Visual Studio installation at $VS_BASE using $METHOD])
   108       if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
    80         VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
   109         VCVARSFILES="vc/bin/vcvars32.bat vc/auxiliary/build/vcvars32.bat"
    81         # PLATFORM_TOOLSET is used during the compilation of the freetype sources (see
   110       else
    82         # 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100', 'v110' or 'v120' for VS 2010, 2012 or VS2013
   111         VCVARSFILES="vc/bin/amd64/vcvars64.bat vc/bin/x86_amd64/vcvarsx86_amd64.bat \
       
   112             vc/auxiliary/build/vcvarsx86_amd64.bat vc/auxiliary/build/vcvars64.bat"
       
   113       fi
       
   114 
       
   115       for VCVARSFILE in $VCVARSFILES; do
       
   116         if test -f "$VS_BASE/$VCVARSFILE"; then
       
   117           VS_ENV_CMD="$VS_BASE/$VCVARSFILE"
       
   118           break
       
   119         fi
       
   120       done
       
   121 
       
   122       if test "x$VS_ENV_CMD" = x; then
       
   123         AC_MSG_NOTICE([Warning: None of $VCVARSFILES were found, Visual Studio installation not recognized. Ignoring])
       
   124       else
       
   125         # PLATFORM_TOOLSET is used during the compilation of the freetype sources
       
   126         # (see 'LIB_BUILD_FREETYPE' in libraries.m4) and must be one of 'v100',
       
   127         # 'v110' or 'v120' for VS 2010, 2012 or VS2013
    83         eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
   128         eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
    84       else
       
    85         AC_MSG_NOTICE([Found Visual Studio installation at $VS_BASE using $METHOD])
       
    86         AC_MSG_NOTICE([Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring])
       
    87       fi
   129       fi
    88     fi
   130     fi
    89   fi
   131   fi
    90 ])
   132 ])
    91 
   133 
   131 [
   173 [
   132   VS_VERSION="$1"
   174   VS_VERSION="$1"
   133   eval VS_COMNTOOLS_VAR="\${VS_ENVVAR_${VS_VERSION}}"
   175   eval VS_COMNTOOLS_VAR="\${VS_ENVVAR_${VS_VERSION}}"
   134   eval VS_COMNTOOLS="\$${VS_COMNTOOLS_VAR}"
   176   eval VS_COMNTOOLS="\$${VS_COMNTOOLS_VAR}"
   135   eval VS_INSTALL_DIR="\${VS_VS_INSTALLDIR_${VS_VERSION}}"
   177   eval VS_INSTALL_DIR="\${VS_VS_INSTALLDIR_${VS_VERSION}}"
       
   178   eval VS_EDITIONS="\${VS_EDITIONS_${VS_VERSION}}"
   136   eval SDK_INSTALL_DIR="\${VS_SDK_INSTALLDIR_${VS_VERSION}}"
   179   eval SDK_INSTALL_DIR="\${VS_SDK_INSTALLDIR_${VS_VERSION}}"
       
   180   eval VS_ENV_ARGS="\${VS_ENV_ARGS_${VS_VERSION}}"
   137 
   181 
   138   # When using --with-tools-dir, assume it points to the correct and default
   182   # When using --with-tools-dir, assume it points to the correct and default
   139   # version of Visual Studio or that --with-toolchain-version was also set.
   183   # version of Visual Studio or that --with-toolchain-version was also set.
   140   if test "x$with_tools_dir" != x; then
   184   if test "x$with_tools_dir" != x; then
   141     TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([${VS_VERSION}],
   185     TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([${VS_VERSION}],
   151       AC_MSG_ERROR([Cannot locate a valid Visual Studio installation])
   195       AC_MSG_ERROR([Cannot locate a valid Visual Studio installation])
   152     fi
   196     fi
   153   fi
   197   fi
   154 
   198 
   155   VS_ENV_CMD=""
   199   VS_ENV_CMD=""
   156   VS_ENV_ARGS=""
       
   157 
   200 
   158   if test "x$VS_COMNTOOLS" != x; then
   201   if test "x$VS_COMNTOOLS" != x; then
   159     TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([${VS_VERSION}],
   202     TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([${VS_VERSION}],
   160         [$VS_COMNTOOLS/../..], [$VS_COMNTOOLS_VAR variable])
   203         [$VS_COMNTOOLS/../..], [$VS_COMNTOOLS_VAR variable])
   161   fi
   204   fi
   211 
   254 
   212     exit 0
   255     exit 0
   213   elif test "x$DEVKIT_VS_VERSION" != x; then
   256   elif test "x$DEVKIT_VS_VERSION" != x; then
   214     VS_VERSION=$DEVKIT_VS_VERSION
   257     VS_VERSION=$DEVKIT_VS_VERSION
   215     TOOLCHAIN_VERSION=$VS_VERSION
   258     TOOLCHAIN_VERSION=$VS_VERSION
   216     eval VS_DESCRIPTION="\${VS_DESCRIPTION_${VS_VERSION}}"
   259     # If the devkit has a name, use that as description
       
   260     VS_DESCRIPTION="$DEVKIT_NAME"
       
   261     if test "x$VS_DESCRIPTION" = x; then
       
   262       eval VS_DESCRIPTION="\${VS_DESCRIPTION_${VS_VERSION}}"
       
   263     fi
   217     eval VS_VERSION_INTERNAL="\${VS_VERSION_INTERNAL_${VS_VERSION}}"
   264     eval VS_VERSION_INTERNAL="\${VS_VERSION_INTERNAL_${VS_VERSION}}"
   218     eval MSVCR_NAME="\${VS_MSVCR_${VS_VERSION}}"
   265     eval MSVCR_NAME="\${VS_MSVCR_${VS_VERSION}}"
   219     eval MSVCP_NAME="\${VS_MSVCP_${VS_VERSION}}"
   266     eval MSVCP_NAME="\${VS_MSVCP_${VS_VERSION}}"
   220     eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
   267     eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
   221     VS_PATH="$TOOLCHAIN_PATH:$PATH"
   268     VS_PATH="$TOOLCHAIN_PATH:$PATH"
   265       # The rest of the variables are already evaled while probing
   312       # The rest of the variables are already evaled while probing
   266       AC_MSG_NOTICE([Found $VS_DESCRIPTION])
   313       AC_MSG_NOTICE([Found $VS_DESCRIPTION])
   267       break
   314       break
   268     fi
   315     fi
   269   done
   316   done
       
   317 
       
   318   TOOLCHAIN_DESCRIPTION="$VS_DESCRIPTION"
       
   319   if test "$TOOLCHAIN_VERSION" -gt 2013; then
       
   320     UNSUPPORTED_TOOLCHAIN_VERSION=yes
       
   321   fi
   270 ])
   322 ])
   271 
   323 
   272 ################################################################################
   324 ################################################################################
   273 # Check if the VS env variables were setup prior to running configure.
   325 # Check if the VS env variables were setup prior to running configure.
   274 # If not, then find vcvarsall.bat and run it automatically, and integrate
   326 # If not, then find vcvarsall.bat and run it automatically, and integrate
   318       EXTRACT_VC_ENV_BAT_FILE="$VS_ENV_TMP_DIR/extract-vs-env.bat"
   370       EXTRACT_VC_ENV_BAT_FILE="$VS_ENV_TMP_DIR/extract-vs-env.bat"
   319       $ECHO "@echo off" >  $EXTRACT_VC_ENV_BAT_FILE
   371       $ECHO "@echo off" >  $EXTRACT_VC_ENV_BAT_FILE
   320       # This will end up something like:
   372       # This will end up something like:
   321       # call C:/progra~2/micros~2.0/vc/bin/amd64/vcvars64.bat
   373       # call C:/progra~2/micros~2.0/vc/bin/amd64/vcvars64.bat
   322       $ECHO "call $WINPATH_VS_ENV_CMD $VS_ENV_ARGS" >> $EXTRACT_VC_ENV_BAT_FILE
   374       $ECHO "call $WINPATH_VS_ENV_CMD $VS_ENV_ARGS" >> $EXTRACT_VC_ENV_BAT_FILE
       
   375       # In some cases, the VS_ENV_CMD will change directory, change back so
       
   376       # the set-vs-env.sh ends up in the right place.
       
   377       $ECHO 'cd %~dp0' >> $EXTRACT_VC_ENV_BAT_FILE
   323       # These will end up something like:
   378       # These will end up something like:
   324       # C:/CygWin/bin/bash -c 'echo VS_PATH=\"$PATH\" > localdevenv.sh
   379       # C:/CygWin/bin/bash -c 'echo VS_PATH=\"$PATH\" > localdevenv.sh
   325       # The trailing space for everyone except PATH is no typo, but is needed due
   380       # The trailing space for everyone except PATH is no typo, but is needed due
   326       # to trailing \ in the Windows paths. These will be stripped later.
   381       # to trailing \ in the Windows paths. These will be stripped later.
   327       $ECHO "$WINPATH_BASH -c 'echo VS_PATH="'\"$PATH\" > set-vs-env.sh' \
   382       $ECHO "$WINPATH_BASH -c 'echo VS_PATH="'\"$PATH\" > set-vs-env.sh' \
   481 [
   536 [
   482   DLL_NAME="$1"
   537   DLL_NAME="$1"
   483   MSVC_DLL=
   538   MSVC_DLL=
   484 
   539 
   485   if test "x$MSVC_DLL" = x; then
   540   if test "x$MSVC_DLL" = x; then
   486     # Probe: Using well-known location from Visual Studio 10.0
       
   487     if test "x$VCINSTALLDIR" != x; then
   541     if test "x$VCINSTALLDIR" != x; then
   488       CYGWIN_VC_INSTALL_DIR="$VCINSTALLDIR"
   542       CYGWIN_VC_INSTALL_DIR="$VCINSTALLDIR"
   489       BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(CYGWIN_VC_INSTALL_DIR)
   543       BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(CYGWIN_VC_INSTALL_DIR)
   490       if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
   544       if test "$VS_VERSION" -lt 2017; then
   491         POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x64/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
   545         # Probe: Using well-known location from Visual Studio 12.0 and older
   492       else
   546         if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
   493         POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x86/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
   547           POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x64/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
   494       fi
   548         else
   495       $ECHO "POSSIBLE_MSVC_DLL $POSSIBLEMSVC_DLL"
   549           POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/x86/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
   496       TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL([$DLL_NAME], [$POSSIBLE_MSVC_DLL],
   550         fi
   497           [well-known location in VCINSTALLDIR])
   551       else
       
   552         # Probe: Using well-known location from VS 2017
       
   553         if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
       
   554           POSSIBLE_MSVC_DLL="`ls $CYGWIN_VC_INSTALL_DIR/Redist/MSVC/*/x64/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME`"
       
   555         else
       
   556           POSSIBLE_MSVC_DLL="`ls $CYGWIN_VC_INSTALL_DIR/Redist/MSVC/*/x86/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME`"
       
   557         fi
       
   558       fi
       
   559       # In case any of the above finds more than one file, loop over them.
       
   560       for possible_msvc_dll in $POSSIBLE_MSVC_DLL; do
       
   561         $ECHO "POSSIBLE_MSVC_DLL $possible_msvc_dll"
       
   562         TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL([$DLL_NAME], [$possible_msvc_dll],
       
   563             [well-known location in VCINSTALLDIR])
       
   564       done
   498     fi
   565     fi
   499   fi
   566   fi
   500 
   567 
   501   if test "x$MSVC_DLL" = x; then
   568   if test "x$MSVC_DLL" = x; then
   502     # Probe: Check in the Boot JDK directory.
   569     # Probe: Check in the Boot JDK directory.
   574     MSVCR_DLL="$MSVC_DLL"
   641     MSVCR_DLL="$MSVC_DLL"
   575   elif test "x$DEVKIT_MSVCR_DLL" != x; then
   642   elif test "x$DEVKIT_MSVCR_DLL" != x; then
   576     TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCR_NAME, [$DEVKIT_MSVCR_DLL], [devkit])
   643     TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCR_NAME, [$DEVKIT_MSVCR_DLL], [devkit])
   577     if test "x$MSVC_DLL" = x; then
   644     if test "x$MSVC_DLL" = x; then
   578       AC_MSG_ERROR([Could not find a proper $MSVCR_NAME as specified by devkit])
   645       AC_MSG_ERROR([Could not find a proper $MSVCR_NAME as specified by devkit])
   579     fi  
   646     fi
   580     MSVCR_DLL="$MSVC_DLL"
   647     MSVCR_DLL="$MSVC_DLL"
   581   else
   648   else
   582     TOOLCHAIN_SETUP_MSVC_DLL([${MSVCR_NAME}])
   649     TOOLCHAIN_SETUP_MSVC_DLL([${MSVCR_NAME}])
   583     MSVCR_DLL="$MSVC_DLL"
   650     MSVCR_DLL="$MSVC_DLL"
   584   fi
   651   fi
   597       MSVCP_DLL="$MSVC_DLL"
   664       MSVCP_DLL="$MSVC_DLL"
   598     elif test "x$DEVKIT_MSVCP_DLL" != x; then
   665     elif test "x$DEVKIT_MSVCP_DLL" != x; then
   599       TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCP_NAME, [$DEVKIT_MSVCP_DLL], [devkit])
   666       TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCP_NAME, [$DEVKIT_MSVCP_DLL], [devkit])
   600       if test "x$MSVC_DLL" = x; then
   667       if test "x$MSVC_DLL" = x; then
   601         AC_MSG_ERROR([Could not find a proper $MSVCP_NAME as specified by devkit])
   668         AC_MSG_ERROR([Could not find a proper $MSVCP_NAME as specified by devkit])
   602       fi  
   669       fi
   603       MSVCP_DLL="$MSVC_DLL"
   670       MSVCP_DLL="$MSVC_DLL"
   604     else
   671     else
   605       TOOLCHAIN_SETUP_MSVC_DLL([${MSVCP_NAME}])
   672       TOOLCHAIN_SETUP_MSVC_DLL([${MSVCP_NAME}])
   606       MSVCP_DLL="$MSVC_DLL"
   673       MSVCP_DLL="$MSVC_DLL"
   607     fi
   674     fi