Fix line endings in .bat files
authorAlexander Köplinger <alex.koeplinger@outlook.com>
Thu, 9 Jan 2020 17:06:53 +0000 (18:06 +0100)
committerAlexander Köplinger <alex.koeplinger@outlook.com>
Thu, 9 Jan 2020 17:06:53 +0000 (18:06 +0100)
They need to be CRLF otherwise we'll get conflicts when moving into dotnet/runtime which has a .gitattributes setting forcing .bat to CRLF.

Commit migrated from https://github.com/mono/mono/commit/c9dc20f59ebe7fbed2a439d69c2d03a2d4500577

src/mono/msvc/build-external-btls.bat
src/mono/msvc/build-external-llvm.bat
src/mono/msvc/install-llvm-mono-build.bat
src/mono/msvc/jaystuff.bat
src/mono/msvc/mono-sgen-msvc.bat
src/mono/msvc/run-msbuild.bat
src/mono/msvc/setup-solution.bat
src/mono/msvc/setup-vs-msbuild-env.bat
src/mono/msvc/setup-vs-msvcbuild-env.bat
src/mono/msvc/setup-windows-env.bat

index 216134c..a8fb4e3 100755 (executable)
-:: --------------------------------------------------\r
-:: Run full BTLS build using msvc toolchain and available cmake generator.\r
-:: Script needs to be run from within a matching build environment, x86|x64.\r
-:: When executed from withing Visual Studio build environment current\r
-:: build environment will be inherited by script.\r
-::\r
-:: %1 Mono BTLS source root directory.\r
-:: %2 BTLS source root directory.\r
-:: %3 BTLS build root directory.\r
-:: %4 Mono distribution root directory.\r
-:: %5 VS CFLAGS.\r
-:: %6 VS platform (Win32/x64)\r
-:: %7 VS configuration (Debug/Release)\r
-:: %8 VS target\r
-:: %9 VS PlatformToolSet, if used.\r
-:: %10 Win SDK, if used.\r
-:: %11 MsBuild bin path, if used.\r
-:: %12 Force MSBuild (true/false), if used.\r
-:: --------------------------------------------------\r
-\r
-@echo off\r
-setlocal\r
-\r
-set BUILD_RESULT=1\r
-\r
-set CL_BIN_NAME=cl.exe\r
-set LINK_BIN_NAME=link.exe\r
-set GIT_BIN_NAME=git.exe\r
-set CMAKE_BIN_NAME=cmake.exe\r
-set NINJA_BIN_NAME=ninja.exe\r
-set PERL_BIN_NAME=perl.exe\r
-set YASM_BIN_NAME=yasm.exe\r
-\r
-set MONO_BTLS_DIR=%~1\r
-shift\r
-set BTLS_DIR=%~1\r
-shift\r
-set BTLS_BUILD_DIR=%~1\r
-shift\r
-set MONO_DIST_DIR=%~1\r
-shift\r
-set VS_CFLAGS=%~1\r
-shift\r
-set VS_PLATFORM=%~1\r
-shift\r
-set VS_CONFIGURATION=%~1\r
-shift\r
-set VS_TARGET=%~1\r
-shift\r
-set VS_PLATFORM_TOOL_SET=%~1\r
-shift\r
-set VS_WIN_SDK_VERSION=%~1\r
-shift\r
-set MSBUILD_BIN_PATH=%~1\r
-shift\r
-set FORCE_MSBUILD=%~1\r
-\r
-:: Setup toolchain.\r
-:: set GIT=\r
-:: set CMAKE=\r
-:: set NINJA=\r
-set MSBUILD=%MSBUILD_BIN_PATH%msbuild.exe\r
-\r
-if "%MONO_BTLS_DIR%" == "" (\r
-    echo Missing mono BTLS source directory argument.\r
-    goto ECHO_USAGE\r
-)\r
-\r
-if "%BTLS_DIR%" == "" (\r
-    echo Missing BTLS source directory argument.\r
-    goto ECHO_USAGE\r
-)\r
-\r
-if "%BTLS_BUILD_DIR%" == "" (\r
-    echo Missing BTLS build directory argument.\r
-    goto ECHO_USAGE\r
-)\r
-\r
-if "%MONO_DIST_DIR%" == "" (\r
-    echo Missing mono install directory argument.\r
-    goto ECHO_USAGE\r
-)\r
-\r
-if "%VS_CFLAGS%" == "" (\r
-    echo Missing CFLAGS argument.\r
-    goto ECHO_USAGE\r
-)\r
-\r
-if "%VS_PLATFORM%" == "" (\r
-    set VS_PLATFORM=x64\r
-)\r
-\r
-if "%VS_CONFIGURATION%" == "" (\r
-    set VS_CONFIGURATION=Release\r
-)\r
-\r
-if "%VS_TARGET%" == "" (\r
-    set VS_TARGET=Build\r
-)\r
-\r
-if "%VS_PLATFORM_TOOL_SET%" == "" (\r
-    set VS_PLATFORM_TOOL_SET=v142\r
-)\r
-\r
-if "%VS_WIN_SDK_VERSION%" == "" (\r
-    set VS_WIN_SDK_VERSION=10.0\r
-)\r
-\r
-if "%FORCE_MSBUILD%" == "" (\r
-    set FORCE_MSBUILD=false\r
-)\r
-\r
-set BTLS_CFLAGS=%VS_CFLAGS%\r
-set BTLS_ARCH=x86_64\r
-if /i "%VS_PLATFORM%" == "win32" (\r
-    set BTLS_ARCH=i386\r
-)\r
-\r
-set BTLS_NO_ASM_SUPPORT=1\r
-\r
-:: VS2017/VS2019 includes vswhere.exe that can be used to locate current VS installation.\r
-set VSWHERE_TOOLS_BIN=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe\r
-set VS_COMMON_EXTENSION_TOOLS_PATHS=\r
-\r
-:: Check if executed from VS2015/VS2017/VS2019 build environment.\r
-if "%VisualStudioVersion%" == "14.0" (\r
-    if /i not "%VS_PLATFORM_TOOL_SET%" == "v140" (\r
-        echo VisualStudioVersion/PlatformToolchain missmatch, forcing msbuild.\r
-        set FORCE_MSBUILD=true\r
-    )\r
-    goto ON_ENV_OK\r
-)\r
-\r
-if "%VisualStudioVersion%" == "15.0" (\r
-    if /i not "%VS_PLATFORM_TOOL_SET%" == "v141" (\r
-        echo VisualStudioVersion/PlatformToolchain missmatch, forcing msbuild.\r
-        set FORCE_MSBUILD=true\r
-    )\r
-    goto ON_ENV_OK\r
-)\r
-\r
-if "%VisualStudioVersion%" == "16.0" (\r
-    if /i not "%VS_PLATFORM_TOOL_SET%" == "v142" (\r
-        echo VisualStudioVersion/PlatformToolchain missmatch, forcing msbuild.\r
-        set FORCE_MSBUILD=true\r
-    )\r
-    goto ON_ENV_OK\r
-)\r
-\r
-:: Executed outside VS2015/VS2017/VS2019 build environment, try to locate Visual Studio C/C++ compiler and linker.\r
-call :FIND_PROGRAM "" "%CL_BIN_NAME%" CL_PATH\r
-if "%CL_PATH%" == "" (\r
-    goto ON_ENV_WARNING\r
-)\r
-\r
-call :FIND_PROGRAM "" "%LINK_BIN_NAME%" LINK_PATH\r
-if "%LINK_PATH%" == "" (\r
-    goto ON_ENV_WARNING\r
-)\r
-\r
-goto ON_ENV_OK\r
-\r
-:ON_ENV_WARNING\r
-\r
-:: VS 2019.\r
-if exist "%VSWHERE_TOOLS_BIN%" (\r
-    echo For VS2019 builds, make sure to run this from within Visual Studio build or using "x86|x64 Native Tools Command Prompt for VS2019" command prompt.\r
-    for /f "tokens=*" %%a IN ('"%VSWHERE_TOOLS_BIN%" -version [16.0^,17.0] -property installationPath') do (\r
-        echo Setup a "x86|x64 Native Tools Command Prompt for VS2019" command prompt by using "%%a\VC\Auxiliary\Build\vcvars32.bat|vcvars64.bat".\r
-        goto ON_ENV_WARNING_DONE\r
-    )\r
-)\r
-\r
-:: VS 2017.\r
-if exist "%VSWHERE_TOOLS_BIN%" (\r
-    echo For VS2017 builds, make sure to run this from within Visual Studio build or using "x86|x64 Native Tools Command Prompt for VS2017" command prompt.\r
-    for /f "tokens=*" %%a IN ('"%VSWHERE_TOOLS_BIN%" -version [15.0^,16.0] -property installationPath') do (\r
-        echo Setup a "x86|x64 Native Tools Command Prompt for VS2017" command prompt by using "%%a\VC\Auxiliary\Build\vcvars32.bat|vcvars64.bat".\r
-        goto ON_ENV_WARNING_DONE\r
-    )\r
-)\r
-\r
-:: VS 2015.\r
-set VC_VARS_ALL_FILE=%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat\r
-IF EXIST "%VC_VARS_ALL_FILE%" (\r
-    echo For VS2015 builds, make sure to run this from within Visual Studio build or using "VS2015 x86|x64 Native Tools Command Prompt" command prompt.\r
-    echo Setup a "VS2015 x86|x64 Native Tools Command Prompt" command prompt by using "%VC_VARS_ALL_FILE% x86|amd64".\r
-    goto ON_ENV_WARNING_DONE\r
-)\r
-\r
-:ON_ENV_WARNING_DONE\r
-\r
-echo Could not detect Visual Studio build environment. You may experience build problems if wrong toolchain is auto detected.\r
-\r
-:ON_ENV_OK\r
-\r
-:: Append paths to VS installed common extension tools at end of PATH (Vs2017/VS2019).\r
-call :FIND_VS_COMMON_EXTENSION_TOOLS_PATHS VS_COMMON_EXTENSION_TOOLS_PATHS\r
-if not "%VS_COMMON_EXTENSION_TOOLS_PATHS%" == "" (\r
-    set "PATH=%PATH%;%VS_COMMON_EXTENSION_TOOLS_PATHS%"\r
-)\r
-\r
-:: Setup all cmake related generator, tools and variables.\r
-call :SETUP_CMAKE_ENVIRONMENT\r
-if "%CMAKE%" == "" (\r
-    echo Failed to located working %CMAKE_BIN_NAME%, needs to be accessible in PATH or set using CMAKE environment variable.\r
-    goto ON_ERROR\r
-)\r
-\r
-if "%CMAKE_GENERATOR%" == "" (\r
-    echo Failed to setup cmake generator.\r
-    goto ON_ERROR\r
-)\r
-\r
-:: Check target.\r
-if /i "%VS_TARGET%" == "build" (\r
-    goto ON_BUILD_BTLS\r
-)\r
-\r
-if /i "%VS_TARGET%" == "install" (\r
-    goto ON_INSTALL_BTLS\r
-)\r
-\r
-if /i "%VS_TARGET%" == "clean" (\r
-    goto ON_CLEAN_BTLS\r
-)\r
-\r
-:ON_BUILD_BTLS\r
-\r
-:: If not set by caller, check environment for working git.exe.\r
-call :FIND_PROGRAM "%GIT%" "%GIT_BIN_NAME%" GIT\r
-if "%GIT%" == "" (\r
-    echo Failed to located working %GIT_BIN_NAME%, needs to be accessible in PATH or set using GIT environment variable.\r
-    goto ON_ERROR\r
-)\r
-\r
-:: Make sure boringssl submodule is up to date.\r
+:: --------------------------------------------------
+:: Run full BTLS build using msvc toolchain and available cmake generator.
+:: Script needs to be run from within a matching build environment, x86|x64.
+:: When executed from withing Visual Studio build environment current
+:: build environment will be inherited by script.
+::
+:: %1 Mono BTLS source root directory.
+:: %2 BTLS source root directory.
+:: %3 BTLS build root directory.
+:: %4 Mono distribution root directory.
+:: %5 VS CFLAGS.
+:: %6 VS platform (Win32/x64)
+:: %7 VS configuration (Debug/Release)
+:: %8 VS target
+:: %9 VS PlatformToolSet, if used.
+:: %10 Win SDK, if used.
+:: %11 MsBuild bin path, if used.
+:: %12 Force MSBuild (true/false), if used.
+:: --------------------------------------------------
+
+@echo off
+setlocal
+
+set BUILD_RESULT=1
+
+set CL_BIN_NAME=cl.exe
+set LINK_BIN_NAME=link.exe
+set GIT_BIN_NAME=git.exe
+set CMAKE_BIN_NAME=cmake.exe
+set NINJA_BIN_NAME=ninja.exe
+set PERL_BIN_NAME=perl.exe
+set YASM_BIN_NAME=yasm.exe
+
+set MONO_BTLS_DIR=%~1
+shift
+set BTLS_DIR=%~1
+shift
+set BTLS_BUILD_DIR=%~1
+shift
+set MONO_DIST_DIR=%~1
+shift
+set VS_CFLAGS=%~1
+shift
+set VS_PLATFORM=%~1
+shift
+set VS_CONFIGURATION=%~1
+shift
+set VS_TARGET=%~1
+shift
+set VS_PLATFORM_TOOL_SET=%~1
+shift
+set VS_WIN_SDK_VERSION=%~1
+shift
+set MSBUILD_BIN_PATH=%~1
+shift
+set FORCE_MSBUILD=%~1
+
+:: Setup toolchain.
+:: set GIT=
+:: set CMAKE=
+:: set NINJA=
+set MSBUILD=%MSBUILD_BIN_PATH%msbuild.exe
+
+if "%MONO_BTLS_DIR%" == "" (
+    echo Missing mono BTLS source directory argument.
+    goto ECHO_USAGE
+)
+
+if "%BTLS_DIR%" == "" (
+    echo Missing BTLS source directory argument.
+    goto ECHO_USAGE
+)
+
+if "%BTLS_BUILD_DIR%" == "" (
+    echo Missing BTLS build directory argument.
+    goto ECHO_USAGE
+)
+
+if "%MONO_DIST_DIR%" == "" (
+    echo Missing mono install directory argument.
+    goto ECHO_USAGE
+)
+
+if "%VS_CFLAGS%" == "" (
+    echo Missing CFLAGS argument.
+    goto ECHO_USAGE
+)
+
+if "%VS_PLATFORM%" == "" (
+    set VS_PLATFORM=x64
+)
+
+if "%VS_CONFIGURATION%" == "" (
+    set VS_CONFIGURATION=Release
+)
+
+if "%VS_TARGET%" == "" (
+    set VS_TARGET=Build
+)
+
+if "%VS_PLATFORM_TOOL_SET%" == "" (
+    set VS_PLATFORM_TOOL_SET=v142
+)
+
+if "%VS_WIN_SDK_VERSION%" == "" (
+    set VS_WIN_SDK_VERSION=10.0
+)
+
+if "%FORCE_MSBUILD%" == "" (
+    set FORCE_MSBUILD=false
+)
+
+set BTLS_CFLAGS=%VS_CFLAGS%
+set BTLS_ARCH=x86_64
+if /i "%VS_PLATFORM%" == "win32" (
+    set BTLS_ARCH=i386
+)
+
+set BTLS_NO_ASM_SUPPORT=1
+
+:: VS2017/VS2019 includes vswhere.exe that can be used to locate current VS installation.
+set VSWHERE_TOOLS_BIN=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
+set VS_COMMON_EXTENSION_TOOLS_PATHS=
+
+:: Check if executed from VS2015/VS2017/VS2019 build environment.
+if "%VisualStudioVersion%" == "14.0" (
+    if /i not "%VS_PLATFORM_TOOL_SET%" == "v140" (
+        echo VisualStudioVersion/PlatformToolchain missmatch, forcing msbuild.
+        set FORCE_MSBUILD=true
+    )
+    goto ON_ENV_OK
+)
+
+if "%VisualStudioVersion%" == "15.0" (
+    if /i not "%VS_PLATFORM_TOOL_SET%" == "v141" (
+        echo VisualStudioVersion/PlatformToolchain missmatch, forcing msbuild.
+        set FORCE_MSBUILD=true
+    )
+    goto ON_ENV_OK
+)
+
+if "%VisualStudioVersion%" == "16.0" (
+    if /i not "%VS_PLATFORM_TOOL_SET%" == "v142" (
+        echo VisualStudioVersion/PlatformToolchain missmatch, forcing msbuild.
+        set FORCE_MSBUILD=true
+    )
+    goto ON_ENV_OK
+)
+
+:: Executed outside VS2015/VS2017/VS2019 build environment, try to locate Visual Studio C/C++ compiler and linker.
+call :FIND_PROGRAM "" "%CL_BIN_NAME%" CL_PATH
+if "%CL_PATH%" == "" (
+    goto ON_ENV_WARNING
+)
+
+call :FIND_PROGRAM "" "%LINK_BIN_NAME%" LINK_PATH
+if "%LINK_PATH%" == "" (
+    goto ON_ENV_WARNING
+)
+
+goto ON_ENV_OK
+
+:ON_ENV_WARNING
+
+:: VS 2019.
+if exist "%VSWHERE_TOOLS_BIN%" (
+    echo For VS2019 builds, make sure to run this from within Visual Studio build or using "x86|x64 Native Tools Command Prompt for VS2019" command prompt.
+    for /f "tokens=*" %%a IN ('"%VSWHERE_TOOLS_BIN%" -version [16.0^,17.0] -property installationPath') do (
+        echo Setup a "x86|x64 Native Tools Command Prompt for VS2019" command prompt by using "%%a\VC\Auxiliary\Build\vcvars32.bat|vcvars64.bat".
+        goto ON_ENV_WARNING_DONE
+    )
+)
+
+:: VS 2017.
+if exist "%VSWHERE_TOOLS_BIN%" (
+    echo For VS2017 builds, make sure to run this from within Visual Studio build or using "x86|x64 Native Tools Command Prompt for VS2017" command prompt.
+    for /f "tokens=*" %%a IN ('"%VSWHERE_TOOLS_BIN%" -version [15.0^,16.0] -property installationPath') do (
+        echo Setup a "x86|x64 Native Tools Command Prompt for VS2017" command prompt by using "%%a\VC\Auxiliary\Build\vcvars32.bat|vcvars64.bat".
+        goto ON_ENV_WARNING_DONE
+    )
+)
+
+:: VS 2015.
+set VC_VARS_ALL_FILE=%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat
+IF EXIST "%VC_VARS_ALL_FILE%" (
+    echo For VS2015 builds, make sure to run this from within Visual Studio build or using "VS2015 x86|x64 Native Tools Command Prompt" command prompt.
+    echo Setup a "VS2015 x86|x64 Native Tools Command Prompt" command prompt by using "%VC_VARS_ALL_FILE% x86|amd64".
+    goto ON_ENV_WARNING_DONE
+)
+
+:ON_ENV_WARNING_DONE
+
+echo Could not detect Visual Studio build environment. You may experience build problems if wrong toolchain is auto detected.
+
+:ON_ENV_OK
+
+:: Append paths to VS installed common extension tools at end of PATH (Vs2017/VS2019).
+call :FIND_VS_COMMON_EXTENSION_TOOLS_PATHS VS_COMMON_EXTENSION_TOOLS_PATHS
+if not "%VS_COMMON_EXTENSION_TOOLS_PATHS%" == "" (
+    set "PATH=%PATH%;%VS_COMMON_EXTENSION_TOOLS_PATHS%"
+)
+
+:: Setup all cmake related generator, tools and variables.
+call :SETUP_CMAKE_ENVIRONMENT
+if "%CMAKE%" == "" (
+    echo Failed to located working %CMAKE_BIN_NAME%, needs to be accessible in PATH or set using CMAKE environment variable.
+    goto ON_ERROR
+)
+
+if "%CMAKE_GENERATOR%" == "" (
+    echo Failed to setup cmake generator.
+    goto ON_ERROR
+)
+
+:: Check target.
+if /i "%VS_TARGET%" == "build" (
+    goto ON_BUILD_BTLS
+)
+
+if /i "%VS_TARGET%" == "install" (
+    goto ON_INSTALL_BTLS
+)
+
+if /i "%VS_TARGET%" == "clean" (
+    goto ON_CLEAN_BTLS
+)
+
+:ON_BUILD_BTLS
+
+:: If not set by caller, check environment for working git.exe.
+call :FIND_PROGRAM "%GIT%" "%GIT_BIN_NAME%" GIT
+if "%GIT%" == "" (
+    echo Failed to located working %GIT_BIN_NAME%, needs to be accessible in PATH or set using GIT environment variable.
+    goto ON_ERROR
+)
+
+:: Make sure boringssl submodule is up to date.
 echo Updating submodule "%BTLS_DIR%"
-"%GIT%" submodule update --init -- "%BTLS_DIR%"\r
-if not ERRORLEVEL == 0 (\r
-    "%GIT%" submodule init -- "%BTLS_DIR%"\r
-    "%GIT%" submodule update -- "%BTLS_DIR%"\r
-    if not ERRORLEVEL == 0 (\r
-        echo Git boringssl submodules failed to updated. You may experience compilation problems if some submodules are out of date.\r
-    )\r
-)\r
-\r
-if not exist "%BTLS_DIR%" (\r
-    echo Could not find "%BTLS_DIR%".\r
-    goto ON_ERROR\r
-)\r
-\r
-if not exist "%BTLS_BUILD_DIR%" (\r
-    mkdir "%BTLS_BUILD_DIR%"\r
-)\r
-\r
-cd "%BTLS_BUILD_DIR%"\r
-\r
-:: Make sure cmake pick up msvc toolchain regardless of selected generator (Visual Studio|Ninja)\r
-set CC=%CL_BIN_NAME%\r
-set CXX=%CL_BIN_NAME%\r
-\r
-set BTLS_BUILD_TYPE=\r
-set CMAKE_GENERATOR_TOOLSET=\r
-if /i "%CMAKE_GENERATOR%" == "ninja" (\r
-    set BTLS_BUILD_TYPE=-D CMAKE_BUILD_TYPE=%VS_CONFIGURATION%\r
-) else (\r
-    set CMAKE_GENERATOR_TOOLSET=%VS_PLATFORM_TOOL_SET%\r
-)\r
-\r
-if not "%CMAKE_GENERATOR_ARCH%" == "" (\r
-    set CMAKE_GENERATOR_ARCH=-A %CMAKE_GENERATOR_ARCH%\r
-)\r
-\r
-:: Run cmake.\r
-"%CMAKE%" ^\r
--D BTLS_ROOT:PATH="%BTLS_DIR%" ^\r
--D SRC_DIR:PATH="%MONO_BTLS_DIR%" ^\r
--D BTLS_CFLAGS="%BTLS_CFLAGS%" ^\r
--D OPENSSL_NO_ASM=%BTLS_NO_ASM_SUPPORT% ^\r
--D BTLS_ARCH="%BTLS_ARCH%" ^\r
--D BUILD_SHARED_LIBS=1 ^\r
--D CMAKE_SYSTEM_VERSION=%VS_WIN_SDK_VERSION% ^\r
-%CMAKE_GENERATOR_TOOLSET% ^\r
-%BTLS_BUILD_TYPE% ^\r
--G "%CMAKE_GENERATOR%" ^\r
-%CMAKE_GENERATOR_ARCH% ^\r
-"%MONO_BTLS_DIR%"\r
-\r
-if not ERRORLEVEL == 0 (\r
-    goto ON_ERROR\r
-)\r
-\r
-if /i "%CMAKE_GENERATOR%" == "ninja" (\r
-    :: Build BTLS using ninja build system.\r
-    call "%NINJA%" -j4 || (\r
-        goto ON_ERROR\r
-    )\r
-) else (\r
-    :: Build BTLS using msbuild build system.\r
-    call "%MSBUILD%" mono-btls.sln /p:Configuration=%VS_CONFIGURATION% /p:Platform=%VS_PLATFORM% /t:%VS_TARGET% /v:m /nologo /m || (\r
-        goto ON_ERROR\r
-    )\r
-)\r
-\r
-:ON_INSTALL_BTLS\r
-\r
-if not exist "%BTLS_BUILD_OUTPUT_DIR%\libmono-btls-shared.dll" (\r
-    echo Missing btls build output, "%BTLS_BUILD_OUTPUT_DIR%\libmono-btls-shared.dll"\r
-    goto ON_ERROR\r
-)\r
-\r
-:: Make sure build output folder exists.\r
-if not exist "%MONO_DIST_DIR%" (\r
-    echo Could not find "%MONO_DIST_DIR%", creating folder for build output.\r
-    mkdir "%MONO_DIST_DIR%"\r
-)\r
-\r
-:: Copy files into distribution directory.\r
-copy /Y "%BTLS_BUILD_OUTPUT_DIR%\libmono-btls-shared.dll" "%MONO_DIST_DIR%" >nul 2>&1\r
-\r
-if exist "%BTLS_BUILD_OUTPUT_DIR%\libmono-btls-shared.pdb" (\r
-    copy /Y "%BTLS_BUILD_OUTPUT_DIR%\libmono-btls-shared.pdb" "%MONO_DIST_DIR%" >nul 2>&1\r
-)\r
-\r
-goto ON_SUCCESS\r
-\r
-:ON_CLEAN_BTLS\r
-\r
-if exist "%BTLS_BUILD_DIR%\build.ninja" (\r
-    pushd\r
-    cd "%BTLS_BUILD_DIR%"\r
-    call "%NINJA%" clean\r
-    popd\r
-)\r
-\r
-if exist "%BTLS_BUILD_DIR%\mono-btls.sln" (\r
-    "%MSBUILD%" "%BTLS_BUILD_DIR%\mono-btls.sln" /p:Configuration=%VS_CONFIGURATION% /p:Platform=%VS_PLATFORM% /t:Clean /v:m /nologo\r
-)\r
-\r
-goto ON_SUCCESS\r
-\r
-:ON_SUCCESS\r
-\r
-set BUILD_RESULT=0\r
-goto ON_EXIT\r
-\r
-:ECHO_USAGE:\r
-    ECHO Usage: build-btls.bat [mono_btls_src_dir] [btls_src_dir] [btls_build_dir] [mono_dist_dir] [vs_cflags] [vs_plaform] [vs_configuration].\r
-\r
-:ON_ERROR\r
-    echo Failed to build BTLS.\r
-    goto ON_EXIT\r
-\r
-:ON_EXIT\r
-    exit /b %BUILD_RESULT%\r
-\r
-:: ##############################################################################################################################\r
-:: Functions\r
-\r
-:: --------------------------------------------------\r
-:: Locates PATHS to installed common extension tools.\r
-:: %1 Output, variable including paths.\r
-:: --------------------------------------------------\r
-:FIND_VS_COMMON_EXTENSION_TOOLS_PATHS\r
-\r
-set VS_COMMON_EXTENSION_PATH=\r
-if exist "%VSWHERE_TOOLS_BIN%" (\r
-    for /f "tokens=*" %%a in ('"%VSWHERE_TOOLS_BIN%" -version [16.0^,17.0] -property installationPath') do (\r
-        set VS_COMMON_EXTENSION_PATH=%%a\Common7\IDE\CommonExtensions\Microsoft\r
-    )\r
-)\r
-\r
-if exist "%VS_COMMON_EXTENSION_PATH%" (\r
-    set "%~1=%VS_COMMON_EXTENSION_PATH%\TeamFoundation\Team Explorer\Git\cmd;%VS_COMMON_EXTENSION_PATH%\CMake\CMake\bin;%VS_COMMON_EXTENSION_PATH%\CMake\Ninja"\r
-)\r
-\r
-goto :EOF\r
-\r
-:: --------------------------------------------------\r
-:: Finds a program using environment.\r
-::\r
-:: %1 Existing program to check for.\r
-:: %2 Name of binary to locate.\r
-:: %3 Output, variable to set if found requested program.\r
-:: --------------------------------------------------\r
-:FIND_PROGRAM\r
-\r
-:: If not set by caller, check environment for program.\r
-if exist "%~1" (\r
-    goto :EOF\r
-)\r
-\r
-call where /q "%~2" && (\r
-    for /f "delims=" %%a in ('where "%~2"') do (\r
-        set "%~3=%%a"\r
-    )\r
-) || (\r
-    set "%~3="\r
-)\r
-\r
-goto :EOF\r
-\r
-:: --------------------------------------------------\r
-:: Setup up cmake build environment, including generator, build tools and variables.\r
-:: --------------------------------------------------\r
-:SETUP_CMAKE_ENVIRONMENT\r
-\r
-:: If not set by caller, check environment for working cmake.exe.\r
-call :FIND_PROGRAM "%CMAKE%" "%CMAKE_BIN_NAME%" CMAKE\r
-if "%CMAKE%" == "" (\r
-    goto _SETUP_CMAKE_ENVIRONMENT_EXIT\r
-)\r
-\r
-if /i "%VS_TARGET%" == "build" (\r
-    echo Found CMake: "%CMAKE%"\r
-)\r
-\r
-if /i "%FORCE_MSBUILD%" == "true" (\r
-    goto _SETUP_CMAKE_ENVIRONMENT_VS_GENERATOR\r
-)\r
-\r
-:: Check for optional cmake generate and build tools for full BTLS assembler supported build. NOTE, currently BTLS assembler build\r
-:: can't be done using Visual Studio and must use ninja build generator + yasm and perl.\r
-call :FIND_PROGRAM "%NINJA%" "%NINJA_BIN_NAME%" NINJA\r
-call :FIND_PROGRAM "%YASM%" "%YASM_BIN_NAME%" YASM\r
-call :FIND_PROGRAM "%PERL%" "%PERL_BIN_NAME%" PERL\r
-\r
-if not "%NINJA%" == "" if not "%YASM%" == "" if not "%PERL%" == "" (\r
-    goto _SETUP_CMAKE_ENVIRONMENT_NINJA_GENERATOR\r
-)\r
-\r
-:_SETUP_CMAKE_ENVIRONMENT_VS_GENERATOR\r
-\r
-if /i "%VS_TARGET%" == "build" (\r
-    echo Using Visual Studio build generator, disabling full assembler build.\r
-)\r
-\r
-set CMAKE_GENERATOR_ARCH=\r
-\r
-:: Detect VS platform tool set to use matching cmake generator.\r
-if /i "%VS_PLATFORM_TOOL_SET%" == "v140" (\r
-    if /i "%VS_PLATFORM%" == "x64" (\r
-        set CMAKE_GENERATOR=Visual Studio 14 2015 Win64\r
-    ) else (\r
-        set CMAKE_GENERATOR=Visual Studio 14 2015\r
-    )\r
-)\r
-\r
-if /i "%VS_PLATFORM_TOOL_SET%" == "v141" (\r
-    if /i "%VS_PLATFORM%" == "x64" (\r
-        set CMAKE_GENERATOR=Visual Studio 15 2017 Win64\r
-    ) else (\r
-        set CMAKE_GENERATOR=Visual Studio 15 2017\r
-    )\r
-)\r
-\r
-if /i "%VS_PLATFORM_TOOL_SET%" == "v142" (\r
-    set CMAKE_GENERATOR=Visual Studio 16 2019\r
-    if /i "%VS_PLATFORM%" == "x64" (\r
-        set CMAKE_GENERATOR_ARCH=x64\r
-    ) else (\r
-        set CMAKE_GENERATOR_ARCH=Win32\r
-    )\r
-)\r
-\r
-set BTLS_BUILD_OUTPUT_DIR=%BTLS_BUILD_DIR%\%VS_CONFIGURATION%\r
-\r
-goto _SETUP_CMAKE_ENVIRONMENT_EXIT\r
-\r
-:_SETUP_CMAKE_ENVIRONMENT_NINJA_GENERATOR\r
-\r
-if /i "%VS_TARGET%" == "build" (\r
-    echo Found Ninja: "%NINJA%"\r
-    echo Using Ninja build generator, enabling full assembler build.\r
-)\r
-\r
-set CMAKE_GENERATOR_ARCH=\r
-set CMAKE_GENERATOR=Ninja\r
-set BTLS_BUILD_OUTPUT_DIR=%BTLS_BUILD_DIR%\r
-set BTLS_NO_ASM_SUPPORT=0\r
-\r
-:_SETUP_CMAKE_ENVIRONMENT_EXIT\r
-\r
-goto :EOF\r
-\r
-@echo on\r
+"%GIT%" submodule update --init -- "%BTLS_DIR%"
+if not ERRORLEVEL == 0 (
+    "%GIT%" submodule init -- "%BTLS_DIR%"
+    "%GIT%" submodule update -- "%BTLS_DIR%"
+    if not ERRORLEVEL == 0 (
+        echo Git boringssl submodules failed to updated. You may experience compilation problems if some submodules are out of date.
+    )
+)
+
+if not exist "%BTLS_DIR%" (
+    echo Could not find "%BTLS_DIR%".
+    goto ON_ERROR
+)
+
+if not exist "%BTLS_BUILD_DIR%" (
+    mkdir "%BTLS_BUILD_DIR%"
+)
+
+cd "%BTLS_BUILD_DIR%"
+
+:: Make sure cmake pick up msvc toolchain regardless of selected generator (Visual Studio|Ninja)
+set CC=%CL_BIN_NAME%
+set CXX=%CL_BIN_NAME%
+
+set BTLS_BUILD_TYPE=
+set CMAKE_GENERATOR_TOOLSET=
+if /i "%CMAKE_GENERATOR%" == "ninja" (
+    set BTLS_BUILD_TYPE=-D CMAKE_BUILD_TYPE=%VS_CONFIGURATION%
+) else (
+    set CMAKE_GENERATOR_TOOLSET=%VS_PLATFORM_TOOL_SET%
+)
+
+if not "%CMAKE_GENERATOR_ARCH%" == "" (
+    set CMAKE_GENERATOR_ARCH=-A %CMAKE_GENERATOR_ARCH%
+)
+
+:: Run cmake.
+"%CMAKE%" ^
+-D BTLS_ROOT:PATH="%BTLS_DIR%" ^
+-D SRC_DIR:PATH="%MONO_BTLS_DIR%" ^
+-D BTLS_CFLAGS="%BTLS_CFLAGS%" ^
+-D OPENSSL_NO_ASM=%BTLS_NO_ASM_SUPPORT% ^
+-D BTLS_ARCH="%BTLS_ARCH%" ^
+-D BUILD_SHARED_LIBS=1 ^
+-D CMAKE_SYSTEM_VERSION=%VS_WIN_SDK_VERSION% ^
+%CMAKE_GENERATOR_TOOLSET% ^
+%BTLS_BUILD_TYPE% ^
+-G "%CMAKE_GENERATOR%" ^
+%CMAKE_GENERATOR_ARCH% ^
+"%MONO_BTLS_DIR%"
+
+if not ERRORLEVEL == 0 (
+    goto ON_ERROR
+)
+
+if /i "%CMAKE_GENERATOR%" == "ninja" (
+    :: Build BTLS using ninja build system.
+    call "%NINJA%" -j4 || (
+        goto ON_ERROR
+    )
+) else (
+    :: Build BTLS using msbuild build system.
+    call "%MSBUILD%" mono-btls.sln /p:Configuration=%VS_CONFIGURATION% /p:Platform=%VS_PLATFORM% /t:%VS_TARGET% /v:m /nologo /m || (
+        goto ON_ERROR
+    )
+)
+
+:ON_INSTALL_BTLS
+
+if not exist "%BTLS_BUILD_OUTPUT_DIR%\libmono-btls-shared.dll" (
+    echo Missing btls build output, "%BTLS_BUILD_OUTPUT_DIR%\libmono-btls-shared.dll"
+    goto ON_ERROR
+)
+
+:: Make sure build output folder exists.
+if not exist "%MONO_DIST_DIR%" (
+    echo Could not find "%MONO_DIST_DIR%", creating folder for build output.
+    mkdir "%MONO_DIST_DIR%"
+)
+
+:: Copy files into distribution directory.
+copy /Y "%BTLS_BUILD_OUTPUT_DIR%\libmono-btls-shared.dll" "%MONO_DIST_DIR%" >nul 2>&1
+
+if exist "%BTLS_BUILD_OUTPUT_DIR%\libmono-btls-shared.pdb" (
+    copy /Y "%BTLS_BUILD_OUTPUT_DIR%\libmono-btls-shared.pdb" "%MONO_DIST_DIR%" >nul 2>&1
+)
+
+goto ON_SUCCESS
+
+:ON_CLEAN_BTLS
+
+if exist "%BTLS_BUILD_DIR%\build.ninja" (
+    pushd
+    cd "%BTLS_BUILD_DIR%"
+    call "%NINJA%" clean
+    popd
+)
+
+if exist "%BTLS_BUILD_DIR%\mono-btls.sln" (
+    "%MSBUILD%" "%BTLS_BUILD_DIR%\mono-btls.sln" /p:Configuration=%VS_CONFIGURATION% /p:Platform=%VS_PLATFORM% /t:Clean /v:m /nologo
+)
+
+goto ON_SUCCESS
+
+:ON_SUCCESS
+
+set BUILD_RESULT=0
+goto ON_EXIT
+
+:ECHO_USAGE:
+    ECHO Usage: build-btls.bat [mono_btls_src_dir] [btls_src_dir] [btls_build_dir] [mono_dist_dir] [vs_cflags] [vs_plaform] [vs_configuration].
+
+:ON_ERROR
+    echo Failed to build BTLS.
+    goto ON_EXIT
+
+:ON_EXIT
+    exit /b %BUILD_RESULT%
+
+:: ##############################################################################################################################
+:: Functions
+
+:: --------------------------------------------------
+:: Locates PATHS to installed common extension tools.
+:: %1 Output, variable including paths.
+:: --------------------------------------------------
+:FIND_VS_COMMON_EXTENSION_TOOLS_PATHS
+
+set VS_COMMON_EXTENSION_PATH=
+if exist "%VSWHERE_TOOLS_BIN%" (
+    for /f "tokens=*" %%a in ('"%VSWHERE_TOOLS_BIN%" -version [16.0^,17.0] -property installationPath') do (
+        set VS_COMMON_EXTENSION_PATH=%%a\Common7\IDE\CommonExtensions\Microsoft
+    )
+)
+
+if exist "%VS_COMMON_EXTENSION_PATH%" (
+    set "%~1=%VS_COMMON_EXTENSION_PATH%\TeamFoundation\Team Explorer\Git\cmd;%VS_COMMON_EXTENSION_PATH%\CMake\CMake\bin;%VS_COMMON_EXTENSION_PATH%\CMake\Ninja"
+)
+
+goto :EOF
+
+:: --------------------------------------------------
+:: Finds a program using environment.
+::
+:: %1 Existing program to check for.
+:: %2 Name of binary to locate.
+:: %3 Output, variable to set if found requested program.
+:: --------------------------------------------------
+:FIND_PROGRAM
+
+:: If not set by caller, check environment for program.
+if exist "%~1" (
+    goto :EOF
+)
+
+call where /q "%~2" && (
+    for /f "delims=" %%a in ('where "%~2"') do (
+        set "%~3=%%a"
+    )
+) || (
+    set "%~3="
+)
+
+goto :EOF
+
+:: --------------------------------------------------
+:: Setup up cmake build environment, including generator, build tools and variables.
+:: --------------------------------------------------
+:SETUP_CMAKE_ENVIRONMENT
+
+:: If not set by caller, check environment for working cmake.exe.
+call :FIND_PROGRAM "%CMAKE%" "%CMAKE_BIN_NAME%" CMAKE
+if "%CMAKE%" == "" (
+    goto _SETUP_CMAKE_ENVIRONMENT_EXIT
+)
+
+if /i "%VS_TARGET%" == "build" (
+    echo Found CMake: "%CMAKE%"
+)
+
+if /i "%FORCE_MSBUILD%" == "true" (
+    goto _SETUP_CMAKE_ENVIRONMENT_VS_GENERATOR
+)
+
+:: Check for optional cmake generate and build tools for full BTLS assembler supported build. NOTE, currently BTLS assembler build
+:: can't be done using Visual Studio and must use ninja build generator + yasm and perl.
+call :FIND_PROGRAM "%NINJA%" "%NINJA_BIN_NAME%" NINJA
+call :FIND_PROGRAM "%YASM%" "%YASM_BIN_NAME%" YASM
+call :FIND_PROGRAM "%PERL%" "%PERL_BIN_NAME%" PERL
+
+if not "%NINJA%" == "" if not "%YASM%" == "" if not "%PERL%" == "" (
+    goto _SETUP_CMAKE_ENVIRONMENT_NINJA_GENERATOR
+)
+
+:_SETUP_CMAKE_ENVIRONMENT_VS_GENERATOR
+
+if /i "%VS_TARGET%" == "build" (
+    echo Using Visual Studio build generator, disabling full assembler build.
+)
+
+set CMAKE_GENERATOR_ARCH=
+
+:: Detect VS platform tool set to use matching cmake generator.
+if /i "%VS_PLATFORM_TOOL_SET%" == "v140" (
+    if /i "%VS_PLATFORM%" == "x64" (
+        set CMAKE_GENERATOR=Visual Studio 14 2015 Win64
+    ) else (
+        set CMAKE_GENERATOR=Visual Studio 14 2015
+    )
+)
+
+if /i "%VS_PLATFORM_TOOL_SET%" == "v141" (
+    if /i "%VS_PLATFORM%" == "x64" (
+        set CMAKE_GENERATOR=Visual Studio 15 2017 Win64
+    ) else (
+        set CMAKE_GENERATOR=Visual Studio 15 2017
+    )
+)
+
+if /i "%VS_PLATFORM_TOOL_SET%" == "v142" (
+    set CMAKE_GENERATOR=Visual Studio 16 2019
+    if /i "%VS_PLATFORM%" == "x64" (
+        set CMAKE_GENERATOR_ARCH=x64
+    ) else (
+        set CMAKE_GENERATOR_ARCH=Win32
+    )
+)
+
+set BTLS_BUILD_OUTPUT_DIR=%BTLS_BUILD_DIR%\%VS_CONFIGURATION%
+
+goto _SETUP_CMAKE_ENVIRONMENT_EXIT
+
+:_SETUP_CMAKE_ENVIRONMENT_NINJA_GENERATOR
+
+if /i "%VS_TARGET%" == "build" (
+    echo Found Ninja: "%NINJA%"
+    echo Using Ninja build generator, enabling full assembler build.
+)
+
+set CMAKE_GENERATOR_ARCH=
+set CMAKE_GENERATOR=Ninja
+set BTLS_BUILD_OUTPUT_DIR=%BTLS_BUILD_DIR%
+set BTLS_NO_ASM_SUPPORT=0
+
+:_SETUP_CMAKE_ENVIRONMENT_EXIT
+
+goto :EOF
+
+@echo on
index 6976818..95b0fb6 100755 (executable)
-:: --------------------------------------------------\r
-:: Run full LLVM build using msvc toolchain and available cmake generator.\r
-:: Script needs to be run from within a matching build environment, x86|x64.\r
-:: When executed from withing Visual Studio build environment current\r
-:: build environment will be inherited by script.\r
-::\r
-:: %1 LLVM source root directory.\r
-:: %2 LLVM build root directory.\r
-:: %3 LLVM install root directory.\r
-:: %4 Mono distribution root directory.\r
-:: %5 VS CFLAGS.\r
-:: %6 Additional CMake arguments.\r
-:: %7 VS platform (Win32/x64).\r
-:: %8 VS configuration (Debug/Release).\r
-:: %9 VS target.\r
-:: %9 VS PlatformToolSet, if used.\r
-:: %10 Win SDK, if used.\r
-:: %11 MsBuild bin path, if used.\r
-:: %12 Force MSBuild (true/false), if used.\r
-:: --------------------------------------------------\r
-\r
-@echo off\r
-setlocal\r
-\r
-set BUILD_RESULT=1\r
-\r
-set BUILD_EXTERNAL_LLVM_SCRIPT_PATH=%~dp0\r
-\r
-set CL_BIN_NAME=cl.exe\r
-set LINK_BIN_NAME=link.exe\r
-set GIT_BIN_NAME=git.exe\r
-set CMAKE_BIN_NAME=cmake.exe\r
-set NINJA_BIN_NAME=ninja.exe\r
-set PYTHON_BIN_NAME=python.exe\r
-\r
-set LLVM_DIR=%~1\r
-shift\r
-set LLVM_BUILD_DIR=%~1\r
-shift\r
-set LLVM_INSTALL_DIR=%~1\r
-shift\r
-set MONO_DIST_DIR=%~1\r
-shift\r
-set VS_CFLAGS=%~1\r
-shift\r
-set LLVM_ADDITIONAL_CMAKE_ARGS=%~1\r
-shift\r
-set VS_PLATFORM=%~1\r
-shift\r
-set VS_CONFIGURATION=%~1\r
-shift\r
-set VS_TARGET=%~1\r
-shift\r
-set VS_PLATFORM_TOOL_SET=%~1\r
-shift\r
-set VS_WIN_SDK_VERSION=%~1\r
-shift\r
-set MSBUILD_BIN_PATH=%~1\r
-shift\r
-set FORCE_MSBUILD=%~1\r
-\r
-:: Setup toolchain.\r
-:: set GIT=\r
-:: set CMAKE=\r
-:: set NINJA=\r
-set MSBUILD=%MSBUILD_BIN_PATH%msbuild.exe\r
-\r
-if "%LLVM_DIR%" == "" (\r
-    echo Missing LLVM source directory argument.\r
-    goto ECHO_USAGE\r
-)\r
-\r
-if "%LLVM_BUILD_DIR%" == "" (\r
-    echo Missing LLVM build directory argument.\r
-    goto ECHO_USAGE\r
-)\r
-\r
-if "%LLVM_INSTALL_DIR%" == "" (\r
-    echo Missing LLVM install directory argument.\r
-    goto ECHO_USAGE\r
-)\r
-\r
-if "%MONO_DIST_DIR%" == "" (\r
-    echo Missing Mono dist directory argument.\r
-    goto ECHO_USAGE\r
-)\r
-\r
-if "%VS_CFLAGS%" == "" (\r
-    echo Missing CFLAGS argument.\r
-    goto ECHO_USAGE\r
-)\r
-\r
-if "%VS_PLATFORM%" == "" (\r
-    set VS_PLATFORM=x64\r
-)\r
-\r
-if "%VS_CONFIGURATION%" == "" (\r
-    set VS_CONFIGURATION=Release\r
-)\r
-\r
-if "%VS_TARGET%" == "" (\r
-    set VS_TARGET=Build\r
-)\r
-\r
-if "%VS_PLATFORM_TOOL_SET%" == "" (\r
-    set VS_PLATFORM_TOOL_SET=v142\r
-)\r
-\r
-if "%VS_WIN_SDK_VERSION%" == "" (\r
-    set VS_WIN_SDK_VERSION=10.0\r
-)\r
-\r
-if "%FORCE_MSBUILD%" == "" (\r
-    set FORCE_MSBUILD=false\r
-)\r
-\r
-set LLVM_CFLAGS=%VS_CFLAGS%\r
-set LLVM_ARCH=x86_64\r
-if /i "%VS_PLATFORM%" == "win32" (\r
-    set LLVM_ARCH=i386\r
-)\r
-\r
-:: VS2017/VS2019 includes vswhere.exe that can be used to locate current VS installation.\r
-set VSWHERE_TOOLS_BIN=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe\r
-set VS_COMMON_EXTENSION_TOOLS_PATHS=\r
-\r
-:: Check if executed from VS2015/VS2017/2019 build environment.\r
-if "%VisualStudioVersion%" == "14.0" (\r
-    if /i not "%VS_PLATFORM_TOOL_SET%" == "v140" (\r
-        echo VisualStudioVersion/PlatformToolchain missmatch, forcing msbuild.\r
-        set FORCE_MSBUILD=true\r
-    )\r
-    goto ON_ENV_OK\r
-)\r
-\r
-if "%VisualStudioVersion%" == "15.0" (\r
-    if /i not "%VS_PLATFORM_TOOL_SET%" == "v141" (\r
-        echo VisualStudioVersion/PlatformToolchain missmatch, forcing msbuild.\r
-        set FORCE_MSBUILD=true\r
-    )\r
-    goto ON_ENV_OK\r
-)\r
-\r
-if "%VisualStudioVersion%" == "16.0" (\r
-    if /i not "%VS_PLATFORM_TOOL_SET%" == "v142" (\r
-        echo VisualStudioVersion/PlatformToolchain missmatch, forcing msbuild.\r
-        set FORCE_MSBUILD=true\r
-    )\r
-    goto ON_ENV_OK\r
-)\r
-\r
-:: Executed outside VS2015/VS2017/VS2019 build environment, try to locate Visual Studio C/C++ compiler and linker.\r
-call :FIND_PROGRAM "" "%CL_BIN_NAME%" CL_PATH\r
-if "%CL_PATH%" == "" (\r
-    goto ON_ENV_WARNING\r
-)\r
-\r
-call :FIND_PROGRAM "" "%LINK_BIN_NAME%" LINK_PATH\r
-if "%LINK_PATH%" == "" (\r
-    goto ON_ENV_WARNING\r
-)\r
-\r
-goto ON_ENV_OK\r
-\r
-:ON_ENV_WARNING\r
-\r
-set VSWHERE_TOOLS_BIN=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe\r
-\r
-:: VS 2019.\r
-if exist "%VSWHERE_TOOLS_BIN%" (\r
-    echo For VS2019 builds, make sure to run this from within Visual Studio build or using "x86|x64 Native Tools Command Prompt for VS2019" command prompt.\r
-    for /f "tokens=*" %%a IN ('"%VSWHERE_TOOLS_BIN%" -version [16.0^,17.0] -property installationPath') do (\r
-        echo Setup a "x86|x64 Native Tools Command Prompt for VS2019" command prompt by using "%%a\VC\Auxiliary\Build\vcvars32.bat|vcvars64.bat".\r
-        goto ON_ENV_WARNING_DONE\r
-    )\r
-)\r
-\r
-:: VS 2017.\r
-if exist "%VSWHERE_TOOLS_BIN%" (\r
-    echo For VS2017 builds, make sure to run this from within Visual Studio build or using "x86|x64 Native Tools Command Prompt for VS2017" command prompt.\r
-    for /f "tokens=*" %%a IN ('"%VSWHERE_TOOLS_BIN%" -version [15.0^,16.0] -property installationPath') do (\r
-        echo Setup a "x86|x64 Native Tools Command Prompt for VS2017" command prompt by using "%%a\VC\Auxiliary\Build\vcvars32.bat|vcvars64.bat".\r
-        goto ON_ENV_WARNING_DONE\r
-    )\r
-)\r
-\r
-:: VS 2015.\r
-set VC_VARS_ALL_FILE=%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat\r
-IF EXIST "%VC_VARS_ALL_FILE%" (\r
-    echo For VS2015 builds, make sure to run this from within Visual Studio build or using "VS2015 x86|x64 Native Tools Command Prompt" command prompt.\r
-    echo Setup a "VS2015 x86|x64 Native Tools Command Prompt" command prompt by using "%VC_VARS_ALL_FILE% x86|amd64".\r
-    goto ON_ENV_WARNING_DONE\r
-)\r
-\r
-:ON_ENV_WARNING_DONE\r
-\r
-echo Could not detect Visual Studio build environment. You may experience build problems if wrong toolchain is auto detected.\r
-\r
-:ON_ENV_OK\r
-\r
-:: Append paths to VS installed common extension tools at end of PATH (Vs2017/VS2019).\r
-call :FIND_VS_COMMON_EXTENSION_TOOLS_PATHS VS_COMMON_EXTENSION_TOOLS_PATHS\r
-if not "%VS_COMMON_EXTENSION_TOOLS_PATHS%" == "" (\r
-    set "PATH=%PATH%;%VS_COMMON_EXTENSION_TOOLS_PATHS%"\r
-)\r
-\r
-:: Setup all cmake related generator, tools and variables.\r
-call :SETUP_CMAKE_ENVIRONMENT\r
-if "%CMAKE%" == "" (\r
-    echo Failed to located working %CMAKE_BIN_NAME%, needs to be accessible in PATH or set using CMAKE environment variable.\r
-    goto ON_ERROR\r
-)\r
-\r
-if "%CMAKE_GENERATOR%" == "" (\r
-    echo Failed to setup cmake generator.\r
-    goto ON_ERROR\r
-)\r
-\r
-:: Check target.\r
-if /i "%VS_TARGET%" == "build" (\r
-    goto ON_BUILD_LLVM\r
-)\r
-\r
-if /i "%VS_TARGET%" == "install" (\r
-    goto ON_INSTALL_LLVM\r
-)\r
-\r
-if /i "%VS_TARGET%" == "clean" (\r
-    goto ON_CLEAN_LLVM\r
-)\r
-\r
-:ON_BUILD_LLVM\r
-\r
-:: If not set by caller, check environment for working git.exe.\r
-call :FIND_PROGRAM "%GIT%" "%GIT_BIN_NAME%" GIT\r
-if "%GIT%" == "" (\r
-    echo Failed to located working %GIT_BIN_NAME%, needs to be accessible in PATH or set using GIT environment variable.\r
-    goto ON_ERROR\r
-)\r
-\r
-:: Make sure llvm submodule is up to date.\r
+:: --------------------------------------------------
+:: Run full LLVM build using msvc toolchain and available cmake generator.
+:: Script needs to be run from within a matching build environment, x86|x64.
+:: When executed from withing Visual Studio build environment current
+:: build environment will be inherited by script.
+::
+:: %1 LLVM source root directory.
+:: %2 LLVM build root directory.
+:: %3 LLVM install root directory.
+:: %4 Mono distribution root directory.
+:: %5 VS CFLAGS.
+:: %6 Additional CMake arguments.
+:: %7 VS platform (Win32/x64).
+:: %8 VS configuration (Debug/Release).
+:: %9 VS target.
+:: %9 VS PlatformToolSet, if used.
+:: %10 Win SDK, if used.
+:: %11 MsBuild bin path, if used.
+:: %12 Force MSBuild (true/false), if used.
+:: --------------------------------------------------
+
+@echo off
+setlocal
+
+set BUILD_RESULT=1
+
+set BUILD_EXTERNAL_LLVM_SCRIPT_PATH=%~dp0
+
+set CL_BIN_NAME=cl.exe
+set LINK_BIN_NAME=link.exe
+set GIT_BIN_NAME=git.exe
+set CMAKE_BIN_NAME=cmake.exe
+set NINJA_BIN_NAME=ninja.exe
+set PYTHON_BIN_NAME=python.exe
+
+set LLVM_DIR=%~1
+shift
+set LLVM_BUILD_DIR=%~1
+shift
+set LLVM_INSTALL_DIR=%~1
+shift
+set MONO_DIST_DIR=%~1
+shift
+set VS_CFLAGS=%~1
+shift
+set LLVM_ADDITIONAL_CMAKE_ARGS=%~1
+shift
+set VS_PLATFORM=%~1
+shift
+set VS_CONFIGURATION=%~1
+shift
+set VS_TARGET=%~1
+shift
+set VS_PLATFORM_TOOL_SET=%~1
+shift
+set VS_WIN_SDK_VERSION=%~1
+shift
+set MSBUILD_BIN_PATH=%~1
+shift
+set FORCE_MSBUILD=%~1
+
+:: Setup toolchain.
+:: set GIT=
+:: set CMAKE=
+:: set NINJA=
+set MSBUILD=%MSBUILD_BIN_PATH%msbuild.exe
+
+if "%LLVM_DIR%" == "" (
+    echo Missing LLVM source directory argument.
+    goto ECHO_USAGE
+)
+
+if "%LLVM_BUILD_DIR%" == "" (
+    echo Missing LLVM build directory argument.
+    goto ECHO_USAGE
+)
+
+if "%LLVM_INSTALL_DIR%" == "" (
+    echo Missing LLVM install directory argument.
+    goto ECHO_USAGE
+)
+
+if "%MONO_DIST_DIR%" == "" (
+    echo Missing Mono dist directory argument.
+    goto ECHO_USAGE
+)
+
+if "%VS_CFLAGS%" == "" (
+    echo Missing CFLAGS argument.
+    goto ECHO_USAGE
+)
+
+if "%VS_PLATFORM%" == "" (
+    set VS_PLATFORM=x64
+)
+
+if "%VS_CONFIGURATION%" == "" (
+    set VS_CONFIGURATION=Release
+)
+
+if "%VS_TARGET%" == "" (
+    set VS_TARGET=Build
+)
+
+if "%VS_PLATFORM_TOOL_SET%" == "" (
+    set VS_PLATFORM_TOOL_SET=v142
+)
+
+if "%VS_WIN_SDK_VERSION%" == "" (
+    set VS_WIN_SDK_VERSION=10.0
+)
+
+if "%FORCE_MSBUILD%" == "" (
+    set FORCE_MSBUILD=false
+)
+
+set LLVM_CFLAGS=%VS_CFLAGS%
+set LLVM_ARCH=x86_64
+if /i "%VS_PLATFORM%" == "win32" (
+    set LLVM_ARCH=i386
+)
+
+:: VS2017/VS2019 includes vswhere.exe that can be used to locate current VS installation.
+set VSWHERE_TOOLS_BIN=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
+set VS_COMMON_EXTENSION_TOOLS_PATHS=
+
+:: Check if executed from VS2015/VS2017/2019 build environment.
+if "%VisualStudioVersion%" == "14.0" (
+    if /i not "%VS_PLATFORM_TOOL_SET%" == "v140" (
+        echo VisualStudioVersion/PlatformToolchain missmatch, forcing msbuild.
+        set FORCE_MSBUILD=true
+    )
+    goto ON_ENV_OK
+)
+
+if "%VisualStudioVersion%" == "15.0" (
+    if /i not "%VS_PLATFORM_TOOL_SET%" == "v141" (
+        echo VisualStudioVersion/PlatformToolchain missmatch, forcing msbuild.
+        set FORCE_MSBUILD=true
+    )
+    goto ON_ENV_OK
+)
+
+if "%VisualStudioVersion%" == "16.0" (
+    if /i not "%VS_PLATFORM_TOOL_SET%" == "v142" (
+        echo VisualStudioVersion/PlatformToolchain missmatch, forcing msbuild.
+        set FORCE_MSBUILD=true
+    )
+    goto ON_ENV_OK
+)
+
+:: Executed outside VS2015/VS2017/VS2019 build environment, try to locate Visual Studio C/C++ compiler and linker.
+call :FIND_PROGRAM "" "%CL_BIN_NAME%" CL_PATH
+if "%CL_PATH%" == "" (
+    goto ON_ENV_WARNING
+)
+
+call :FIND_PROGRAM "" "%LINK_BIN_NAME%" LINK_PATH
+if "%LINK_PATH%" == "" (
+    goto ON_ENV_WARNING
+)
+
+goto ON_ENV_OK
+
+:ON_ENV_WARNING
+
+set VSWHERE_TOOLS_BIN=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
+
+:: VS 2019.
+if exist "%VSWHERE_TOOLS_BIN%" (
+    echo For VS2019 builds, make sure to run this from within Visual Studio build or using "x86|x64 Native Tools Command Prompt for VS2019" command prompt.
+    for /f "tokens=*" %%a IN ('"%VSWHERE_TOOLS_BIN%" -version [16.0^,17.0] -property installationPath') do (
+        echo Setup a "x86|x64 Native Tools Command Prompt for VS2019" command prompt by using "%%a\VC\Auxiliary\Build\vcvars32.bat|vcvars64.bat".
+        goto ON_ENV_WARNING_DONE
+    )
+)
+
+:: VS 2017.
+if exist "%VSWHERE_TOOLS_BIN%" (
+    echo For VS2017 builds, make sure to run this from within Visual Studio build or using "x86|x64 Native Tools Command Prompt for VS2017" command prompt.
+    for /f "tokens=*" %%a IN ('"%VSWHERE_TOOLS_BIN%" -version [15.0^,16.0] -property installationPath') do (
+        echo Setup a "x86|x64 Native Tools Command Prompt for VS2017" command prompt by using "%%a\VC\Auxiliary\Build\vcvars32.bat|vcvars64.bat".
+        goto ON_ENV_WARNING_DONE
+    )
+)
+
+:: VS 2015.
+set VC_VARS_ALL_FILE=%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat
+IF EXIST "%VC_VARS_ALL_FILE%" (
+    echo For VS2015 builds, make sure to run this from within Visual Studio build or using "VS2015 x86|x64 Native Tools Command Prompt" command prompt.
+    echo Setup a "VS2015 x86|x64 Native Tools Command Prompt" command prompt by using "%VC_VARS_ALL_FILE% x86|amd64".
+    goto ON_ENV_WARNING_DONE
+)
+
+:ON_ENV_WARNING_DONE
+
+echo Could not detect Visual Studio build environment. You may experience build problems if wrong toolchain is auto detected.
+
+:ON_ENV_OK
+
+:: Append paths to VS installed common extension tools at end of PATH (Vs2017/VS2019).
+call :FIND_VS_COMMON_EXTENSION_TOOLS_PATHS VS_COMMON_EXTENSION_TOOLS_PATHS
+if not "%VS_COMMON_EXTENSION_TOOLS_PATHS%" == "" (
+    set "PATH=%PATH%;%VS_COMMON_EXTENSION_TOOLS_PATHS%"
+)
+
+:: Setup all cmake related generator, tools and variables.
+call :SETUP_CMAKE_ENVIRONMENT
+if "%CMAKE%" == "" (
+    echo Failed to located working %CMAKE_BIN_NAME%, needs to be accessible in PATH or set using CMAKE environment variable.
+    goto ON_ERROR
+)
+
+if "%CMAKE_GENERATOR%" == "" (
+    echo Failed to setup cmake generator.
+    goto ON_ERROR
+)
+
+:: Check target.
+if /i "%VS_TARGET%" == "build" (
+    goto ON_BUILD_LLVM
+)
+
+if /i "%VS_TARGET%" == "install" (
+    goto ON_INSTALL_LLVM
+)
+
+if /i "%VS_TARGET%" == "clean" (
+    goto ON_CLEAN_LLVM
+)
+
+:ON_BUILD_LLVM
+
+:: If not set by caller, check environment for working git.exe.
+call :FIND_PROGRAM "%GIT%" "%GIT_BIN_NAME%" GIT
+if "%GIT%" == "" (
+    echo Failed to located working %GIT_BIN_NAME%, needs to be accessible in PATH or set using GIT environment variable.
+    goto ON_ERROR
+)
+
+:: Make sure llvm submodule is up to date.
 echo Updating submodule "%LLVM_DIR%"
-"%GIT%" submodule update --init -- "%LLVM_DIR%"\r
-if not ERRORLEVEL == 0 (\r
-    "%GIT%" submodule init -- "%LLVM_DIR%"\r
-    "%GIT%" submodule update -- "%LLVM_DIR%"\r
-    if not ERRORLEVEL == 0 (\r
-        echo Git llvm submodules failed to updated. You may experience compilation problems if some submodules are out of date.\r
-    )\r
-)\r
-\r
-if not exist "%LLVM_DIR%" (\r
-    echo Could not find "%LLVM_DIR%".\r
-    goto ON_ERROR\r
-)\r
-\r
-if not exist "%LLVM_BUILD_DIR%" (\r
-    mkdir "%LLVM_BUILD_DIR%"\r
-)\r
-\r
-cd "%LLVM_BUILD_DIR%"\r
-\r
-:: Make sure cmake pick up msvc toolchain regardless of selected generator (Visual Studio|Ninja)\r
-set CC=%CL_BIN_NAME%\r
-set CXX=%CL_BIN_NAME%\r
-\r
-set CMAKE_GENERATOR_ARGS=\r
-set CMAKE_GENERATOR_TOOLSET=\r
-if /i "%CMAKE_GENERATOR%" == "ninja" (\r
-    set CMAKE_GENERATOR_ARGS=-DCMAKE_BUILD_TYPE=%VS_CONFIGURATION%\r
-) else (\r
-    set CMAKE_GENERATOR_ARGS=-Thost=x64\r
-    set CMAKE_GENERATOR_TOOLSET=%VS_PLATFORM_TOOL_SET%\r
-)\r
-\r
-if not "%CMAKE_GENERATOR_ARCH%" == "" (\r
-    set CMAKE_GENERATOR_ARCH=-A %CMAKE_GENERATOR_ARCH%\r
-)\r
-\r
+"%GIT%" submodule update --init -- "%LLVM_DIR%"
+if not ERRORLEVEL == 0 (
+    "%GIT%" submodule init -- "%LLVM_DIR%"
+    "%GIT%" submodule update -- "%LLVM_DIR%"
+    if not ERRORLEVEL == 0 (
+        echo Git llvm submodules failed to updated. You may experience compilation problems if some submodules are out of date.
+    )
+)
+
+if not exist "%LLVM_DIR%" (
+    echo Could not find "%LLVM_DIR%".
+    goto ON_ERROR
+)
+
+if not exist "%LLVM_BUILD_DIR%" (
+    mkdir "%LLVM_BUILD_DIR%"
+)
+
+cd "%LLVM_BUILD_DIR%"
+
+:: Make sure cmake pick up msvc toolchain regardless of selected generator (Visual Studio|Ninja)
+set CC=%CL_BIN_NAME%
+set CXX=%CL_BIN_NAME%
+
+set CMAKE_GENERATOR_ARGS=
+set CMAKE_GENERATOR_TOOLSET=
+if /i "%CMAKE_GENERATOR%" == "ninja" (
+    set CMAKE_GENERATOR_ARGS=-DCMAKE_BUILD_TYPE=%VS_CONFIGURATION%
+) else (
+    set CMAKE_GENERATOR_ARGS=-Thost=x64
+    set CMAKE_GENERATOR_TOOLSET=%VS_PLATFORM_TOOL_SET%
+)
+
+if not "%CMAKE_GENERATOR_ARCH%" == "" (
+    set CMAKE_GENERATOR_ARCH=-A %CMAKE_GENERATOR_ARCH%
+)
+
 :: Check if LLVM_DIR is just repro root or if we should build
 :: a llvm subfolder within that repository.
 set "LLVM_SOURCE_DIR=%LLVM_DIR%"
@@ -284,225 +284,225 @@ if exist "%LLVM_SOURCE_DIR%\llvm\CMakeLists.txt" (
        set "LLVM_SOURCE_DIR=%LLVM_DIR%\llvm"
 )
 
-:: Run cmake.\r
-"%CMAKE%" ^\r
--DCMAKE_INSTALL_PREFIX="%LLVM_INSTALL_DIR%" ^\r
--DLLVM_TARGETS_TO_BUILD="X86;ARM;AArch64" ^\r
--DLLVM_BUILD_TESTS=Off ^\r
--DLLVM_INCLUDE_TESTS=Off ^\r
--DLLVM_BUILD_EXAMPLES=Off ^\r
--DLLVM_INCLUDE_EXAMPLES=Off ^\r
--DLLVM_TOOLS_TO_BUILD="opt;llc;llvm-config;llvm-dis;llvm-mc;llvm-as" ^\r
--DLLVM_ENABLE_LIBXML2=Off ^\r
--DCMAKE_SYSTEM_PROCESSOR="%LLVM_ARCH%" ^\r
--D CMAKE_SYSTEM_VERSION=%VS_WIN_SDK_VERSION% ^\r
-%CMAKE_GENERATOR_TOOLSET% ^\r
-%LLVM_ADDITIONAL_CMAKE_ARGS% ^\r
-%CMAKE_GENERATOR_ARGS% ^\r
--G "%CMAKE_GENERATOR%" ^\r
-%CMAKE_GENERATOR_ARCH% ^\r
+:: Run cmake.
+"%CMAKE%" ^
+-DCMAKE_INSTALL_PREFIX="%LLVM_INSTALL_DIR%" ^
+-DLLVM_TARGETS_TO_BUILD="X86;ARM;AArch64" ^
+-DLLVM_BUILD_TESTS=Off ^
+-DLLVM_INCLUDE_TESTS=Off ^
+-DLLVM_BUILD_EXAMPLES=Off ^
+-DLLVM_INCLUDE_EXAMPLES=Off ^
+-DLLVM_TOOLS_TO_BUILD="opt;llc;llvm-config;llvm-dis;llvm-mc;llvm-as" ^
+-DLLVM_ENABLE_LIBXML2=Off ^
+-DCMAKE_SYSTEM_PROCESSOR="%LLVM_ARCH%" ^
+-D CMAKE_SYSTEM_VERSION=%VS_WIN_SDK_VERSION% ^
+%CMAKE_GENERATOR_TOOLSET% ^
+%LLVM_ADDITIONAL_CMAKE_ARGS% ^
+%CMAKE_GENERATOR_ARGS% ^
+-G "%CMAKE_GENERATOR%" ^
+%CMAKE_GENERATOR_ARCH% ^
 "%LLVM_SOURCE_DIR%"
-\r
-if not ERRORLEVEL == 0 (\r
-    goto ON_ERROR\r
-)\r
-\r
-if /i "%CMAKE_GENERATOR%" == "ninja" (\r
-    :: Build LLVM using ninja build system.\r
-    call "%NINJA%" -j4 || (\r
-        goto ON_ERROR\r
-    )\r
-) else (\r
-    :: Build LLVM using msbuild build system.\r
-    call "%MSBUILD%" llvm.sln /p:Configuration=%VS_CONFIGURATION% /p:Platform=%VS_PLATFORM% /t:%VS_TARGET% /v:m /nologo /m || (\r
-        goto ON_ERROR\r
-    )\r
-)\r
-\r
-:ON_INSTALL_LLVM\r
-\r
-:: Make sure build install folder exists.\r
-if not exist "%LLVM_INSTALL_DIR%" (\r
-    echo Could not find "%LLVM_INSTALL_DIR%", creating folder for build output.\r
-    mkdir "%LLVM_INSTALL_DIR%"\r
-)\r
-\r
-:: Make sure Mono dist folder exists.\r
-if not exist "%MONO_DIST_DIR%" (\r
-    echo Could not find "%MONO_DIST_DIR%", creating folder for build output.\r
-    mkdir "%MONO_DIST_DIR%"\r
-)\r
-\r
-if exist "%LLVM_BUILD_DIR%\build.ninja" (\r
-    pushd\r
-    cd "%LLVM_BUILD_DIR%"\r
-    call "%NINJA%" install\r
-    popd\r
-)\r
-\r
-if exist "%LLVM_BUILD_DIR%\install.vcxproj" (\r
-    "%MSBUILD%" "%LLVM_BUILD_DIR%\install.vcxproj" /p:Configuration=%VS_CONFIGURATION% /p:Platform=%VS_PLATFORM% /v:m /nologo\r
-)\r
-\r
-call "%BUILD_EXTERNAL_LLVM_SCRIPT_PATH%\install-llvm-mono-build.bat" "%LLVM_INSTALL_DIR%" "%MONO_DIST_DIR%" || (\r
-    goto ON_ERROR\r
-)\r
-\r
-goto ON_SUCCESS\r
-\r
-:ON_CLEAN_LLVM\r
-\r
-if exist "%LLVM_BUILD_DIR%\build.ninja" (\r
-    pushd\r
-    cd "%LLVM_BUILD_DIR%"\r
-    call "%NINJA%" clean\r
-    popd\r
-)\r
-\r
-if exist "%LLVM_BUILD_DIR%\llvm.sln" (\r
-    "%MSBUILD%" "%LLVM_BUILD_DIR%\llvm.sln" /p:Configuration=%VS_CONFIGURATION% /p:Platform=%VS_PLATFORM% /t:Clean /v:m /nologo\r
-)\r
-\r
-goto ON_SUCCESS\r
-\r
-:ON_SUCCESS\r
-\r
-set BUILD_RESULT=0\r
-goto ON_EXIT\r
-\r
-:ECHO_USAGE:\r
-    ECHO Usage: build-external-llvm.bat [llvm_src_dir] [llvm_build_dir] [llvm_install_dir] [mono_dist_dir] [vs_cflags] [vs_plaform] [vs_configuration].\r
-\r
-:ON_ERROR\r
-    echo Failed to build LLVM.\r
-    goto ON_EXIT\r
-\r
-:ON_EXIT\r
-    exit /b %BUILD_RESULT%\r
-\r
-:: ##############################################################################################################################\r
-:: Functions\r
-\r
-:: --------------------------------------------------\r
-:: Locates PATHS to installed common extension tools.\r
-:: %1 Output, variable including paths.\r
-:: --------------------------------------------------\r
-:FIND_VS_COMMON_EXTENSION_TOOLS_PATHS\r
-\r
-set VS_COMMON_EXTENSION_PATH=\r
-if exist "%VSWHERE_TOOLS_BIN%" (\r
-    for /f "tokens=*" %%a in ('"%VSWHERE_TOOLS_BIN%" -version [16.0^,17.0] -property installationPath') do (\r
-        set VS_COMMON_EXTENSION_PATH=%%a\Common7\IDE\CommonExtensions\Microsoft\r
-    )\r
-)\r
-\r
-if exist "%VS_COMMON_EXTENSION_PATH%" (\r
-    set "%~1=%VS_COMMON_EXTENSION_PATH%\TeamFoundation\Team Explorer\Git\cmd;%VS_COMMON_EXTENSION_PATH%\CMake\CMake\bin;%VS_COMMON_EXTENSION_PATH%\CMake\Ninja"\r
-)\r
-\r
-goto :EOF\r
-\r
-:: --------------------------------------------------\r
-:: Finds a program using environment.\r
-::\r
-:: %1 Existing program to check for.\r
-:: %2 Name of binary to locate.\r
-:: %3 Output, variable to set if found requested program.\r
-:: --------------------------------------------------\r
-:FIND_PROGRAM\r
-\r
-:: If not set by caller, check environment for program.\r
-if exist "%~1" (\r
-    goto :EOF\r
-)\r
-\r
-call where /q "%~2" && (\r
-    for /f "delims=" %%a in ('where "%~2"') do (\r
-        set "%~3=%%a"\r
-    )\r
-) || (\r
-    set "%~3="\r
-)\r
-\r
-goto :EOF\r
-\r
-:: --------------------------------------------------\r
-:: Setup up cmake build environment, including generator, build tools and variables.\r
-:: --------------------------------------------------\r
-:SETUP_CMAKE_ENVIRONMENT\r
-\r
-:: If not set by caller, check environment for working cmake.exe.\r
-call :FIND_PROGRAM "%CMAKE%" "%CMAKE_BIN_NAME%" CMAKE\r
-if "%CMAKE%" == "" (\r
-    goto _SETUP_CMAKE_ENVIRONMENT_EXIT\r
-)\r
-\r
-if /i "%VS_TARGET%" == "build" (\r
-    echo Found CMake: "%CMAKE%"\r
-)\r
-\r
-if /i "%FORCE_MSBUILD%" == "true" (\r
-    goto _SETUP_CMAKE_ENVIRONMENT_VS_GENERATOR\r
-)\r
-\r
-:: Check for optional cmake generate and build tools.\r
-call :FIND_PROGRAM "%NINJA%" "%NINJA_BIN_NAME%" NINJA\r
-\r
-if not "%NINJA%" == "" (\r
-    goto _SETUP_CMAKE_ENVIRONMENT_NINJA_GENERATOR\r
-)\r
-\r
-:_SETUP_CMAKE_ENVIRONMENT_VS_GENERATOR\r
-\r
-if /i "%VS_TARGET%" == "build" (\r
-    echo Using Visual Studio build generator.\r
-)\r
-\r
-set CMAKE_GENERATOR_ARCH=\r
-\r
-:: Detect VS platform tool set to use matching cmake generator.\r
-if /i "%VS_PLATFORM_TOOL_SET%" == "v140" (\r
-    if /i "%VS_PLATFORM%" == "x64" (\r
-        set CMAKE_GENERATOR=Visual Studio 14 2015 Win64\r
-    ) else (\r
-        set CMAKE_GENERATOR=Visual Studio 14 2015\r
-    )\r
-)\r
-\r
-if /i "%VS_PLATFORM_TOOL_SET%" == "v141" (\r
-    if /i "%VS_PLATFORM%" == "x64" (\r
-        set CMAKE_GENERATOR=Visual Studio 15 2017 Win64\r
-    ) else (\r
-        set CMAKE_GENERATOR=Visual Studio 15 2017\r
-    )\r
-)\r
-\r
-if /i "%VS_PLATFORM_TOOL_SET%" == "v142" (\r
-    set CMAKE_GENERATOR=Visual Studio 16 2019\r
-    if /i "%VS_PLATFORM%" == "x64" (\r
-        set CMAKE_GENERATOR_ARCH=x64\r
-    ) else (\r
-        set CMAKE_GENERATOR_ARCH=Win32\r
-    )\r
-)\r
-\r
-set LLVM_BUILD_OUTPUT_DIR=%LLVM_BUILD_DIR%\%VS_CONFIGURATION%\r
-\r
-goto _SETUP_CMAKE_ENVIRONMENT_EXIT\r
-\r
-:_SETUP_CMAKE_ENVIRONMENT_NINJA_GENERATOR\r
-\r
-if /i "%VS_TARGET%" == "build" (\r
-    echo Found Ninja: "%NINJA%"\r
-    echo Using Ninja build generator.\r
-)\r
-\r
-set CMAKE_GENERATOR_ARCH=\r
-set CMAKE_GENERATOR=Ninja\r
-set LLVM_BUILD_OUTPUT_DIR=%LLVM_BUILD_DIR%\r
-\r
-:_SETUP_CMAKE_ENVIRONMENT_EXIT\r
-\r
-goto :EOF\r
-\r
-@echo on\r
+
+if not ERRORLEVEL == 0 (
+    goto ON_ERROR
+)
+
+if /i "%CMAKE_GENERATOR%" == "ninja" (
+    :: Build LLVM using ninja build system.
+    call "%NINJA%" -j4 || (
+        goto ON_ERROR
+    )
+) else (
+    :: Build LLVM using msbuild build system.
+    call "%MSBUILD%" llvm.sln /p:Configuration=%VS_CONFIGURATION% /p:Platform=%VS_PLATFORM% /t:%VS_TARGET% /v:m /nologo /m || (
+        goto ON_ERROR
+    )
+)
+
+:ON_INSTALL_LLVM
+
+:: Make sure build install folder exists.
+if not exist "%LLVM_INSTALL_DIR%" (
+    echo Could not find "%LLVM_INSTALL_DIR%", creating folder for build output.
+    mkdir "%LLVM_INSTALL_DIR%"
+)
+
+:: Make sure Mono dist folder exists.
+if not exist "%MONO_DIST_DIR%" (
+    echo Could not find "%MONO_DIST_DIR%", creating folder for build output.
+    mkdir "%MONO_DIST_DIR%"
+)
+
+if exist "%LLVM_BUILD_DIR%\build.ninja" (
+    pushd
+    cd "%LLVM_BUILD_DIR%"
+    call "%NINJA%" install
+    popd
+)
+
+if exist "%LLVM_BUILD_DIR%\install.vcxproj" (
+    "%MSBUILD%" "%LLVM_BUILD_DIR%\install.vcxproj" /p:Configuration=%VS_CONFIGURATION% /p:Platform=%VS_PLATFORM% /v:m /nologo
+)
+
+call "%BUILD_EXTERNAL_LLVM_SCRIPT_PATH%\install-llvm-mono-build.bat" "%LLVM_INSTALL_DIR%" "%MONO_DIST_DIR%" || (
+    goto ON_ERROR
+)
+
+goto ON_SUCCESS
+
+:ON_CLEAN_LLVM
+
+if exist "%LLVM_BUILD_DIR%\build.ninja" (
+    pushd
+    cd "%LLVM_BUILD_DIR%"
+    call "%NINJA%" clean
+    popd
+)
+
+if exist "%LLVM_BUILD_DIR%\llvm.sln" (
+    "%MSBUILD%" "%LLVM_BUILD_DIR%\llvm.sln" /p:Configuration=%VS_CONFIGURATION% /p:Platform=%VS_PLATFORM% /t:Clean /v:m /nologo
+)
+
+goto ON_SUCCESS
+
+:ON_SUCCESS
+
+set BUILD_RESULT=0
+goto ON_EXIT
+
+:ECHO_USAGE:
+    ECHO Usage: build-external-llvm.bat [llvm_src_dir] [llvm_build_dir] [llvm_install_dir] [mono_dist_dir] [vs_cflags] [vs_plaform] [vs_configuration].
+
+:ON_ERROR
+    echo Failed to build LLVM.
+    goto ON_EXIT
+
+:ON_EXIT
+    exit /b %BUILD_RESULT%
+
+:: ##############################################################################################################################
+:: Functions
+
+:: --------------------------------------------------
+:: Locates PATHS to installed common extension tools.
+:: %1 Output, variable including paths.
+:: --------------------------------------------------
+:FIND_VS_COMMON_EXTENSION_TOOLS_PATHS
+
+set VS_COMMON_EXTENSION_PATH=
+if exist "%VSWHERE_TOOLS_BIN%" (
+    for /f "tokens=*" %%a in ('"%VSWHERE_TOOLS_BIN%" -version [16.0^,17.0] -property installationPath') do (
+        set VS_COMMON_EXTENSION_PATH=%%a\Common7\IDE\CommonExtensions\Microsoft
+    )
+)
+
+if exist "%VS_COMMON_EXTENSION_PATH%" (
+    set "%~1=%VS_COMMON_EXTENSION_PATH%\TeamFoundation\Team Explorer\Git\cmd;%VS_COMMON_EXTENSION_PATH%\CMake\CMake\bin;%VS_COMMON_EXTENSION_PATH%\CMake\Ninja"
+)
+
+goto :EOF
+
+:: --------------------------------------------------
+:: Finds a program using environment.
+::
+:: %1 Existing program to check for.
+:: %2 Name of binary to locate.
+:: %3 Output, variable to set if found requested program.
+:: --------------------------------------------------
+:FIND_PROGRAM
+
+:: If not set by caller, check environment for program.
+if exist "%~1" (
+    goto :EOF
+)
+
+call where /q "%~2" && (
+    for /f "delims=" %%a in ('where "%~2"') do (
+        set "%~3=%%a"
+    )
+) || (
+    set "%~3="
+)
+
+goto :EOF
+
+:: --------------------------------------------------
+:: Setup up cmake build environment, including generator, build tools and variables.
+:: --------------------------------------------------
+:SETUP_CMAKE_ENVIRONMENT
+
+:: If not set by caller, check environment for working cmake.exe.
+call :FIND_PROGRAM "%CMAKE%" "%CMAKE_BIN_NAME%" CMAKE
+if "%CMAKE%" == "" (
+    goto _SETUP_CMAKE_ENVIRONMENT_EXIT
+)
+
+if /i "%VS_TARGET%" == "build" (
+    echo Found CMake: "%CMAKE%"
+)
+
+if /i "%FORCE_MSBUILD%" == "true" (
+    goto _SETUP_CMAKE_ENVIRONMENT_VS_GENERATOR
+)
+
+:: Check for optional cmake generate and build tools.
+call :FIND_PROGRAM "%NINJA%" "%NINJA_BIN_NAME%" NINJA
+
+if not "%NINJA%" == "" (
+    goto _SETUP_CMAKE_ENVIRONMENT_NINJA_GENERATOR
+)
+
+:_SETUP_CMAKE_ENVIRONMENT_VS_GENERATOR
+
+if /i "%VS_TARGET%" == "build" (
+    echo Using Visual Studio build generator.
+)
+
+set CMAKE_GENERATOR_ARCH=
+
+:: Detect VS platform tool set to use matching cmake generator.
+if /i "%VS_PLATFORM_TOOL_SET%" == "v140" (
+    if /i "%VS_PLATFORM%" == "x64" (
+        set CMAKE_GENERATOR=Visual Studio 14 2015 Win64
+    ) else (
+        set CMAKE_GENERATOR=Visual Studio 14 2015
+    )
+)
+
+if /i "%VS_PLATFORM_TOOL_SET%" == "v141" (
+    if /i "%VS_PLATFORM%" == "x64" (
+        set CMAKE_GENERATOR=Visual Studio 15 2017 Win64
+    ) else (
+        set CMAKE_GENERATOR=Visual Studio 15 2017
+    )
+)
+
+if /i "%VS_PLATFORM_TOOL_SET%" == "v142" (
+    set CMAKE_GENERATOR=Visual Studio 16 2019
+    if /i "%VS_PLATFORM%" == "x64" (
+        set CMAKE_GENERATOR_ARCH=x64
+    ) else (
+        set CMAKE_GENERATOR_ARCH=Win32
+    )
+)
+
+set LLVM_BUILD_OUTPUT_DIR=%LLVM_BUILD_DIR%\%VS_CONFIGURATION%
+
+goto _SETUP_CMAKE_ENVIRONMENT_EXIT
+
+:_SETUP_CMAKE_ENVIRONMENT_NINJA_GENERATOR
+
+if /i "%VS_TARGET%" == "build" (
+    echo Found Ninja: "%NINJA%"
+    echo Using Ninja build generator.
+)
+
+set CMAKE_GENERATOR_ARCH=
+set CMAKE_GENERATOR=Ninja
+set LLVM_BUILD_OUTPUT_DIR=%LLVM_BUILD_DIR%
+
+:_SETUP_CMAKE_ENVIRONMENT_EXIT
+
+goto :EOF
+
+@echo on
index ebb1a86..55b443a 100755 (executable)
@@ -1,77 +1,77 @@
-:: --------------------------------------------------\r
-:: Install needed LLVM binaries from LLVM install directory\r
-:: into Mono build output directory.\r
-::\r
-:: %1 LLVM install root directory (internal or external LLVM build).\r
-:: %2 Mono distribution root directory.\r
-:: --------------------------------------------------\r
-\r
-@echo off\r
-setlocal\r
-\r
-set BUILD_RESULT=1\r
-\r
-set LLVM_INSTALL_DIR=%~1\r
-shift\r
-set MONO_DIST_DIR=%~1\r
-shift\r
-\r
-if "%LLVM_INSTALL_DIR%" == "" (\r
-    echo Missing LLVM install directory argument.\r
-    goto ECHO_USAGE\r
-)\r
-\r
-if "%MONO_DIST_DIR%" == "" (\r
-    echo Missing Mono dist directory argument.\r
-    goto ECHO_USAGE\r
-)\r
-\r
-if not exist "%LLVM_INSTALL_DIR%\bin\opt.exe" (\r
-    echo Missing LLVM build output, "%LLVM_INSTALL_DIR%\bin\opt.exe"\r
-    goto ON_ERROR\r
-)\r
-\r
-if not exist "%LLVM_INSTALL_DIR%\bin\llc.exe" (\r
-    echo Missing LLVM build output, "%LLVM_INSTALL_DIR%\bin\llc.exe"\r
-    goto ON_ERROR\r
-)\r
-\r
-if not exist "%LLVM_INSTALL_DIR%\bin\llvm-dis.exe" (\r
-    echo Missing LLVM build output, "%LLVM_INSTALL_DIR%\bin\llvm-dis.exe"\r
-    goto ON_ERROR\r
-)\r
-\r
-if not exist "%LLVM_INSTALL_DIR%\bin\llvm-mc.exe" (\r
-    echo Missing LLVM build output, "%LLVM_INSTALL_DIR%\bin\llvm-mc.exe"\r
-    goto ON_ERROR\r
-)\r
-\r
-if not exist "%LLVM_INSTALL_DIR%\bin\llvm-as.exe" (\r
-    echo Missing LLVM build output, "%LLVM_INSTALL_DIR%\bin\llvm-as.exe"\r
-    goto ON_ERROR\r
-)\r
-\r
-copy /Y "%LLVM_INSTALL_DIR%\bin\opt.exe" "%MONO_DIST_DIR%" >nul 2>&1\r
-copy /Y "%LLVM_INSTALL_DIR%\bin\llc.exe" "%MONO_DIST_DIR%" >nul 2>&1\r
-copy /Y "%LLVM_INSTALL_DIR%\bin\llvm-dis.exe" "%MONO_DIST_DIR%" >nul 2>&1\r
-copy /Y "%LLVM_INSTALL_DIR%\bin\llvm-mc.exe" "%MONO_DIST_DIR%" >nul 2>&1\r
-copy /Y "%LLVM_INSTALL_DIR%\bin\llvm-as.exe" "%MONO_DIST_DIR%" >nul 2>&1\r
-\r
-goto ON_SUCCESS\r
-\r
-:ON_SUCCESS\r
-\r
-set BUILD_RESULT=0\r
-goto ON_EXIT\r
-\r
-:ECHO_USAGE:\r
-    ECHO Usage: install-llvm-mono-build.bat [llvm_install_dir] [mono_dist_dir].\r
-\r
-:ON_ERROR\r
-    echo Failed to install LLVM binaries into Mono build output directory.\r
-    goto ON_EXIT\r
-\r
-:ON_EXIT\r
-    exit /b %BUILD_RESULT%\r
-\r
-@echo on\r
+:: --------------------------------------------------
+:: Install needed LLVM binaries from LLVM install directory
+:: into Mono build output directory.
+::
+:: %1 LLVM install root directory (internal or external LLVM build).
+:: %2 Mono distribution root directory.
+:: --------------------------------------------------
+
+@echo off
+setlocal
+
+set BUILD_RESULT=1
+
+set LLVM_INSTALL_DIR=%~1
+shift
+set MONO_DIST_DIR=%~1
+shift
+
+if "%LLVM_INSTALL_DIR%" == "" (
+    echo Missing LLVM install directory argument.
+    goto ECHO_USAGE
+)
+
+if "%MONO_DIST_DIR%" == "" (
+    echo Missing Mono dist directory argument.
+    goto ECHO_USAGE
+)
+
+if not exist "%LLVM_INSTALL_DIR%\bin\opt.exe" (
+    echo Missing LLVM build output, "%LLVM_INSTALL_DIR%\bin\opt.exe"
+    goto ON_ERROR
+)
+
+if not exist "%LLVM_INSTALL_DIR%\bin\llc.exe" (
+    echo Missing LLVM build output, "%LLVM_INSTALL_DIR%\bin\llc.exe"
+    goto ON_ERROR
+)
+
+if not exist "%LLVM_INSTALL_DIR%\bin\llvm-dis.exe" (
+    echo Missing LLVM build output, "%LLVM_INSTALL_DIR%\bin\llvm-dis.exe"
+    goto ON_ERROR
+)
+
+if not exist "%LLVM_INSTALL_DIR%\bin\llvm-mc.exe" (
+    echo Missing LLVM build output, "%LLVM_INSTALL_DIR%\bin\llvm-mc.exe"
+    goto ON_ERROR
+)
+
+if not exist "%LLVM_INSTALL_DIR%\bin\llvm-as.exe" (
+    echo Missing LLVM build output, "%LLVM_INSTALL_DIR%\bin\llvm-as.exe"
+    goto ON_ERROR
+)
+
+copy /Y "%LLVM_INSTALL_DIR%\bin\opt.exe" "%MONO_DIST_DIR%" >nul 2>&1
+copy /Y "%LLVM_INSTALL_DIR%\bin\llc.exe" "%MONO_DIST_DIR%" >nul 2>&1
+copy /Y "%LLVM_INSTALL_DIR%\bin\llvm-dis.exe" "%MONO_DIST_DIR%" >nul 2>&1
+copy /Y "%LLVM_INSTALL_DIR%\bin\llvm-mc.exe" "%MONO_DIST_DIR%" >nul 2>&1
+copy /Y "%LLVM_INSTALL_DIR%\bin\llvm-as.exe" "%MONO_DIST_DIR%" >nul 2>&1
+
+goto ON_SUCCESS
+
+:ON_SUCCESS
+
+set BUILD_RESULT=0
+goto ON_EXIT
+
+:ECHO_USAGE:
+    ECHO Usage: install-llvm-mono-build.bat [llvm_install_dir] [mono_dist_dir].
+
+:ON_ERROR
+    echo Failed to install LLVM binaries into Mono build output directory.
+    goto ON_EXIT
+
+:ON_EXIT
+    exit /b %BUILD_RESULT%
+
+@echo on
index a8736d8..0c4b2ec 100755 (executable)
@@ -1,18 +1,18 @@
-.\mono\mcs\jay\jay.exe -cv < .\mono\mcs\jay\skeleton.cs .\mono\mcs\mcs\cs-parser.jay > .\mono\mcs\mcs\cs-parser.cs\r
-\r
-.\mono\mcs\jay\jay.exe -ct < .\mono\mcs\jay\skeleton.cs .\mono\mcs\class\System.XML\System.Xml.XPath\Parser.jay > .\mono\mcs\class\System.XML\System.Xml.XPath\Parser.cs\r
-\r
-.\mono\mcs\jay\jay.exe -ct < .\mono\mcs\jay\skeleton.cs .\mono\mcs\class\System.XML\Mono.Xml.Xsl\PatternParser.jay > .\mono\mcs\class\System.XML\Mono.Xml.Xsl\Pattern.cs\r
-\r
-echo #define XSLT_PATTERN > .\mono\mcs\class\System.XML\Mono.Xml.Xsl\Pattern.txt\r
-\r
-type .\mono\mcs\class\System.XML\Mono.Xml.Xsl\Pattern.txt .\mono\mcs\class\System.XML\Mono.Xml.Xsl\Pattern.cs > .\mono\mcs\class\System.XML\Mono.Xml.Xsl\PatternParser.cs\r
-\r
-type .\mono\mcs\class\System.XML\Mono.Xml.Xsl\Pattern.txt .\mono\mcs\class\System.XML\System.Xml.XPath\Tokenizer.cs > .\mono\mcs\class\System.XML\Mono.Xml.Xsl\PatternTokenizer.cs\r
-\r
-.\mono\mcs\jay\jay.exe -ct < .\mono\mcs\jay\skeleton.cs .\mono\mcs\class\System.Data\Mono.Data.SqlExpressions\Parser.jay > .\mono\mcs\class\System.Data\Mono.Data.SqlExpressions\Parser.cs\r
-\r
-.\mono\mcs\jay\jay.exe -ct < .\mono\mcs\jay\skeleton.cs .\mono\mcs\class\Commons.Xml.Relaxng\Commons.Xml.Relaxng.Rnc\RncParser.jay > .\mono\mcs\class\Commons.Xml.Relaxng\Commons.Xml.Relaxng.Rnc\RncParser.cs\r
-\r
-.\mono\mcs\jay\jay.exe -ct < .\mono\mcs\jay\skeleton.cs .\mono\mcs\ilasm\parser\ILParser.jay > .\mono\mcs\ilasm\ILParser.cs\r
-\r
+.\mono\mcs\jay\jay.exe -cv < .\mono\mcs\jay\skeleton.cs .\mono\mcs\mcs\cs-parser.jay > .\mono\mcs\mcs\cs-parser.cs
+
+.\mono\mcs\jay\jay.exe -ct < .\mono\mcs\jay\skeleton.cs .\mono\mcs\class\System.XML\System.Xml.XPath\Parser.jay > .\mono\mcs\class\System.XML\System.Xml.XPath\Parser.cs
+
+.\mono\mcs\jay\jay.exe -ct < .\mono\mcs\jay\skeleton.cs .\mono\mcs\class\System.XML\Mono.Xml.Xsl\PatternParser.jay > .\mono\mcs\class\System.XML\Mono.Xml.Xsl\Pattern.cs
+
+echo #define XSLT_PATTERN > .\mono\mcs\class\System.XML\Mono.Xml.Xsl\Pattern.txt
+
+type .\mono\mcs\class\System.XML\Mono.Xml.Xsl\Pattern.txt .\mono\mcs\class\System.XML\Mono.Xml.Xsl\Pattern.cs > .\mono\mcs\class\System.XML\Mono.Xml.Xsl\PatternParser.cs
+
+type .\mono\mcs\class\System.XML\Mono.Xml.Xsl\Pattern.txt .\mono\mcs\class\System.XML\System.Xml.XPath\Tokenizer.cs > .\mono\mcs\class\System.XML\Mono.Xml.Xsl\PatternTokenizer.cs
+
+.\mono\mcs\jay\jay.exe -ct < .\mono\mcs\jay\skeleton.cs .\mono\mcs\class\System.Data\Mono.Data.SqlExpressions\Parser.jay > .\mono\mcs\class\System.Data\Mono.Data.SqlExpressions\Parser.cs
+
+.\mono\mcs\jay\jay.exe -ct < .\mono\mcs\jay\skeleton.cs .\mono\mcs\class\Commons.Xml.Relaxng\Commons.Xml.Relaxng.Rnc\RncParser.jay > .\mono\mcs\class\Commons.Xml.Relaxng\Commons.Xml.Relaxng.Rnc\RncParser.cs
+
+.\mono\mcs\jay\jay.exe -ct < .\mono\mcs\jay\skeleton.cs .\mono\mcs\ilasm\parser\ILParser.jay > .\mono\mcs\ilasm\ILParser.cs
+
index 5458a8f..6269332 100755 (executable)
@@ -1,97 +1,97 @@
-:: Set up VS MSVC environment when running MSVC build mono-sgen.exe with all supplied arguments.\r
-:: Simplify the setup of VS and MSVC toolchain, when running Mono AOT compiler\r
-:: since it need to locate correct compiler and OS libraries as well as clang.exe and link.exe\r
-:: from VS setup for the corresponding architecture.\r
-\r
-@echo off\r
-setlocal\r
-\r
-set EXECUTE_RESULT=1\r
-\r
-:: Get path for current running script.\r
-set RUN_MONO_SGEN_MSVC_SCRIPT_PATH=%~dp0\r
-\r
-:: Optimization, check if we need to setup full build environment, only needed when running mono-sgen.exe as AOT compiler.\r
-if "%MONO_AS_AOT_COMPILER%" == "1" (\r
-    goto SETUP_VS_ENV\r
-)\r
-\r
-set MONO_AS_AOT_COMPILER=0\r
-:: Look for --aot or --aot=, --aot-path alone should not trigger setup of VS env.\r
-echo.%* | findstr /r /c:".*--aot[^-a-zA-Z0-9].*" > nul && (\r
-    set MONO_AS_AOT_COMPILER=1\r
-)\r
-\r
-if %MONO_AS_AOT_COMPILER% == 1 (\r
-    goto SETUP_VS_ENV\r
-)\r
-\r
-:: mono-sgen.exe not invoked as a AOT compiler, no need to setup full build environment.\r
-goto ON_EXECUTE\r
-\r
-:: Try setting up VS MSVC build environment.\r
-:SETUP_VS_ENV\r
-\r
-:: Optimization, check if we have something that looks like a VS MSVC build environment\r
-:: already available.\r
-if /i not "%VCINSTALLDIR%" == "" (\r
-    if /i not "%INCLUDE%" == "" (\r
-        if /i not "%LIB%" == "" (\r
-            goto ON_EXECUTE\r
-        )\r
-    )\r
-)\r
-\r
-:: Setup Windows environment.\r
-call %RUN_MONO_SGEN_MSVC_SCRIPT_PATH%setup-windows-env.bat\r
-\r
-if "%MONO_VS_MSVCBUILD_ENV_FILE%" == "" (\r
-    set MONO_VS_MSVCBUILD_ENV_FILE=%RUN_MONO_SGEN_MSVC_SCRIPT_PATH%mono-sgen.exe.env\r
-)\r
-\r
-:: Check import of VS MSVC build environment using a file instead of running all commands.\r
-:: NOTE, this is an optimization since setting up a development command\r
-:: prompt could take some time.\r
-if /i "%MONO_IMPORT_VS_MSVCBUILD_ENV_FILE%" == "true" (\r
-    if exist "%MONO_VS_MSVCBUILD_ENV_FILE%" (\r
-        for /f "delims=" %%a in (%MONO_VS_MSVCBUILD_ENV_FILE%) do SET %%a\r
-    )\r
-)\r
-\r
-if not "%MONO_MSVC_PATH%" == "" (\r
-    set "PATH=%MONO_MSVC_PATH%;%PATH%"\r
-    goto ON_EXECUTE\r
-)\r
-\r
-:: Setup VS MSVC build environment.\r
-set TEMP_PATH=%PATH%\r
-call %RUN_MONO_SGEN_MSVC_SCRIPT_PATH%setup-vs-msvcbuild-env.bat\r
-call set MONO_MSVC_PATH=%%PATH:%TEMP_PATH%=%%\r
-\r
-:: Check if msvc env should be exported into file for later import.\r
-for /f %%a in ('uuidgen.exe') do set NEW_UUID=%%a\r
-if /i "%MONO_EXPORT_VS_MSVCBUILD_ENV_FILE%" == "true" (\r
-    SET VCINSTALLDIR >> "%TEMP%\%NEW_UUID%.env"\r
-    SET INCLUDE >> "%TEMP%\%NEW_UUID%.env"\r
-    SET LIB >> "%TEMP%\%NEW_UUID%.env"\r
-    SET MONO_MSVC_PATH >> "%TEMP%\%NEW_UUID%.env"\r
-    move /Y "%TEMP%\%NEW_UUID%.env" "%MONO_VS_MSVCBUILD_ENV_FILE%" >nul 2>&1\r
-)\r
-\r
-:ON_EXECUTE\r
-\r
-:: Add mono.sgen.exe (needed for optional LLVM tooling) to PATH\r
-set "PATH=%RUN_MONO_SGEN_MSVC_SCRIPT_PATH%;%PATH%"\r
-\r
-call "%RUN_MONO_SGEN_MSVC_SCRIPT_PATH%mono-sgen.exe" %* && (\r
-    set EXECUTE_RESULT=0\r
-) || (\r
-    set EXECUTE_RESULT=1\r
-    if not %ERRORLEVEL% == 0 (\r
-        set EXECUTE_RESULT=%ERRORLEVEL%\r
-    )\r
-)\r
-\r
-exit /b %EXECUTE_RESULT%\r
-\r
+:: Set up VS MSVC environment when running MSVC build mono-sgen.exe with all supplied arguments.
+:: Simplify the setup of VS and MSVC toolchain, when running Mono AOT compiler
+:: since it need to locate correct compiler and OS libraries as well as clang.exe and link.exe
+:: from VS setup for the corresponding architecture.
+
+@echo off
+setlocal
+
+set EXECUTE_RESULT=1
+
+:: Get path for current running script.
+set RUN_MONO_SGEN_MSVC_SCRIPT_PATH=%~dp0
+
+:: Optimization, check if we need to setup full build environment, only needed when running mono-sgen.exe as AOT compiler.
+if "%MONO_AS_AOT_COMPILER%" == "1" (
+    goto SETUP_VS_ENV
+)
+
+set MONO_AS_AOT_COMPILER=0
+:: Look for --aot or --aot=, --aot-path alone should not trigger setup of VS env.
+echo.%* | findstr /r /c:".*--aot[^-a-zA-Z0-9].*" > nul && (
+    set MONO_AS_AOT_COMPILER=1
+)
+
+if %MONO_AS_AOT_COMPILER% == 1 (
+    goto SETUP_VS_ENV
+)
+
+:: mono-sgen.exe not invoked as a AOT compiler, no need to setup full build environment.
+goto ON_EXECUTE
+
+:: Try setting up VS MSVC build environment.
+:SETUP_VS_ENV
+
+:: Optimization, check if we have something that looks like a VS MSVC build environment
+:: already available.
+if /i not "%VCINSTALLDIR%" == "" (
+    if /i not "%INCLUDE%" == "" (
+        if /i not "%LIB%" == "" (
+            goto ON_EXECUTE
+        )
+    )
+)
+
+:: Setup Windows environment.
+call %RUN_MONO_SGEN_MSVC_SCRIPT_PATH%setup-windows-env.bat
+
+if "%MONO_VS_MSVCBUILD_ENV_FILE%" == "" (
+    set MONO_VS_MSVCBUILD_ENV_FILE=%RUN_MONO_SGEN_MSVC_SCRIPT_PATH%mono-sgen.exe.env
+)
+
+:: Check import of VS MSVC build environment using a file instead of running all commands.
+:: NOTE, this is an optimization since setting up a development command
+:: prompt could take some time.
+if /i "%MONO_IMPORT_VS_MSVCBUILD_ENV_FILE%" == "true" (
+    if exist "%MONO_VS_MSVCBUILD_ENV_FILE%" (
+        for /f "delims=" %%a in (%MONO_VS_MSVCBUILD_ENV_FILE%) do SET %%a
+    )
+)
+
+if not "%MONO_MSVC_PATH%" == "" (
+    set "PATH=%MONO_MSVC_PATH%;%PATH%"
+    goto ON_EXECUTE
+)
+
+:: Setup VS MSVC build environment.
+set TEMP_PATH=%PATH%
+call %RUN_MONO_SGEN_MSVC_SCRIPT_PATH%setup-vs-msvcbuild-env.bat
+call set MONO_MSVC_PATH=%%PATH:%TEMP_PATH%=%%
+
+:: Check if msvc env should be exported into file for later import.
+for /f %%a in ('uuidgen.exe') do set NEW_UUID=%%a
+if /i "%MONO_EXPORT_VS_MSVCBUILD_ENV_FILE%" == "true" (
+    SET VCINSTALLDIR >> "%TEMP%\%NEW_UUID%.env"
+    SET INCLUDE >> "%TEMP%\%NEW_UUID%.env"
+    SET LIB >> "%TEMP%\%NEW_UUID%.env"
+    SET MONO_MSVC_PATH >> "%TEMP%\%NEW_UUID%.env"
+    move /Y "%TEMP%\%NEW_UUID%.env" "%MONO_VS_MSVCBUILD_ENV_FILE%" >nul 2>&1
+)
+
+:ON_EXECUTE
+
+:: Add mono.sgen.exe (needed for optional LLVM tooling) to PATH
+set "PATH=%RUN_MONO_SGEN_MSVC_SCRIPT_PATH%;%PATH%"
+
+call "%RUN_MONO_SGEN_MSVC_SCRIPT_PATH%mono-sgen.exe" %* && (
+    set EXECUTE_RESULT=0
+) || (
+    set EXECUTE_RESULT=1
+    if not %ERRORLEVEL% == 0 (
+        set EXECUTE_RESULT=%ERRORLEVEL%
+    )
+)
+
+exit /b %EXECUTE_RESULT%
+
 @echo on
\ No newline at end of file
index ceb8c06..aae0797 100755 (executable)
@@ -1,85 +1,85 @@
-:: Set up build environment and run execute msbuild with all supplied arguments.\r
-\r
-:: Arguments:\r
-:: -------------------------------------------------------\r
-:: %1 Visual Studio target, build|clean, default build\r
-:: %2 Host CPU architecture, x86_64|i686, default x86_64\r
-:: %3 Visual Studio configuration, debug|release, default release\r
-:: %4 Additional arguments passed to msbuild, needs to be quoted if multiple.\r
-:: %5 Project to build.\r
-:: -------------------------------------------------------\r
-\r
-@echo off\r
-setlocal\r
-\r
-set BUILD_RESULT=1\r
-\r
-:: Get path for current running script.\r
-set RUN_MSBUILD_SCRIPT_PATH=%~dp0\r
-\r
-:: Configure all known build arguments.\r
-set VS_TARGET=build\r
-if /i "%~1" == "clean" (\r
-    set VS_TARGET="clean"\r
-)\r
-shift\r
-\r
-set VS_PLATFORM=x64\r
-if /i "%~1" == "i686" (\r
-    set VS_PLATFORM="Win32"\r
-)\r
-if /i "%~1" == "win32" (\r
-    set VS_PLATFORM="Win32"\r
-)\r
-shift\r
-\r
-set VS_CONFIGURATION=Release\r
-if /i "%~1" == "debug" (\r
-    set VS_CONFIGURATION="Debug"\r
-)\r
-shift\r
-\r
-set VS_TARGET_GC=sgen\r
-if /i "%~1" == "boehm" (\r
-    set VS_TARGET_GC="boehm"\r
-)\r
-shift\r
-\r
-set VS_ADDITIONAL_ARGUMENTS=\r
-if not "%~1" == "" (\r
-    set VS_ADDITIONAL_ARGUMENTS=%~1\r
-)\r
-shift\r
-\r
-set VS_BUILD_PROJ=mono.sln\r
-if /i not "%~1" == "" (\r
-    set VS_BUILD_PROJ=%~1\r
-)\r
-\r
-if not exist %VS_BUILD_PROJ% (\r
-    set VS_BUILD_PROJ=%RUN_MSBUILD_SCRIPT_PATH%%VS_BUILD_PROJ%\r
-)\r
-\r
-:: Setup Windows environment.\r
-call %RUN_MSBUILD_SCRIPT_PATH%setup-windows-env.bat\r
-\r
-:: Setup VS msbuild environment.\r
-call %RUN_MSBUILD_SCRIPT_PATH%setup-vs-msbuild-env.bat\r
-\r
-if "%VS_ADDITIONAL_ARGUMENTS%" == "" (\r
-    set "VS_ADDITIONAL_ARGUMENTS=/p:PlatformToolset=%VS_DEFAULT_PLATFORM_TOOL_SET%"\r
-)\r
-\r
-set VS_BUILD_ARGS=/p:Configuration=%VS_CONFIGURATION% /p:Platform=%VS_PLATFORM% /p:MONO_TARGET_GC=%VS_TARGET_GC% %VS_ADDITIONAL_ARGUMENTS% /t:%VS_TARGET% /m\r
-call msbuild.exe %VS_BUILD_ARGS% "%VS_BUILD_PROJ%" && (\r
-    set BUILD_RESULT=0\r
-) || (\r
-    set BUILD_RESULT=1\r
-    if not %ERRORLEVEL% == 0 (\r
-        set BUILD_RESULT=%ERRORLEVEL%\r
-    )\r
-)\r
-\r
-exit /b %BUILD_RESULT%\r
-\r
+:: Set up build environment and run execute msbuild with all supplied arguments.
+
+:: Arguments:
+:: -------------------------------------------------------
+:: %1 Visual Studio target, build|clean, default build
+:: %2 Host CPU architecture, x86_64|i686, default x86_64
+:: %3 Visual Studio configuration, debug|release, default release
+:: %4 Additional arguments passed to msbuild, needs to be quoted if multiple.
+:: %5 Project to build.
+:: -------------------------------------------------------
+
+@echo off
+setlocal
+
+set BUILD_RESULT=1
+
+:: Get path for current running script.
+set RUN_MSBUILD_SCRIPT_PATH=%~dp0
+
+:: Configure all known build arguments.
+set VS_TARGET=build
+if /i "%~1" == "clean" (
+    set VS_TARGET="clean"
+)
+shift
+
+set VS_PLATFORM=x64
+if /i "%~1" == "i686" (
+    set VS_PLATFORM="Win32"
+)
+if /i "%~1" == "win32" (
+    set VS_PLATFORM="Win32"
+)
+shift
+
+set VS_CONFIGURATION=Release
+if /i "%~1" == "debug" (
+    set VS_CONFIGURATION="Debug"
+)
+shift
+
+set VS_TARGET_GC=sgen
+if /i "%~1" == "boehm" (
+    set VS_TARGET_GC="boehm"
+)
+shift
+
+set VS_ADDITIONAL_ARGUMENTS=
+if not "%~1" == "" (
+    set VS_ADDITIONAL_ARGUMENTS=%~1
+)
+shift
+
+set VS_BUILD_PROJ=mono.sln
+if /i not "%~1" == "" (
+    set VS_BUILD_PROJ=%~1
+)
+
+if not exist %VS_BUILD_PROJ% (
+    set VS_BUILD_PROJ=%RUN_MSBUILD_SCRIPT_PATH%%VS_BUILD_PROJ%
+)
+
+:: Setup Windows environment.
+call %RUN_MSBUILD_SCRIPT_PATH%setup-windows-env.bat
+
+:: Setup VS msbuild environment.
+call %RUN_MSBUILD_SCRIPT_PATH%setup-vs-msbuild-env.bat
+
+if "%VS_ADDITIONAL_ARGUMENTS%" == "" (
+    set "VS_ADDITIONAL_ARGUMENTS=/p:PlatformToolset=%VS_DEFAULT_PLATFORM_TOOL_SET%"
+)
+
+set VS_BUILD_ARGS=/p:Configuration=%VS_CONFIGURATION% /p:Platform=%VS_PLATFORM% /p:MONO_TARGET_GC=%VS_TARGET_GC% %VS_ADDITIONAL_ARGUMENTS% /t:%VS_TARGET% /m
+call msbuild.exe %VS_BUILD_ARGS% "%VS_BUILD_PROJ%" && (
+    set BUILD_RESULT=0
+) || (
+    set BUILD_RESULT=1
+    if not %ERRORLEVEL% == 0 (
+        set BUILD_RESULT=%ERRORLEVEL%
+    )
+)
+
+exit /b %BUILD_RESULT%
+
 @echo on
\ No newline at end of file
index 0674972..3d43d44 100755 (executable)
@@ -1,20 +1,20 @@
-@echo off\r
-csc -debug -out:scripts\monowrap.exe scripts\monowrap.cs \r
-if errorlevel 1 goto error\r
-csc -nowarn:414 -debug -out:scripts\genproj.exe scripts\genproj.cs\r
-if errorlevel 1 goto error\r
-csc -debug -out:scripts\prepare.exe scripts\prepare.cs\r
-if errorlevel 1 goto error\r
-cd scripts\r
-prepare.exe ..\\..\\..\\mcs core \r
-if errorlevel 1 goto error\r
-genproj.exe\r
-if errorlevel 1 goto error\r
-cd ..\r
-echo Setup complete, you need at least a mcs\class\lib\basic directory with\r
-echo mcs.exe  mscorlib.dll  System.dll  System.Xml.dll\r
-echo to bootstrap\r
-goto end\r
-: error\r
-echo Error: solution is not configured.\r
+@echo off
+csc -debug -out:scripts\monowrap.exe scripts\monowrap.cs 
+if errorlevel 1 goto error
+csc -nowarn:414 -debug -out:scripts\genproj.exe scripts\genproj.cs
+if errorlevel 1 goto error
+csc -debug -out:scripts\prepare.exe scripts\prepare.cs
+if errorlevel 1 goto error
+cd scripts
+prepare.exe ..\\..\\..\\mcs core 
+if errorlevel 1 goto error
+genproj.exe
+if errorlevel 1 goto error
+cd ..
+echo Setup complete, you need at least a mcs\class\lib\basic directory with
+echo mcs.exe  mscorlib.dll  System.dll  System.Xml.dll
+echo to bootstrap
+goto end
+: error
+echo Error: solution is not configured.
 :end
\ No newline at end of file
index e705a2f..ef9ce9c 100755 (executable)
-:: Set up VS msbuild environment depending on installed VS versions.\r
-:: Script will setup environment variables directly in callers environment.\r
-\r
-:: Make sure we can restore current working directory after setting up environment.\r
-:: Some of the VS scripts can change the current working directory.\r
-set CALLER_WD=%CD%\r
-\r
-:: Get path for current running script.\r
-set RUN_SETUP_VS_MSBUILD_ENV_SCRIPT_PATH=%~dp0\r
-\r
-:: VS2017/VS2019 includes vswhere.exe that can be used to locate current VS installation.\r
-set VSWHERE_TOOLS_BIN=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe\r
-\r
-:: Visual Studio 2015 == 14.0\r
-if "%VisualStudioVersion%" == "14.0" (\r
-    goto SETUP_VS_2015\r
-)\r
-\r
-:: Visual Studio 2017 == 15.0\r
-if "%VisualStudioVersion%" == "15.0" (\r
-    goto SETUP_VS_2017\r
-)\r
-\r
-:: Visual Studio 2019 == 16.0\r
-if "%VisualStudioVersion%" == "16.0" (\r
-    goto SETUP_VS_2019\r
-)\r
-\r
-:SETUP_VS_2019\r
-\r
-:SETUP_VS_2019_BUILD_TOOLS\r
-\r
-:: Try to locate VS2019 build tools installation.\r
-set VS_2019_BUILD_TOOLS_CMD=%ProgramFiles(x86)%\Microsoft Visual Studio\2019\BuildTools\Common7\Tools\VsMSBuildCmd.bat\r
-\r
-:: Setup VS2019 VC development environment using build tools installation.\r
-call :setup_build_env "%VS_2019_BUILD_TOOLS_CMD%" "%CALLER_WD%" && (\r
-    set VS_DEFAULT_PLATFORM_TOOL_SET=v142\r
-    goto ON_EXIT\r
-)\r
-\r
-:SETUP_VS_2019_VC\r
-\r
-set VS_2019_DEV_CMD=\r
-\r
-:: Try to locate installed VS2019 VC environment.\r
-if exist "%VSWHERE_TOOLS_BIN%" (\r
-    for /f "tokens=*" %%a in ('"%VSWHERE_TOOLS_BIN%" -version [16.0^,17.0] -property installationPath') do (\r
-        set VS_2019_DEV_CMD=%%a\Common7\Tools\VsMSBuildCmd.bat\r
-    )\r
-)\r
-\r
-:: Setup VS2019 VC development environment using VS installation.\r
-call :setup_build_env "%VS_2019_DEV_CMD%" "%CALLER_WD%" && (\r
-    set VS_DEFAULT_PLATFORM_TOOL_SET=v142\r
-    goto ON_EXIT\r
-)\r
-\r
-:SETUP_VS_2017\r
-\r
-:SETUP_VS_2017_BUILD_TOOLS\r
-\r
-:: Try to locate VS2017 build tools installation.\r
-set VS_2017_BUILD_TOOLS_CMD=%ProgramFiles(x86)%\Microsoft Visual Studio\2017\BuildTools\Common7\Tools\VsMSBuildCmd.bat\r
-\r
-:: Setup VS2017 VC development environment using build tools installation.\r
-call :setup_build_env "%VS_2017_BUILD_TOOLS_CMD%" "%CALLER_WD%" && (\r
-    set VS_DEFAULT_PLATFORM_TOOL_SET=v141\r
-    goto ON_EXIT\r
-)\r
-\r
-:SETUP_VS_2017_VC\r
-\r
-set VS_2017_DEV_CMD=\r
-\r
-:: Try to locate installed VS2017 VC environment.\r
-if exist "%VSWHERE_TOOLS_BIN%" (\r
-    for /f "tokens=*" %%a in ('"%VSWHERE_TOOLS_BIN%" -version [15.0^,16.0] -property installationPath') do (\r
-        set VS_2017_DEV_CMD=%%a\Common7\Tools\VsMSBuildCmd.bat\r
-    )\r
-)\r
-\r
-:: Setup VS2017 VC development environment using VS installation.\r
-call :setup_build_env "%VS_2017_DEV_CMD%" "%CALLER_WD%" && (\r
-    set VS_DEFAULT_PLATFORM_TOOL_SET=v141\r
-    goto ON_EXIT\r
-)\r
-\r
-:SETUP_VS_2015\r
-\r
-:SETUP_VS_2015_BUILD_TOOLS\r
-\r
-:: Try to locate VS2015 build tools installation.\r
-set VS_2015_BUILD_TOOLS_CMD=%ProgramFiles(x86)%\Microsoft Visual C++ Build Tools\vcbuildtools_msbuild.bat\r
-\r
-:: Setup VS2015 VC development environment using build tools installation.\r
-call :setup_build_env "%VS_2015_BUILD_TOOLS_CMD%" "%CALLER_WD%" && (\r
-    set VS_DEFAULT_PLATFORM_TOOL_SET=v140\r
-    goto ON_EXIT\r
-)\r
-\r
-:SETUP_VS_2015_VC\r
-\r
-:: Try to locate installed VS2015 VC environment.\r
-set VS_2015_DEV_CMD=%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\Common7\Tools\VsMSBuildCmd.bat\r
-\r
-:: Setup VS2015 VC development environment using VS installation.\r
-call :setup_build_env "%VS_2015_DEV_CMD%" "%CALLER_WD%" && (\r
-    set VS_DEFAULT_PLATFORM_TOOL_SET=v140\r
-    goto ON_EXIT\r
-)\r
-\r
-:ON_ENV_ERROR\r
-\r
-echo Warning, failed to setup VS build environment needed by VS tooling.\r
-echo Incomplete build environment can cause build error's due to missing compiler,\r
-echo linker and platform libraries.\r
-\r
-exit /b 1\r
-\r
-:ON_EXIT\r
-\r
-exit /b 0\r
-\r
-:setup_build_env\r
-\r
-:: Check if VS build environment script exists.\r
-if not exist "%~1" (\r
-    goto setup_build_env_error\r
-)\r
-\r
-:: Run VS build environment script.\r
-call "%~1" > NUL\r
-\r
-:: Restore callers working directory in case it has been changed by VS scripts.\r
-cd /d "%~2"\r
-\r
-goto setup_build_env_exit\r
-\r
-:setup_build_env_error\r
-exit /b 1\r
-\r
-:setup_build_env_exit\r
+:: Set up VS msbuild environment depending on installed VS versions.
+:: Script will setup environment variables directly in callers environment.
+
+:: Make sure we can restore current working directory after setting up environment.
+:: Some of the VS scripts can change the current working directory.
+set CALLER_WD=%CD%
+
+:: Get path for current running script.
+set RUN_SETUP_VS_MSBUILD_ENV_SCRIPT_PATH=%~dp0
+
+:: VS2017/VS2019 includes vswhere.exe that can be used to locate current VS installation.
+set VSWHERE_TOOLS_BIN=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
+
+:: Visual Studio 2015 == 14.0
+if "%VisualStudioVersion%" == "14.0" (
+    goto SETUP_VS_2015
+)
+
+:: Visual Studio 2017 == 15.0
+if "%VisualStudioVersion%" == "15.0" (
+    goto SETUP_VS_2017
+)
+
+:: Visual Studio 2019 == 16.0
+if "%VisualStudioVersion%" == "16.0" (
+    goto SETUP_VS_2019
+)
+
+:SETUP_VS_2019
+
+:SETUP_VS_2019_BUILD_TOOLS
+
+:: Try to locate VS2019 build tools installation.
+set VS_2019_BUILD_TOOLS_CMD=%ProgramFiles(x86)%\Microsoft Visual Studio\2019\BuildTools\Common7\Tools\VsMSBuildCmd.bat
+
+:: Setup VS2019 VC development environment using build tools installation.
+call :setup_build_env "%VS_2019_BUILD_TOOLS_CMD%" "%CALLER_WD%" && (
+    set VS_DEFAULT_PLATFORM_TOOL_SET=v142
+    goto ON_EXIT
+)
+
+:SETUP_VS_2019_VC
+
+set VS_2019_DEV_CMD=
+
+:: Try to locate installed VS2019 VC environment.
+if exist "%VSWHERE_TOOLS_BIN%" (
+    for /f "tokens=*" %%a in ('"%VSWHERE_TOOLS_BIN%" -version [16.0^,17.0] -property installationPath') do (
+        set VS_2019_DEV_CMD=%%a\Common7\Tools\VsMSBuildCmd.bat
+    )
+)
+
+:: Setup VS2019 VC development environment using VS installation.
+call :setup_build_env "%VS_2019_DEV_CMD%" "%CALLER_WD%" && (
+    set VS_DEFAULT_PLATFORM_TOOL_SET=v142
+    goto ON_EXIT
+)
+
+:SETUP_VS_2017
+
+:SETUP_VS_2017_BUILD_TOOLS
+
+:: Try to locate VS2017 build tools installation.
+set VS_2017_BUILD_TOOLS_CMD=%ProgramFiles(x86)%\Microsoft Visual Studio\2017\BuildTools\Common7\Tools\VsMSBuildCmd.bat
+
+:: Setup VS2017 VC development environment using build tools installation.
+call :setup_build_env "%VS_2017_BUILD_TOOLS_CMD%" "%CALLER_WD%" && (
+    set VS_DEFAULT_PLATFORM_TOOL_SET=v141
+    goto ON_EXIT
+)
+
+:SETUP_VS_2017_VC
+
+set VS_2017_DEV_CMD=
+
+:: Try to locate installed VS2017 VC environment.
+if exist "%VSWHERE_TOOLS_BIN%" (
+    for /f "tokens=*" %%a in ('"%VSWHERE_TOOLS_BIN%" -version [15.0^,16.0] -property installationPath') do (
+        set VS_2017_DEV_CMD=%%a\Common7\Tools\VsMSBuildCmd.bat
+    )
+)
+
+:: Setup VS2017 VC development environment using VS installation.
+call :setup_build_env "%VS_2017_DEV_CMD%" "%CALLER_WD%" && (
+    set VS_DEFAULT_PLATFORM_TOOL_SET=v141
+    goto ON_EXIT
+)
+
+:SETUP_VS_2015
+
+:SETUP_VS_2015_BUILD_TOOLS
+
+:: Try to locate VS2015 build tools installation.
+set VS_2015_BUILD_TOOLS_CMD=%ProgramFiles(x86)%\Microsoft Visual C++ Build Tools\vcbuildtools_msbuild.bat
+
+:: Setup VS2015 VC development environment using build tools installation.
+call :setup_build_env "%VS_2015_BUILD_TOOLS_CMD%" "%CALLER_WD%" && (
+    set VS_DEFAULT_PLATFORM_TOOL_SET=v140
+    goto ON_EXIT
+)
+
+:SETUP_VS_2015_VC
+
+:: Try to locate installed VS2015 VC environment.
+set VS_2015_DEV_CMD=%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\Common7\Tools\VsMSBuildCmd.bat
+
+:: Setup VS2015 VC development environment using VS installation.
+call :setup_build_env "%VS_2015_DEV_CMD%" "%CALLER_WD%" && (
+    set VS_DEFAULT_PLATFORM_TOOL_SET=v140
+    goto ON_EXIT
+)
+
+:ON_ENV_ERROR
+
+echo Warning, failed to setup VS build environment needed by VS tooling.
+echo Incomplete build environment can cause build error's due to missing compiler,
+echo linker and platform libraries.
+
+exit /b 1
+
+:ON_EXIT
+
+exit /b 0
+
+:setup_build_env
+
+:: Check if VS build environment script exists.
+if not exist "%~1" (
+    goto setup_build_env_error
+)
+
+:: Run VS build environment script.
+call "%~1" > NUL
+
+:: Restore callers working directory in case it has been changed by VS scripts.
+cd /d "%~2"
+
+goto setup_build_env_exit
+
+:setup_build_env_error
+exit /b 1
+
+:setup_build_env_exit
 goto :EOF
\ No newline at end of file
index 6438320..5371fb0 100755 (executable)
-:: Set up VS MSVC environment depending on installed VS versions.\r
-:: Script will setup environment variables directly in callers environment.\r
-\r
-:: Make sure we can restore current working directory after setting up environment.\r
-:: Some of the VS scripts can change the current working directory.\r
-set CALLER_WD=%CD%\r
-\r
-:: Get path for current running script.\r
-set RUN_SETUP_VS_MSVCBUILD_ENV_SCRIPT_PATH=%~dp0\r
-\r
-:: NOTE, MSVC build Mono full AOT tooling currently support 64-bit AMD codegen. Below will only setup\r
-:: amd64 versions of VS MSVC build environment and corresponding Clang compiler.\r
-set VS_2015_TOOLCHAIN_ARCH=amd64\r
-set VS_2015_VCVARS_ARCH=%VS_2015_TOOLCHAIN_ARCH%\vcvars64.bat\r
-set VS_2015_CLANG_ARCH=%VS_2015_TOOLCHAIN_ARCH%\r
-set VS_2017_VCVARS_ARCH=vcvars64.bat\r
-set VS_2017_CLANG_ARCH=HostX64\r
-set VS_2019_VCVARS_ARCH=%VS_2017_VCVARS_ARCH%\r
-\r
-:: 32-bit AOT toolchains for MSVC build mono-sgen.exe is currently not supported.\r
-:: set VS_2015_TOOLCHAIN_ARCH=x86\r
-:: set VS_2015_VCVARS_ARCH=vcvars32.bat\r
-:: set VS_2015_CLANG_ARCH=%VS_2015_TOOLCHAIN_ARCH%\r
-:: set VS_2017_VCVARS_ARCH=vcvars32.bat\r
-:: set VS_2017_CLANG_ARCH=HostX86\r
-:: set VS_2019_VCVARS_ARCH=%VS_2017_VCVARS_ARCH%\r
-\r
-set VS_CLANG_TOOLS_BIN_PATH=\r
-\r
-:: VS2019/VS2017 includes vswhere.exe that can be used to locate current VS installation.\r
-set VSWHERE_TOOLS_BIN=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe\r
-\r
-:: Visual Studio 2015 == 14.0\r
-if "%VisualStudioVersion%" == "14.0" (\r
-    goto SETUP_VS_2015\r
-)\r
-\r
-:: Visual Studio 2017 == 15.0\r
-if "%VisualStudioVersion%" == "15.0" (\r
-    goto SETUP_VS_2017\r
-)\r
-\r
-:: Visual Studio 2019 == 16.0\r
-if "%VisualStudioVersion%" == "16.0" (\r
-    goto SETUP_VS_2019\r
-)\r
-\r
-:SETUP_VS_2019\r
-\r
-set VS_2019_VCINSTALL_DIR=\r
-\r
-:: Try to locate installed VS2019 VC environment.\r
-if exist "%VSWHERE_TOOLS_BIN%" (\r
-    for /f "tokens=*" %%a in ('"%VSWHERE_TOOLS_BIN%" -version [16.0^,17.0] -property installationPath') do (\r
-        set VS_2019_VCINSTALL_DIR=%%a\VC\\r
-    )\r
-)\r
-\r
-:: Try to locate installed VS2019 Clang.\r
-set VS_2019_CLANG_TOOLS_BIN_PATH=%VS_2019_VCINSTALL_DIR%Tools\llvm\bin\\r
-set VS_2019_CLANG_TOOLS_BIN=%VS_2019_CLANG_TOOLS_BIN_PATH%clang.exe\r
-if not exist "%VS_2019_CLANG_TOOLS_BIN%" (\r
-       goto SETUP_VS_2017\r
-)\r
-\r
-:SETUP_VS_2019_BUILD_TOOLS\r
-\r
-:: Try to locate VS2019 build tools installation.\r
-set VS_2019_BUILD_TOOLS_INSTALL_DIR=%ProgramFiles(x86)%\Microsoft Visual Studio\2019\BuildTools\\r
-set VS_2019_BUILD_TOOLS_CMD=%VS_2019_BUILD_TOOLS_INSTALL_DIR%VC\Auxiliary\Build\%VS_2019_VCVARS_ARCH%\r
-\r
-:: Setup VS2019 VC development environment using build tools installation.\r
-call :setup_build_env "%VS_2019_BUILD_TOOLS_CMD%" "" "%CALLER_WD%" && (\r
-    set "VS_CLANG_TOOLS_BIN_PATH=%VS_2019_CLANG_TOOLS_BIN_PATH%"\r
-    set VS_DEFAULT_PLATFORM_TOOL_SET=v142\r
-    goto ON_EXIT\r
-)\r
-\r
-:SETUP_VS_2019_VC\r
-\r
-:: Try to locate installed VS2019 VC environment.\r
-set VS_2019_DEV_CMD=%VS_2019_VCINSTALL_DIR%Auxiliary\Build\%VS_2019_VCVARS_ARCH%\r
-\r
-:: Setup VS2019 VC development environment using VS installation.\r
-call :setup_build_env "%VS_2019_DEV_CMD%" "" "%CALLER_WD%" && (\r
-    set "VS_CLANG_TOOLS_BIN_PATH=%VS_2017_CLANG_TOOLS_BIN_PATH%"\r
-    set VS_DEFAULT_PLATFORM_TOOL_SET=v142\r
-    goto ON_EXIT\r
-)\r
-\r
-:SETUP_VS_2017\r
-\r
-set VS_2017_VCINSTALL_DIR=\r
-\r
-:: Try to locate installed VS2017 VC environment.\r
-if exist "%VSWHERE_TOOLS_BIN%" (\r
-    for /f "tokens=*" %%a in ('"%VSWHERE_TOOLS_BIN%" -version [15.0^,16.0] -property installationPath') do (\r
-        set VS_2017_VCINSTALL_DIR=%%a\VC\\r
-    )\r
-)\r
-\r
-:: Try to locate installed VS2017 Clang.\r
-SET VS_2017_CLANG_VERSION_FILE=%VS_2017_VCINSTALL_DIR%Auxiliary/Build/Microsoft.ClangC2Version.default.txt\r
-if not exist "%VS_2017_CLANG_VERSION_FILE%" (\r
-       goto SETUP_VS_2015\r
-)\r
-\r
-set /p VS_2017_CLANG_VERSION=<"%VS_2017_CLANG_VERSION_FILE%"\r
-set VS_2017_CLANG_TOOLS_BIN_PATH=%VS_2017_VCINSTALL_DIR%Tools\ClangC2\%VS_2017_CLANG_VERSION%\bin\%VS_2017_CLANG_ARCH%\\r
-set VS_2017_CLANG_TOOLS_BIN=%VS_2017_CLANG_TOOLS_BIN_PATH%clang.exe\r
-if not exist "%VS_2017_CLANG_TOOLS_BIN%" (\r
-       goto SETUP_VS_2015\r
-)\r
-\r
-:SETUP_VS_2017_BUILD_TOOLS\r
-\r
-:: Try to locate VS2017 build tools installation.\r
-set VS_2017_BUILD_TOOLS_INSTALL_DIR=%ProgramFiles(x86)%\Microsoft Visual Studio\2017\BuildTools\\r
-set VS_2017_BUILD_TOOLS_CMD=%VS_2017_BUILD_TOOLS_INSTALL_DIR%VC\Auxiliary\Build\%VS_2017_VCVARS_ARCH%\r
-\r
-:: Setup VS2017 VC development environment using build tools installation.\r
-call :setup_build_env "%VS_2017_BUILD_TOOLS_CMD%" "" "%CALLER_WD%" && (\r
-    set "VS_CLANG_TOOLS_BIN_PATH=%VS_2017_CLANG_TOOLS_BIN_PATH%"\r
-    set VS_DEFAULT_PLATFORM_TOOL_SET=v141\r
-    goto ON_EXIT\r
-)\r
-\r
-:SETUP_VS_2017_VC\r
-\r
-:: Try to locate installed VS2017 VC environment.\r
-set VS_2017_DEV_CMD=%VS_2017_VCINSTALL_DIR%Auxiliary\Build\%VS_2017_VCVARS_ARCH%\r
-\r
-:: Setup VS2017 VC development environment using VS installation.\r
-call :setup_build_env "%VS_2017_DEV_CMD%" "" "%CALLER_WD%" && (\r
-    set "VS_CLANG_TOOLS_BIN_PATH=%VS_2017_CLANG_TOOLS_BIN_PATH%"\r
-    set VS_DEFAULT_PLATFORM_TOOL_SET=v141\r
-    goto ON_EXIT\r
-)\r
-\r
-:SETUP_VS_2015\r
-\r
-set VS_2015_VCINSTALL_DIR=%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\\r
-\r
-:: Try to locate installed VS2015 Clang.\r
-SET VS_2015_CLANG_TOOLS_BIN_PATH=%VS_2015_VCINSTALL_DIR%ClangC2\bin\%VS_2015_CLANG_ARCH%\\r
-SET VS_2015_CLANG_TOOLS_BIN=%VS_2015_CLANG_TOOLS_BIN_PATH%clang.exe\r
-\r
-if not exist "%VS_2015_CLANG_TOOLS_BIN%" (\r
-    goto ON_ENV_ERROR\r
-)\r
-\r
-:SETUP_VS_2015_BUILD_TOOLS\r
-\r
-:: Try to locate VS2015 build tools installation.\r
-set VS_2015_BUILD_TOOLS_INSTALL_DIR=%ProgramFiles(x86)%\Microsoft Visual C++ Build Tools\\r
-set VS_2015_BUILD_TOOLS_CMD=%VS_2015_BUILD_TOOLS_INSTALL_DIR%vcbuildtools.bat\r
-\r
-:: Setup VS2015 VC development environment using build tools installation.\r
-call :setup_build_env "%VS_2015_BUILD_TOOLS_CMD%" "%VS_2015_TOOLCHAIN_ARCH%" "%CALLER_WD%" && (\r
-    set "VS_CLANG_TOOLS_BIN_PATH=%VS_2015_CLANG_TOOLS_BIN_PATH%"\r
-    set VS_DEFAULT_PLATFORM_TOOL_SET=v140\r
-    goto ON_EXIT\r
-)\r
-\r
-:SETUP_VS_2015_VC\r
-\r
-:: Try to locate installed VS2015 VC environment.\r
-set VS_2015_DEV_CMD=%VS_2015_VCINSTALL_DIR%bin\%VS_2015_VCVARS_ARCH%\r
-\r
-call :setup_build_env "%VS_2015_DEV_CMD%" "" "%CALLER_WD%" && (\r
-    set "VS_CLANG_TOOLS_BIN_PATH=%VS_2015_CLANG_TOOLS_BIN_PATH%"\r
-    set VS_DEFAULT_PLATFORM_TOOL_SET=v140\r
-    goto ON_EXIT\r
-)\r
-\r
-:ON_ENV_ERROR\r
-\r
-echo Warning, failed to setup VS build environment needed by VS tooling.\r
-echo Incomplete build environment can cause build error's due to missing compiler,\r
-echo linker and platform libraries.\r
-\r
-exit /b 1\r
-\r
-:ON_EXIT\r
-\r
-:: Add Clang folders to PATH\r
-set "PATH=%VS_CLANG_TOOLS_BIN_PATH%;%PATH%"\r
-\r
-exit /b 0\r
-\r
-:setup_build_env\r
-\r
-:: Check if VS build environment script exists.\r
-if not exist "%~1" (\r
-    goto setup_build_env_error\r
-)\r
-\r
-:: Run VS build environment script.\r
-call "%~1" %~2 > NUL\r
-\r
-:: Restore callers working directory in case it has been changed by VS scripts.\r
-cd /d "%~3"\r
-\r
-goto setup_build_env_exit\r
-\r
-:setup_build_env_error\r
-exit /b 1\r
-\r
-:setup_build_env_exit\r
+:: Set up VS MSVC environment depending on installed VS versions.
+:: Script will setup environment variables directly in callers environment.
+
+:: Make sure we can restore current working directory after setting up environment.
+:: Some of the VS scripts can change the current working directory.
+set CALLER_WD=%CD%
+
+:: Get path for current running script.
+set RUN_SETUP_VS_MSVCBUILD_ENV_SCRIPT_PATH=%~dp0
+
+:: NOTE, MSVC build Mono full AOT tooling currently support 64-bit AMD codegen. Below will only setup
+:: amd64 versions of VS MSVC build environment and corresponding Clang compiler.
+set VS_2015_TOOLCHAIN_ARCH=amd64
+set VS_2015_VCVARS_ARCH=%VS_2015_TOOLCHAIN_ARCH%\vcvars64.bat
+set VS_2015_CLANG_ARCH=%VS_2015_TOOLCHAIN_ARCH%
+set VS_2017_VCVARS_ARCH=vcvars64.bat
+set VS_2017_CLANG_ARCH=HostX64
+set VS_2019_VCVARS_ARCH=%VS_2017_VCVARS_ARCH%
+
+:: 32-bit AOT toolchains for MSVC build mono-sgen.exe is currently not supported.
+:: set VS_2015_TOOLCHAIN_ARCH=x86
+:: set VS_2015_VCVARS_ARCH=vcvars32.bat
+:: set VS_2015_CLANG_ARCH=%VS_2015_TOOLCHAIN_ARCH%
+:: set VS_2017_VCVARS_ARCH=vcvars32.bat
+:: set VS_2017_CLANG_ARCH=HostX86
+:: set VS_2019_VCVARS_ARCH=%VS_2017_VCVARS_ARCH%
+
+set VS_CLANG_TOOLS_BIN_PATH=
+
+:: VS2019/VS2017 includes vswhere.exe that can be used to locate current VS installation.
+set VSWHERE_TOOLS_BIN=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
+
+:: Visual Studio 2015 == 14.0
+if "%VisualStudioVersion%" == "14.0" (
+    goto SETUP_VS_2015
+)
+
+:: Visual Studio 2017 == 15.0
+if "%VisualStudioVersion%" == "15.0" (
+    goto SETUP_VS_2017
+)
+
+:: Visual Studio 2019 == 16.0
+if "%VisualStudioVersion%" == "16.0" (
+    goto SETUP_VS_2019
+)
+
+:SETUP_VS_2019
+
+set VS_2019_VCINSTALL_DIR=
+
+:: Try to locate installed VS2019 VC environment.
+if exist "%VSWHERE_TOOLS_BIN%" (
+    for /f "tokens=*" %%a in ('"%VSWHERE_TOOLS_BIN%" -version [16.0^,17.0] -property installationPath') do (
+        set VS_2019_VCINSTALL_DIR=%%a\VC\
+    )
+)
+
+:: Try to locate installed VS2019 Clang.
+set VS_2019_CLANG_TOOLS_BIN_PATH=%VS_2019_VCINSTALL_DIR%Tools\llvm\bin\
+set VS_2019_CLANG_TOOLS_BIN=%VS_2019_CLANG_TOOLS_BIN_PATH%clang.exe
+if not exist "%VS_2019_CLANG_TOOLS_BIN%" (
+       goto SETUP_VS_2017
+)
+
+:SETUP_VS_2019_BUILD_TOOLS
+
+:: Try to locate VS2019 build tools installation.
+set VS_2019_BUILD_TOOLS_INSTALL_DIR=%ProgramFiles(x86)%\Microsoft Visual Studio\2019\BuildTools\
+set VS_2019_BUILD_TOOLS_CMD=%VS_2019_BUILD_TOOLS_INSTALL_DIR%VC\Auxiliary\Build\%VS_2019_VCVARS_ARCH%
+
+:: Setup VS2019 VC development environment using build tools installation.
+call :setup_build_env "%VS_2019_BUILD_TOOLS_CMD%" "" "%CALLER_WD%" && (
+    set "VS_CLANG_TOOLS_BIN_PATH=%VS_2019_CLANG_TOOLS_BIN_PATH%"
+    set VS_DEFAULT_PLATFORM_TOOL_SET=v142
+    goto ON_EXIT
+)
+
+:SETUP_VS_2019_VC
+
+:: Try to locate installed VS2019 VC environment.
+set VS_2019_DEV_CMD=%VS_2019_VCINSTALL_DIR%Auxiliary\Build\%VS_2019_VCVARS_ARCH%
+
+:: Setup VS2019 VC development environment using VS installation.
+call :setup_build_env "%VS_2019_DEV_CMD%" "" "%CALLER_WD%" && (
+    set "VS_CLANG_TOOLS_BIN_PATH=%VS_2017_CLANG_TOOLS_BIN_PATH%"
+    set VS_DEFAULT_PLATFORM_TOOL_SET=v142
+    goto ON_EXIT
+)
+
+:SETUP_VS_2017
+
+set VS_2017_VCINSTALL_DIR=
+
+:: Try to locate installed VS2017 VC environment.
+if exist "%VSWHERE_TOOLS_BIN%" (
+    for /f "tokens=*" %%a in ('"%VSWHERE_TOOLS_BIN%" -version [15.0^,16.0] -property installationPath') do (
+        set VS_2017_VCINSTALL_DIR=%%a\VC\
+    )
+)
+
+:: Try to locate installed VS2017 Clang.
+SET VS_2017_CLANG_VERSION_FILE=%VS_2017_VCINSTALL_DIR%Auxiliary/Build/Microsoft.ClangC2Version.default.txt
+if not exist "%VS_2017_CLANG_VERSION_FILE%" (
+       goto SETUP_VS_2015
+)
+
+set /p VS_2017_CLANG_VERSION=<"%VS_2017_CLANG_VERSION_FILE%"
+set VS_2017_CLANG_TOOLS_BIN_PATH=%VS_2017_VCINSTALL_DIR%Tools\ClangC2\%VS_2017_CLANG_VERSION%\bin\%VS_2017_CLANG_ARCH%\
+set VS_2017_CLANG_TOOLS_BIN=%VS_2017_CLANG_TOOLS_BIN_PATH%clang.exe
+if not exist "%VS_2017_CLANG_TOOLS_BIN%" (
+       goto SETUP_VS_2015
+)
+
+:SETUP_VS_2017_BUILD_TOOLS
+
+:: Try to locate VS2017 build tools installation.
+set VS_2017_BUILD_TOOLS_INSTALL_DIR=%ProgramFiles(x86)%\Microsoft Visual Studio\2017\BuildTools\
+set VS_2017_BUILD_TOOLS_CMD=%VS_2017_BUILD_TOOLS_INSTALL_DIR%VC\Auxiliary\Build\%VS_2017_VCVARS_ARCH%
+
+:: Setup VS2017 VC development environment using build tools installation.
+call :setup_build_env "%VS_2017_BUILD_TOOLS_CMD%" "" "%CALLER_WD%" && (
+    set "VS_CLANG_TOOLS_BIN_PATH=%VS_2017_CLANG_TOOLS_BIN_PATH%"
+    set VS_DEFAULT_PLATFORM_TOOL_SET=v141
+    goto ON_EXIT
+)
+
+:SETUP_VS_2017_VC
+
+:: Try to locate installed VS2017 VC environment.
+set VS_2017_DEV_CMD=%VS_2017_VCINSTALL_DIR%Auxiliary\Build\%VS_2017_VCVARS_ARCH%
+
+:: Setup VS2017 VC development environment using VS installation.
+call :setup_build_env "%VS_2017_DEV_CMD%" "" "%CALLER_WD%" && (
+    set "VS_CLANG_TOOLS_BIN_PATH=%VS_2017_CLANG_TOOLS_BIN_PATH%"
+    set VS_DEFAULT_PLATFORM_TOOL_SET=v141
+    goto ON_EXIT
+)
+
+:SETUP_VS_2015
+
+set VS_2015_VCINSTALL_DIR=%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\
+
+:: Try to locate installed VS2015 Clang.
+SET VS_2015_CLANG_TOOLS_BIN_PATH=%VS_2015_VCINSTALL_DIR%ClangC2\bin\%VS_2015_CLANG_ARCH%\
+SET VS_2015_CLANG_TOOLS_BIN=%VS_2015_CLANG_TOOLS_BIN_PATH%clang.exe
+
+if not exist "%VS_2015_CLANG_TOOLS_BIN%" (
+    goto ON_ENV_ERROR
+)
+
+:SETUP_VS_2015_BUILD_TOOLS
+
+:: Try to locate VS2015 build tools installation.
+set VS_2015_BUILD_TOOLS_INSTALL_DIR=%ProgramFiles(x86)%\Microsoft Visual C++ Build Tools\
+set VS_2015_BUILD_TOOLS_CMD=%VS_2015_BUILD_TOOLS_INSTALL_DIR%vcbuildtools.bat
+
+:: Setup VS2015 VC development environment using build tools installation.
+call :setup_build_env "%VS_2015_BUILD_TOOLS_CMD%" "%VS_2015_TOOLCHAIN_ARCH%" "%CALLER_WD%" && (
+    set "VS_CLANG_TOOLS_BIN_PATH=%VS_2015_CLANG_TOOLS_BIN_PATH%"
+    set VS_DEFAULT_PLATFORM_TOOL_SET=v140
+    goto ON_EXIT
+)
+
+:SETUP_VS_2015_VC
+
+:: Try to locate installed VS2015 VC environment.
+set VS_2015_DEV_CMD=%VS_2015_VCINSTALL_DIR%bin\%VS_2015_VCVARS_ARCH%
+
+call :setup_build_env "%VS_2015_DEV_CMD%" "" "%CALLER_WD%" && (
+    set "VS_CLANG_TOOLS_BIN_PATH=%VS_2015_CLANG_TOOLS_BIN_PATH%"
+    set VS_DEFAULT_PLATFORM_TOOL_SET=v140
+    goto ON_EXIT
+)
+
+:ON_ENV_ERROR
+
+echo Warning, failed to setup VS build environment needed by VS tooling.
+echo Incomplete build environment can cause build error's due to missing compiler,
+echo linker and platform libraries.
+
+exit /b 1
+
+:ON_EXIT
+
+:: Add Clang folders to PATH
+set "PATH=%VS_CLANG_TOOLS_BIN_PATH%;%PATH%"
+
+exit /b 0
+
+:setup_build_env
+
+:: Check if VS build environment script exists.
+if not exist "%~1" (
+    goto setup_build_env_error
+)
+
+:: Run VS build environment script.
+call "%~1" %~2 > NUL
+
+:: Restore callers working directory in case it has been changed by VS scripts.
+cd /d "%~3"
+
+goto setup_build_env_exit
+
+:setup_build_env_error
+exit /b 1
+
+:setup_build_env_exit
 goto :EOF
\ No newline at end of file
index 7b47754..80b5b7d 100755 (executable)
@@ -1,64 +1,64 @@
-:: Script will setup environment variables directly in callers environment.\r
-\r
-:: If we are running from none Windows shell we will need to restore a clean PATH\r
-:: before setting up VS MSVC build environment. If not there is a risk we will pick up\r
-:: for example cygwin binaries when running toolchain commands not explicitly setup by\r
-:: VS MSVC build environment.\r
-set HKCU_ENV_PATH=\r
-set HKLM_ENV_PATH=\r
-if "%SHELL%" == "/bin/bash" (\r
-    for /f "tokens=2,*" %%a in ('%WINDIR%\System32\reg.exe query "HKCU\Environment" /v "Path" ^| %WINDIR%\System32\find.exe /i "REG_"') do (\r
-        SET HKCU_ENV_PATH=%%b\r
-    )\r
-    for /f "tokens=2,*" %%a in ('%WINDIR%\System32\reg.exe query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "Path" ^| %WINDIR%\System32\find.exe /i "REG_"') do (\r
-        SET HKLM_ENV_PATH=%%b\r
-    )\r
-)\r
-\r
-:: Restore default path, if we are running from none Windows shell.\r
-if "%SHELL%" == "/bin/bash" (\r
-    call :restore_default_path "%HKCU_ENV_PATH%" "%HKLM_ENV_PATH%"\r
-)\r
-\r
-:: There is still a scenario where the default path can include cygwin\bin folder. If that's the case\r
-:: there is still a big risk that build tools will be incorrectly resolved towards cygwin bin folder.\r
-:: Make sure to adjust path and drop all cygwin paths.\r
-set NEW_PATH=\r
-call where /Q "cygpath.exe" && (\r
-    echo Warning, PATH includes cygwin bin folders. This can cause build errors due to incorrectly\r
-    echo located build tools. Build script will drop all cygwin folders from used PATH.\r
-    for %%a in ("%PATH:;=";"%") do (\r
-        if not exist "%%~a\cygpath.exe" (\r
-            call :add_to_new_path "%%~a"\r
-        )\r
-    )\r
-)\r
-\r
-if not "%NEW_PATH%" == "" (\r
-    set "PATH=%NEW_PATH%"\r
-)\r
-\r
-exit /b 0\r
-\r
-:restore_default_path\r
-\r
-:: Restore default PATH.\r
-if not "%~2" == "" (\r
-    if not "%~1" == "" (\r
-        set "PATH=%~2;%~1"\r
-    ) else (\r
-        set "PATH=%~2"\r
-    )\r
-)\r
-\r
-goto :EOF\r
-\r
-:add_to_new_path\r
-\r
-if "%NEW_PATH%" == "" (\r
-    set "NEW_PATH=%~1"\r
-) else (\r
-    SET "NEW_PATH=%NEW_PATH%;%~1"\r
-)\r
-\r
+:: Script will setup environment variables directly in callers environment.
+
+:: If we are running from none Windows shell we will need to restore a clean PATH
+:: before setting up VS MSVC build environment. If not there is a risk we will pick up
+:: for example cygwin binaries when running toolchain commands not explicitly setup by
+:: VS MSVC build environment.
+set HKCU_ENV_PATH=
+set HKLM_ENV_PATH=
+if "%SHELL%" == "/bin/bash" (
+    for /f "tokens=2,*" %%a in ('%WINDIR%\System32\reg.exe query "HKCU\Environment" /v "Path" ^| %WINDIR%\System32\find.exe /i "REG_"') do (
+        SET HKCU_ENV_PATH=%%b
+    )
+    for /f "tokens=2,*" %%a in ('%WINDIR%\System32\reg.exe query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "Path" ^| %WINDIR%\System32\find.exe /i "REG_"') do (
+        SET HKLM_ENV_PATH=%%b
+    )
+)
+
+:: Restore default path, if we are running from none Windows shell.
+if "%SHELL%" == "/bin/bash" (
+    call :restore_default_path "%HKCU_ENV_PATH%" "%HKLM_ENV_PATH%"
+)
+
+:: There is still a scenario where the default path can include cygwin\bin folder. If that's the case
+:: there is still a big risk that build tools will be incorrectly resolved towards cygwin bin folder.
+:: Make sure to adjust path and drop all cygwin paths.
+set NEW_PATH=
+call where /Q "cygpath.exe" && (
+    echo Warning, PATH includes cygwin bin folders. This can cause build errors due to incorrectly
+    echo located build tools. Build script will drop all cygwin folders from used PATH.
+    for %%a in ("%PATH:;=";"%") do (
+        if not exist "%%~a\cygpath.exe" (
+            call :add_to_new_path "%%~a"
+        )
+    )
+)
+
+if not "%NEW_PATH%" == "" (
+    set "PATH=%NEW_PATH%"
+)
+
+exit /b 0
+
+:restore_default_path
+
+:: Restore default PATH.
+if not "%~2" == "" (
+    if not "%~1" == "" (
+        set "PATH=%~2;%~1"
+    ) else (
+        set "PATH=%~2"
+    )
+)
+
+goto :EOF
+
+:add_to_new_path
+
+if "%NEW_PATH%" == "" (
+    set "NEW_PATH=%~1"
+) else (
+    SET "NEW_PATH=%NEW_PATH%;%~1"
+)
+
 goto :EOF
\ No newline at end of file