diff options
26 files changed, 751 insertions, 514 deletions
diff --git a/.gitignore b/.gitignore index 6b5752786b2..0b0871f0672 100644 --- a/.gitignore +++ b/.gitignore @@ -137,6 +137,7 @@ extensions-config.h *.mlpd llvm/build/ llvm/usr/ +sdks/builds/llvm-*/ ############################################################################## # Arcade output directories diff --git a/external/llvm b/external/llvm -Subproject 286f43185878a77fdc78c3303db68e514969bc3 +Subproject 64c0343537016c153894dc60316bd7b316b812c diff --git a/llvm/build_llvm_msbuild.bat b/llvm/build_llvm_msbuild.bat new file mode 100755 index 00000000000..acca70734e3 --- /dev/null +++ b/llvm/build_llvm_msbuild.bat @@ -0,0 +1,94 @@ +:: Set up build environment and build LLVM using MSVC and msbuild targets in mono.sln.
+
+:: 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 Mono MSVC source folder.
+:: %5 LLVM build directory.
+:: %6 LLVM install directory.
+:: %7 Additional arguments passed to msbuild, needs to be quoted if multiple.
+:: -------------------------------------------------------
+
+@echo off
+setlocal
+
+set BUILD_RESULT=1
+
+:: Get path for current running script.
+set RUN_BUILD_LLVM_MSBUILD_SCRIPT_PATH=%~dp0
+
+:: Configure all known build arguments.
+set VS_BUILD_ARGS=
+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 MONO_MSVC_SOURCE_DIR=%RUN_BUILD_LLVM_MSBUILD_SCRIPT_PATH%..\msvc\
+if not "%~1" == "" (
+ set MONO_MSVC_SOURCE_DIR=%~1
+)
+shift
+
+set MONO_LLVM_BUILD_DIR=
+if not "%~1" == "" (
+ set MONO_LLVM_BUILD_DIR=%~1
+)
+shift
+
+set MONO_LLVM_INSTALL_DIR=
+if not "%~1" == "" (
+ set MONO_LLVM_INSTALL_DIR=%~1
+)
+shift
+
+set "VS_ADDITIONAL_ARGUMENTS=/p:PlatformToolset=v140 /p:MONO_TARGET_GC=sgen"
+if not "%~1" == "" (
+ set VS_ADDITIONAL_ARGUMENTS=%~1
+)
+
+:: Setup Windows environment.
+call %MONO_MSVC_SOURCE_DIR%setup-windows-env.bat
+
+:: Setup VS msbuild environment.
+call %MONO_MSVC_SOURCE_DIR%setup-vs-msbuild-env.bat
+
+if not "%MONO_LLVM_BUILD_DIR%" == "" (
+ set VS_BUILD_ARGS=/p:_LLVMBuildDir="%MONO_LLVM_BUILD_DIR%"
+)
+
+if not "%MONO_LLVM_INSTALL_DIR%" == "" (
+ set VS_BUILD_ARGS=%VS_BUILD_ARGS% /p:_LLVMInstallDir="%MONO_LLVM_INSTALL_DIR%"
+)
+
+set VS_BUILD_ARGS=%VS_BUILD_ARGS% /p:MONO_ENABLE_LLVM=true /p:Configuration=%VS_CONFIGURATION% /p:Platform=%VS_PLATFORM% %VS_ADDITIONAL_ARGUMENTS% /t:%VS_TARGET%
+call msbuild.exe %VS_BUILD_ARGS% "%MONO_MSVC_SOURCE_DIR%build-external-llvm.vcxproj" && (
+ 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 diff --git a/llvm/build_llvm_msbuild.sh b/llvm/build_llvm_msbuild.sh new file mode 100755 index 00000000000..88178717c91 --- /dev/null +++ b/llvm/build_llvm_msbuild.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +# Set up build environment and build LLVM using MSVC and msbuild targets in mono.sln. + +# 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 Mono MSVC source folder. +# $5 LLVM build directory. +# $6 LLVM install directory. +# $7 Additional arguments passed to msbuild, needs to be quoted if multiple. +# ------------------------------------------------------- + +function win32_format_path { + local formatted_path=$1 + local host_win32_wsl=0 + local host_win32_cygwin=0 + + host_uname="$(uname -a)" + case "$host_uname" in + *Microsoft*) + host_win32_wsl=1 + ;; + CYGWIN*) + host_win32_cygwin=1 + ;; + esac + + if [[ $host_win32_wsl = 1 ]] && [[ $1 == "/mnt/"* ]]; then + formatted_path="$(wslpath -a -w "$1")" + elif [[ $host_win32_cygwin = 1 ]] && [[ $1 == "/cygdrive/"* ]]; then + formatted_path="$(cygpath -a -w "$1")" + fi + + echo "$formatted_path" +} + +BUILD_LLVM_MSBUILD_SCRIPT_PATH=$(cd "$(dirname "$0")"; pwd) + +BUILD_LLVM_MSBUILD_SCRIPT_PATH=$(win32_format_path "$BUILD_LLVM_MSBUILD_SCRIPT_PATH/build_llvm_msbuild.bat") +MONO_MSVC_SOURCE_DIR=$(win32_format_path "$4") +MONO_LLVM_BUILD_DIR=$(win32_format_path "$5") +MONO_LLVM_INSTALL_DIR=$(win32_format_path "$6") + +WINDOWS_CMD=$(which cmd.exe) +if [ ! -f $WINDOWS_CMD ]; then + WINDOWS_CMD=$WINDIR/System32/cmd.exe +fi + +"$WINDOWS_CMD" /c "$BUILD_LLVM_MSBUILD_SCRIPT_PATH" "$1" "$2" "$3" "$MONO_MSVC_SOURCE_DIR" "$MONO_LLVM_BUILD_DIR" "$MONO_LLVM_INSTALL_DIR" "$7" diff --git a/msvc/build-external-btls.bat b/msvc/build-external-btls.bat index d4de955a5a0..d4de955a5a0 100644..100755 --- a/msvc/build-external-btls.bat +++ b/msvc/build-external-btls.bat diff --git a/msvc/build-external-llvm.bat b/msvc/build-external-llvm.bat index 22a0ad50938..bac098b49bf 100644..100755 --- a/msvc/build-external-llvm.bat +++ b/msvc/build-external-llvm.bat @@ -275,37 +275,10 @@ if exist "%LLVM_BUILD_DIR%\install.vcxproj" ( "%MSBUILD%" "%LLVM_BUILD_DIR%\install.vcxproj" /p:Configuration=%VS_CONFIGURATION% /p:Platform=%VS_PLATFORM% /v:m /nologo
)
-if not exist "%LLVM_INSTALL_DIR%\bin\opt.exe" (
- echo Missing LLVM build output, "%LLVM_INSTALL_DIR%\bin\opt.exe"
+call "install-llvm-mono-build.bat" "%LLVM_INSTALL_DIR%" "%MONO_DIST_DIR%" || (
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_CLEAN_LLVM
diff --git a/msvc/build-external-llvm.vcxproj b/msvc/build-external-llvm.vcxproj index c851755ef2c..9b06ed7f69a 100644 --- a/msvc/build-external-llvm.vcxproj +++ b/msvc/build-external-llvm.vcxproj @@ -162,16 +162,23 @@ <_LLVMAdditionalCMakeArgs>$(_LLVMEnableAsserts)</_LLVMAdditionalCMakeArgs> <_LLVMBuildCommand>build-external-llvm.bat "$(_LLVMSourceDir)" "$(_LLVMBuildDir)" "$(_LLVMInstallDir)" "$(_MonoOutputDir)" "$(_LLVMCFlags)" "$(_LLVMAdditionalCMakeArgs)" "$(Platform)" "$(Configuration)"</_LLVMBuildCommand> </PropertyGroup> - <Target Name="_AfterBuildExternalLLVM" Condition="'$(MONO_ENABLE_LLVM)' == 'true' and '$(_MonoEnableInternalLLVM)' == 'true'"> - <Exec Command="$(_LLVMBuildCommand) "Build" "$(MSBuildBinPath)\" "$(_MonoExternalBuildForceMSBuild)""> + <Target Name="_LLVMBuild" Condition="'$(MONO_ENABLE_LLVM)' == 'true' and '$(_MonoEnableInternalLLVM)' == 'true'"> + <Exec Command="$(_LLVMBuildCommand) "Build" "$(MSBuildBinPath)\" "$(_MonoExternalBuildForceMSBuild)"" Condition="'$(_MonoEnableInternalLLVM)' == 'true'"> <Output TaskParameter="ExitCode" PropertyName="_BuildExternalLLVMExitCode" /> </Exec> </Target> - <Target Name="_AfterCleanExternalLLVM" Condition="'$(MONO_ENABLE_LLVM)' == 'true' and '$(_MonoEnableInternalLLVM)' == 'true'"> + <Target Name="_LLVMInstallBuild" Condition="'$(MONO_ENABLE_LLVM)' == 'true' and '$(_MonoEnableExternalLLVM)' == 'true'" DependsOnTargets="_SetupMonoLLVMBuildProperties"> + <Exec Command="install-llvm-mono-build.bat "$(MONO_LLVM_BIN_DIR)\.." "$(_MonoOutputDir)""> + <Output TaskParameter="ExitCode" PropertyName="_BuildExternalLLVMExitCode" /> + </Exec> + </Target> + <Target Name="_LLVMCleanBuild" Condition="'$(MONO_ENABLE_LLVM)' == 'true' and '$(_MonoEnableInternalLLVM)' == 'true'"> <Exec Command="$(_LLVMBuildCommand) "Clean" "$(MSBuildBinPath)\" "$(_MonoExternalBuildForceMSBuild)""> <Output TaskParameter="ExitCode" PropertyName="_CleanExternalLLVMExitCode" /> </Exec> </Target> + <Target Name="_AfterBuildExternalLLVM" Condition="'$(MONO_ENABLE_LLVM)' == 'true'" DependsOnTargets="_LLVMBuild;_LLVMInstallBuild" /> + <Target Name="_AfterCleanExternalLLVM" Condition="'$(MONO_ENABLE_LLVM)' == 'true'" DependsOnTargets="_LLVMCleanBuild" /> <Target Name="AfterBuild" DependsOnTargets="_ConfigureExternalMonoLLVMBuildEnvironment;_AfterBuildExternalLLVM" /> <Target Name="AfterClean" DependsOnTargets="_ConfigureExternalMonoLLVMBuildEnvironment;_AfterCleanExternalLLVM" /> diff --git a/msvc/install-llvm-mono-build.bat b/msvc/install-llvm-mono-build.bat new file mode 100755 index 00000000000..ebb1a86780c --- /dev/null +++ b/msvc/install-llvm-mono-build.bat @@ -0,0 +1,77 @@ +:: --------------------------------------------------
+:: 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
diff --git a/msvc/install.bat b/msvc/install.bat index 1a433991a7d..1a433991a7d 100644..100755 --- a/msvc/install.bat +++ b/msvc/install.bat diff --git a/msvc/jaystuff.bat b/msvc/jaystuff.bat index a8736d85b08..a8736d85b08 100644..100755 --- a/msvc/jaystuff.bat +++ b/msvc/jaystuff.bat diff --git a/msvc/libmono.bat b/msvc/libmono.bat index 4c68bc1648d..4c68bc1648d 100644..100755 --- a/msvc/libmono.bat +++ b/msvc/libmono.bat diff --git a/msvc/llvm-cmake-config.bat b/msvc/llvm-cmake-config.bat deleted file mode 100644 index 43bf8d6b58a..00000000000 --- a/msvc/llvm-cmake-config.bat +++ /dev/null @@ -1,52 +0,0 @@ -@ECHO OFF
-
-SET TEMP_PATH=%PATH%
-
-REM Update PATH to include local cmake and phython installations.
-REM SET PATH="C:\tools\cmake-3.10.2-win32-x86\bin";"C:\tools\python2.2.7.15\tools\";%PATH%
-
-SET TOP=%1 -IF "" == "%TOP%" ( - ECHO Error, first script parameter should be LLVM source folder. - GOTO ON_ERROR -) - -IF NOT EXIST "%TOP%" ( - ECHO Error, could not find "%TOP%". - GOTO ON_ERROR -)
-
-IF NOT EXIST "%~dp0mono.sln" (
- ECHO Error, script bust be located in same directory as mono.sln file. - GOTO ON_ERROR
-)
-
-SET LLVM_SRC_PATH=%TOP%
-SET LLVM_BUILD_PATH=%TOP%\llvm-build
-
-REM Update to reflect value used in mono.props, MONO_LLVM_INSTALL_DIR_PREFIX property.
-SET LLVM_INSTALL_PATH=%~dp0dist\llvm
-
-SET CROSS_CMAKE_FLAGS=^
--DCMAKE_INSTALL_PREFIX="%LLVM_INSTALL_PATH%" ^
--DCMAKE_BUILD_TYPE=Release ^
--DLLVM_ENABLE_ZLIB=OFF ^
--DLLVM_TARGETS_TO_BUILD="X86" ^
--DCMAKE_CROSSCOMPILING=False ^
--DCMAKE_SYSTEM_NAME=Windows
-
-SET TEMP_WD=%CD%
-cd %LLVM_BUILD_PATH%
-ECHO cmake.exe -G "Visual Studio 14 2015 Win64" %CROSS_CMAKE_FLAGS% %LLVM_SRC_PATH%
-cmake.exe -G "Visual Studio 14 2015 Win64" %CROSS_CMAKE_FLAGS% %LLVM_SRC_PATH%
-cd %TEMP_WD%
-
-:ON_ERROR
- SET CONFIG_RESULT=ERRORLEVEL - GOTO ON_EXIT
-
-:ON_EXIT
- SET PATH=%TEMP_PATH%
- EXIT /b %CONFIG_RESULT%
-
-@ECHO ON
\ No newline at end of file diff --git a/msvc/mono-sgen-msvc.bat b/msvc/mono-sgen-msvc.bat index 975859abec3..5458a8fe7a1 100644..100755 --- a/msvc/mono-sgen-msvc.bat +++ b/msvc/mono-sgen-msvc.bat @@ -4,58 +4,21 @@ :: from VS setup for the corresponding architecture.
@echo off
-
setlocal
set EXECUTE_RESULT=1
-:: 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_MONO_SGEN_MSVC_SCRIPT_PATH=%~dp0
-:: 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%"
+:: 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
)
-:: NOTE, MSVC build mono-sgen.exe AOT compiler currently support 64-bit AMD codegen. Below will only setup
-:: amd64 versions of VS MSVC build environment and corresponding ClangC2 compiler.
-
-set VS_2015_TOOLCHAIN_ARCH=amd64
-set VS_2015_VCVARS_ARCH=%VS_2015_TOOLCHAIN_ARCH%\vcvars64.bat
-set VS_2015_CLANGC2_ARCH=%VS_2015_TOOLCHAIN_ARCH%
-set VS_2017_VCVARS_ARCH=vcvars64.bat
-set VS_2017_CLANGC2_ARCH=HostX64
-
-:: 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_CLANGC2_ARCH=%VS_2015_TOOLCHAIN_ARCH%
-:: set VS_2017_VCVARS_ARCH=vcvars32.bat
-:: set VS_2017_CLANGC2_ARCH=HostX86
-
set MONO_AS_AOT_COMPILER=0
-set VS_CLANGC2_TOOLS_BIN_PATH=
-
-:: Optimization, check if we need to setup full build environment, only needed when running mono-sgen.exe as AOT compiler.
-echo.%* | findstr /c:"--aot=" > nul && (
+:: 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
)
@@ -69,7 +32,8 @@ goto ON_EXECUTE :: Try setting up VS MSVC build environment.
:SETUP_VS_ENV
-:: Optimization, check if we have something that looks like a MSVC build environment already available.
+:: 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%" == "" (
@@ -78,152 +42,56 @@ if /i not "%VCINSTALLDIR%" == "" ( )
)
-:: 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
-)
-
-:SETUP_VS_2015
-
-set VS_2015_VCINSTALL_DIR=%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\
-
-:: Try to locate installed VS2015 Clang/C2.
-SET VS_2015_CLANGC2_TOOLS_BIN_PATH=%VS_2015_VCINSTALL_DIR%ClangC2\bin\%VS_2015_CLANGC2_ARCH%\
-SET VS_2015_CLANGC2_TOOLS_BIN=%VS_2015_CLANGC2_TOOLS_BIN_PATH%clang.exe
-
-if not exist "%VS_2015_CLANGC2_TOOLS_BIN%" (
- goto SETUP_VS_2017
-)
-
-: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_CLANGC2_TOOLS_BIN_PATH=%VS_2015_CLANGC2_TOOLS_BIN_PATH%"
- goto ON_EXECUTE
-)
-
-:SETUP_VS_2015_VC
+:: Setup Windows environment.
+call %RUN_MONO_SGEN_MSVC_SCRIPT_PATH%setup-windows-env.bat
-:: 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_CLANGC2_TOOLS_BIN_PATH=%VS_2015_CLANGC2_TOOLS_BIN_PATH%"
- goto ON_EXECUTE
+if "%MONO_VS_MSVCBUILD_ENV_FILE%" == "" (
+ set MONO_VS_MSVCBUILD_ENV_FILE=%RUN_MONO_SGEN_MSVC_SCRIPT_PATH%mono-sgen.exe.env
)
-:SETUP_VS_2017
-
-:: VS2017 includes vswhere.exe that can be used to locate current VS2017 installation.
-set VSWHERE_TOOLS_BIN=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
-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%" -latest -property installationPath') do (
- set VS_2017_VCINSTALL_DIR=%%a\VC\
+:: 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
)
)
-:: Try to locate installed VS2017 Clang/C2.
-SET VS_2017_CLANGC2_VERSION_FILE=%VS_2017_VCINSTALL_DIR%Auxiliary/Build/Microsoft.ClangC2Version.default.txt
-if not exist "%VS_2017_CLANGC2_VERSION_FILE%" (
- goto ON_ENV_ERROR
-)
-
-set /p VS_2017_CLANGC2_VERSION=<"%VS_2017_CLANGC2_VERSION_FILE%"
-set VS_2017_CLANGC2_TOOLS_BIN_PATH=%VS_2017_VCINSTALL_DIR%Tools\ClangC2\%VS_2017_CLANGC2_VERSION%\bin\%VS_2017_CLANGC2_ARCH%\
-set VS_2017_CLANGC2_TOOLS_BIN=%VS_2017_CLANGC2_TOOLS_BIN_PATH%clang.exe
-if not exist "%VS_2017_CLANGC2_TOOLS_BIN%" (
- goto ON_ENV_ERROR
-)
-
-: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_CLANGC2_TOOLS_BIN_PATH=%VS_2017_CLANGC2_TOOLS_BIN_PATH%"
+if not "%MONO_MSVC_PATH%" == "" (
+ set "PATH=%MONO_MSVC_PATH%;%PATH%"
goto ON_EXECUTE
)
-: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 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%=%%
-:: Setup VS2017 VC development environment using VS installation.
-call :setup_build_env "%VS_2017_DEV_CMD%" "" "%CALLER_WD%" && (
- set "VS_CLANGC2_TOOLS_BIN_PATH=%VS_2017_CLANGC2_TOOLS_BIN_PATH%"
- goto ON_EXECUTE
+:: 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_ENV_ERROR
-
-echo Warning, failed to setup build environment needed by MSVC build mono-sgen.exe running as an AOT compiler.
-echo Incomplete build environment can cause AOT compiler build due to missing compiler, linker and platform libraries.
-
:ON_EXECUTE
-:: Add mono.sgen.exe (needed for optional LLVM tooling) and ClangC2 folders to PATH
-set "PATH=%RUN_MONO_SGEN_MSVC_SCRIPT_PATH%;%VS_CLANGC2_TOOLS_BIN_PATH%;%PATH%"
+:: 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 EXCEUTE_RESULT=0
+ set EXECUTE_RESULT=0
) || (
- set EXCEUTE_RESULT=1
+ set EXECUTE_RESULT=1
if not %ERRORLEVEL% == 0 (
- set EXCEUTE_RESULT=%ERRORLEVEL%
- )
-)
-
-exit /b %EXCEUTE_RESULT%
-
-: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
-
-:restore_default_path
-
-:: Restore default PATH.
-if not "%~2" == "" (
- if not "%~1" == "" (
- set "PATH=%~2;%~1"
- ) else (
- set "PATH=%~2"
+ set EXECUTE_RESULT=%ERRORLEVEL%
)
)
-goto :EOF
+exit /b %EXECUTE_RESULT%
-@echo on
+@echo on
\ No newline at end of file diff --git a/msvc/mono-sgen-msvc.sh b/msvc/mono-sgen-msvc.sh index 03757366d09..a7e9ba44e9b 100755 --- a/msvc/mono-sgen-msvc.sh +++ b/msvc/mono-sgen-msvc.sh @@ -11,11 +11,47 @@ # Optimization, only run full build environment when running mono-sgen.exe as AOT compiler. # If not, just run mono-sgen.exe with supplied arguments. +function win32_format_path { + local formatted_path=$1 + local host_win32_wsl=0 + local host_win32_cygwin=0 + + host_uname="$(uname -a)" + case "$host_uname" in + *Microsoft*) + host_win32_wsl=1 + ;; + CYGWIN*) + host_win32_cygwin=1 + ;; + esac + + if [[ $host_win32_wsl = 1 ]] && [[ $1 == "/mnt/"* ]]; then + formatted_path="$(wslpath -a -w "$1")" + elif [[ $host_win32_cygwin = 1 ]] && [[ $1 == "/cygdrive/"* ]]; then + formatted_path="$(cygpath -a -w "$1")" + fi + + echo "$formatted_path" +} + MONO_SGEN_MSVC_SCRIPT_PATH=$(cd "$(dirname "$0")"; pwd) -if [[ "$@" != *"--aot="* ]]; then +MONO_AS_AOT_COMPILER=0 +if [[ "$@" =~ .*--aot[^-a-zA-Z0-9].*|.*--aot$ ]]; then + MONO_AS_AOT_COMPILER=1 +fi + +if [[ $MONO_AS_AOT_COMPILER = 0 ]]; then "$MONO_SGEN_MSVC_SCRIPT_PATH/mono-sgen.exe" "$@" else - MONO_SGEN_MSVC_SCRIPT_PATH=$(cygpath -w "$MONO_SGEN_MSVC_SCRIPT_PATH/mono-sgen-msvc.bat") - "$WINDIR/System32/cmd.exe" /c "$MONO_SGEN_MSVC_SCRIPT_PATH" "$@" + MONO_SGEN_MSVC_SCRIPT_PATH=$(win32_format_path "$MONO_SGEN_MSVC_SCRIPT_PATH/mono-sgen-msvc.bat") + + WINDOWS_CMD=$(which cmd.exe) + if [ ! -f $WINDOWS_CMD ]; then + WINDOWS_CMD=$WINDIR/System32/cmd.exe + fi + + export MONO_AS_AOT_COMPILER + "$WINDOWS_CMD" /c "$MONO_SGEN_MSVC_SCRIPT_PATH" "$@" fi diff --git a/msvc/mono.external.targets b/msvc/mono.external.targets index 6b732ac35de..c3603ec06d5 100644 --- a/msvc/mono.external.targets +++ b/msvc/mono.external.targets @@ -113,8 +113,8 @@ <PropertyGroup> <_LLVMSourceDir Condition="'$(_LLVMSourceDir)' == ''">$(MONO_INTERNAL_LLVM_SOURCE_DIR)</_LLVMSourceDir> <_LLVMSourceDir Condition="'$(_LLVMSourceDir)' == ''">$(_MonoSourceDir)\external\llvm</_LLVMSourceDir> - <_LLVMBuildDir>$([System.IO.Path]::GetFullPath('$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\external\llvm-build\$(Configuration)'))</_LLVMBuildDir> - <_LLVMInstallDir>$(_LLVMBuildDir)\install</_LLVMInstallDir> + <_LLVMBuildDir Condition="'$(_LLVMBuildDir)' == ''">$([System.IO.Path]::GetFullPath('$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\external\llvm-build\$(Configuration)'))</_LLVMBuildDir> + <_LLVMInstallDir Condition="'$(_LLVMInstallDir)' == ''">$(_LLVMBuildDir)\install</_LLVMInstallDir> <_MonoLLVMConfig>$(_LLVMInstallDir)\bin\llvm-config.exe</_MonoLLVMConfig> </PropertyGroup> diff --git a/msvc/mono.vcxproj b/msvc/mono.vcxproj index 7c95a2d6f63..4602e6c91f5 100644 --- a/msvc/mono.vcxproj +++ b/msvc/mono.vcxproj @@ -113,7 +113,10 @@ </ProjectReference> <PostBuildEvent> <Command>xcopy "$(SolutionDir)mono-sgen-msvc.sh" "$(OutDir)" /q /y >nul 2>&1 -xcopy "$(SolutionDir)mono-sgen-msvc.bat" "$(OutDir)" /q /y >nul 2>&1</Command> + +xcopy "$(SolutionDir)mono-sgen-msvc.bat" "$(OutDir)" /q /y >nul 2>&1 +xcopy "$(SolutionDir)setup-windows-env.bat" "$(OutDir)" /q /y >nul 2>&1 +xcopy "$(SolutionDir)setup-vs-msvcbuild-env.bat" "$(OutDir)" /q /y >nul 2>&1</Command> </PostBuildEvent> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> @@ -141,7 +144,10 @@ xcopy "$(SolutionDir)mono-sgen-msvc.bat" "$(OutDir)" /q /y >nul 2>&1</ </Link> <PostBuildEvent> <Command>xcopy "$(SolutionDir)mono-sgen-msvc.sh" "$(OutDir)" /q /y >nul 2>&1 -xcopy "$(SolutionDir)mono-sgen-msvc.bat" "$(OutDir)" /q /y >nul 2>&1</Command> + +xcopy "$(SolutionDir)mono-sgen-msvc.bat" "$(OutDir)" /q /y >nul 2>&1 +xcopy "$(SolutionDir)setup-windows-env.bat" "$(OutDir)" /q /y >nul 2>&1 +xcopy "$(SolutionDir)setup-vs-msvcbuild-env.bat" "$(OutDir)" /q /y >nul 2>&1</Command> </PostBuildEvent> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> @@ -165,7 +171,10 @@ xcopy "$(SolutionDir)mono-sgen-msvc.bat" "$(OutDir)" /q /y >nul 2>&1</ </Link> <PostBuildEvent> <Command>xcopy "$(SolutionDir)mono-sgen-msvc.sh" "$(OutDir)" /q /y >nul 2>&1 -xcopy "$(SolutionDir)mono-sgen-msvc.bat" "$(OutDir)" /q /y >nul 2>&1</Command> + +xcopy "$(SolutionDir)mono-sgen-msvc.bat" "$(OutDir)" /q /y >nul 2>&1 +xcopy "$(SolutionDir)setup-windows-env.bat" "$(OutDir)" /q /y >nul 2>&1 +xcopy "$(SolutionDir)setup-vs-msvcbuild-env.bat" "$(OutDir)" /q /y >nul 2>&1</Command> </PostBuildEvent> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> @@ -190,7 +199,10 @@ xcopy "$(SolutionDir)mono-sgen-msvc.bat" "$(OutDir)" /q /y >nul 2>&1</ </Link> <PostBuildEvent> <Command>xcopy "$(SolutionDir)mono-sgen-msvc.sh" "$(OutDir)" /q /y >nul 2>&1 -xcopy "$(SolutionDir)mono-sgen-msvc.bat" "$(OutDir)" /q /y >nul 2>&1</Command> + +xcopy "$(SolutionDir)mono-sgen-msvc.bat" "$(OutDir)" /q /y >nul 2>&1 +xcopy "$(SolutionDir)setup-windows-env.bat" "$(OutDir)" /q /y >nul 2>&1 +xcopy "$(SolutionDir)setup-vs-msvcbuild-env.bat" "$(OutDir)" /q /y >nul 2>&1</Command> </PostBuildEvent> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(MONO_COMPILE_AS_CPP)'=='true'"> diff --git a/msvc/package.bat b/msvc/package.bat index df29a8ba6f2..df29a8ba6f2 100644..100755 --- a/msvc/package.bat +++ b/msvc/package.bat diff --git a/msvc/run-msbuild.bat b/msvc/run-msbuild.bat index 033739f5699..fd5633a2346 100644..100755 --- a/msvc/run-msbuild.bat +++ b/msvc/run-msbuild.bat @@ -9,55 +9,13 @@ :: -------------------------------------------------------
@echo off
-
setlocal
set BUILD_RESULT=1
-:: 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_MSBUILD_SCRIPT_PATH=%~dp0
-:: 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%"
-)
-
:: Configure all known build arguments.
set VS_BUILD_ARGS=""
set VS_TARGET=build
@@ -86,74 +44,11 @@ if /i not "%~1" == "" ( set VS_ADDITIONAL_ARGUMENTS=%~1
)
-:: 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
-)
-
-: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%" && (
- goto ON_BUILD
-)
-
-: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%" && (
- goto ON_BUILD
-)
-
-: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%" && (
- goto ON_BUILD
-)
-
-:SETUP_VS_2017_VC
-
-:: VS2017 includes vswhere.exe that can be used to locate current VS2017 installation.
-set VSWHERE_TOOLS_BIN=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
-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%" -latest -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%" && (
- goto ON_BUILD
-)
-
-:ON_ENV_ERROR
-
-echo Warning, failed to setup build environment needed by msbuild.exe.
-echo Incomplete build environment can cause build error's due to missing compiler, linker and platform libraries.
+:: Setup Windows environment.
+call %RUN_MSBUILD_SCRIPT_PATH%setup-windows-env.bat
-:ON_BUILD
+:: Setup VS msbuild environment.
+call %RUN_MSBUILD_SCRIPT_PATH%setup-vs-msbuild-env.bat
set VS_BUILD_ARGS=/p:Configuration=%VS_CONFIGURATION% /p:Platform=%VS_PLATFORM% %VS_ADDITIONAL_ARGUMENTS% /t:%VS_TARGET%
call msbuild.exe %VS_BUILD_ARGS% "%RUN_MSBUILD_SCRIPT_PATH%mono.sln" && (
@@ -167,48 +62,4 @@ call msbuild.exe %VS_BUILD_ARGS% "%RUN_MSBUILD_SCRIPT_PATH%mono.sln" && ( exit /b %BUILD_RESULT%
-: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
-
-: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
-
-@echo on
+@echo on
\ No newline at end of file diff --git a/msvc/run-msbuild.sh b/msvc/run-msbuild.sh index 7de93f0d9f4..d90d8ac1615 100755 --- a/msvc/run-msbuild.sh +++ b/msvc/run-msbuild.sh @@ -8,7 +8,36 @@ # $4 Additional arguments passed to msbuild, needs to be quoted if multiple. #------------------------------------------------------- +function win32_format_path { + local formatted_path=$1 + local host_win32_wsl=0 + local host_win32_cygwin=0 + + host_uname="$(uname -a)" + case "$host_uname" in + *Microsoft*) + host_win32_wsl=1 + ;; + CYGWIN*) + host_win32_cygwin=1 + ;; + esac + + if [[ $host_win32_wsl = 1 ]] && [[ $1 == "/mnt/"* ]]; then + formatted_path="$(wslpath -a -w "$1")" + elif [[ $host_win32_cygwin = 1 ]] && [[ $1 == "/cygdrive/"* ]]; then + formatted_path="$(cygpath -a -w "$1")" + fi + + echo "$formatted_path" +} + RUN_MSBUILD_SCRIPT_PATH=$(cd "$(dirname "$0")"; pwd) -RUN_MSBUILD_SCRIPT_PATH=$(cygpath -w "$RUN_MSBUILD_SCRIPT_PATH/run-msbuild.bat") +RUN_MSBUILD_SCRIPT_PATH=$(win32_format_path "$RUN_MSBUILD_SCRIPT_PATH/run-msbuild.bat") + +WINDOWS_CMD=$(which cmd.exe) +if [ ! -f $WINDOWS_CMD ]; then + WINDOWS_CMD=$WINDIR/System32/cmd.exe +fi -"$WINDIR/System32/cmd.exe" /c "$RUN_MSBUILD_SCRIPT_PATH" "$@" +"$WINDOWS_CMD" /c "$RUN_MSBUILD_SCRIPT_PATH" "$@" diff --git a/msvc/setup-vs-msbuild-env.bat b/msvc/setup-vs-msbuild-env.bat new file mode 100755 index 00000000000..aefeb124966 --- /dev/null +++ b/msvc/setup-vs-msbuild-env.bat @@ -0,0 +1,104 @@ +:: 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
+
+:: 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
+)
+
+: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%" && (
+ 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%" && (
+ 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%" && (
+ goto ON_EXIT
+)
+
+:SETUP_VS_2017_VC
+
+:: VS2017 includes vswhere.exe that can be used to locate current VS2017 installation.
+set VSWHERE_TOOLS_BIN=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
+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%" -latest -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%" && (
+ 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 diff --git a/msvc/setup-vs-msvcbuild-env.bat b/msvc/setup-vs-msvcbuild-env.bat new file mode 100755 index 00000000000..88557fe0486 --- /dev/null +++ b/msvc/setup-vs-msvcbuild-env.bat @@ -0,0 +1,155 @@ +:: 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 ClangC2 compiler.
+set VS_2015_TOOLCHAIN_ARCH=amd64
+set VS_2015_VCVARS_ARCH=%VS_2015_TOOLCHAIN_ARCH%\vcvars64.bat
+set VS_2015_CLANGC2_ARCH=%VS_2015_TOOLCHAIN_ARCH%
+set VS_2017_VCVARS_ARCH=vcvars64.bat
+set VS_2017_CLANGC2_ARCH=HostX64
+
+:: 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_CLANGC2_ARCH=%VS_2015_TOOLCHAIN_ARCH%
+:: set VS_2017_VCVARS_ARCH=vcvars32.bat
+:: set VS_2017_CLANGC2_ARCH=HostX86
+
+set VS_CLANGC2_TOOLS_BIN_PATH=
+
+:: 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
+)
+
+:SETUP_VS_2015
+
+set VS_2015_VCINSTALL_DIR=%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\
+
+:: Try to locate installed VS2015 Clang/C2.
+SET VS_2015_CLANGC2_TOOLS_BIN_PATH=%VS_2015_VCINSTALL_DIR%ClangC2\bin\%VS_2015_CLANGC2_ARCH%\
+SET VS_2015_CLANGC2_TOOLS_BIN=%VS_2015_CLANGC2_TOOLS_BIN_PATH%clang.exe
+
+if not exist "%VS_2015_CLANGC2_TOOLS_BIN%" (
+ goto SETUP_VS_2017
+)
+
+: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_CLANGC2_TOOLS_BIN_PATH=%VS_2015_CLANGC2_TOOLS_BIN_PATH%"
+ 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_CLANGC2_TOOLS_BIN_PATH=%VS_2015_CLANGC2_TOOLS_BIN_PATH%"
+ goto ON_EXIT
+)
+
+:SETUP_VS_2017
+
+:: VS2017 includes vswhere.exe that can be used to locate current VS2017 installation.
+set VSWHERE_TOOLS_BIN=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
+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%" -latest -property installationPath') do (
+ set VS_2017_VCINSTALL_DIR=%%a\VC\
+ )
+)
+
+:: Try to locate installed VS2017 Clang/C2.
+SET VS_2017_CLANGC2_VERSION_FILE=%VS_2017_VCINSTALL_DIR%Auxiliary/Build/Microsoft.ClangC2Version.default.txt
+if not exist "%VS_2017_CLANGC2_VERSION_FILE%" (
+ goto ON_ENV_ERROR
+)
+
+set /p VS_2017_CLANGC2_VERSION=<"%VS_2017_CLANGC2_VERSION_FILE%"
+set VS_2017_CLANGC2_TOOLS_BIN_PATH=%VS_2017_VCINSTALL_DIR%Tools\ClangC2\%VS_2017_CLANGC2_VERSION%\bin\%VS_2017_CLANGC2_ARCH%\
+set VS_2017_CLANGC2_TOOLS_BIN=%VS_2017_CLANGC2_TOOLS_BIN_PATH%clang.exe
+if not exist "%VS_2017_CLANGC2_TOOLS_BIN%" (
+ goto ON_ENV_ERROR
+)
+
+: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_CLANGC2_TOOLS_BIN_PATH=%VS_2017_CLANGC2_TOOLS_BIN_PATH%"
+ 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_CLANGC2_TOOLS_BIN_PATH=%VS_2017_CLANGC2_TOOLS_BIN_PATH%"
+ 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 ClangC2 folders to PATH
+set "PATH=%VS_CLANGC2_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 diff --git a/msvc/setup-windows-env.bat b/msvc/setup-windows-env.bat new file mode 100755 index 00000000000..7b47754e0b1 --- /dev/null +++ b/msvc/setup-windows-env.bat @@ -0,0 +1,64 @@ +:: 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 diff --git a/msvc/test-config-setup.bat b/msvc/test-config-setup.bat index adb174d8093..adb174d8093 100644..100755 --- a/msvc/test-config-setup.bat +++ b/msvc/test-config-setup.bat diff --git a/msvc/winsetup.bat b/msvc/winsetup.bat index 28f1bbd2f1f..aa6c882155c 100755 --- a/msvc/winsetup.bat +++ b/msvc/winsetup.bat @@ -3,80 +3,13 @@ setlocal set BUILD_RESULT=1 -:: 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_WINSETUP_SCRIPT_PATH=%~dp0 -:: 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 -) - -: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%" && ( - goto ON_BUILD -) - -: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%" && ( - goto ON_BUILD -) - -: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%" && ( - goto ON_BUILD -) - -:SETUP_VS_2017_VC +:: Setup VS msbuild environment. +call %RUN_WINSETUP_SCRIPT_PATH%setup-vs-msbuild-env.bat -:: VS2017 includes vswhere.exe that can be used to locate current VS2017 installation. -set VSWHERE_TOOLS_BIN=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe -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%" -latest -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%" && ( - goto ON_BUILD -) - -:ON_ENV_ERROR - -echo Warning, failed to setup build environment needed by msbuild.exe. -echo Incomplete build environment can cause build error's due to missing compiler, linker and platform libraries. - -:ON_BUILD - -call "msbuild.exe" /t:RunWinConfigSetup mono.winconfig.targets && ( +call "msbuild.exe" /t:RunWinConfigSetup %RUN_WINSETUP_SCRIPT_PATH%mono.winconfig.targets && ( set BUILD_RESULT=0 ) || ( set BUILD_RESULT=1 @@ -87,25 +20,4 @@ call "msbuild.exe" /t:RunWinConfigSetup mono.winconfig.targets && ( exit /b %BUILD_RESULT% -: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 - @echo on diff --git a/sdks/builds/Makefile b/sdks/builds/Makefile index c7ed0916d38..bf786307ca5 100644 --- a/sdks/builds/Makefile +++ b/sdks/builds/Makefile @@ -11,16 +11,26 @@ RELEASE=$(if $(filter $(CONFIGURATION),release),1) lowercase=$(shell echo "$(1)" | tr '[:upper:]' '[:lower:]') -CCACHE:=$(if $(DISABLE_CCACHE),,$(shell which ccache)) -NINJA:=$(shell which ninja) - UNAME=$(shell uname) +ifneq (,$(findstring CYGWIN,$(UNAME))) +UNAME=Windows +endif + +ifeq ($(UNAME),Linux) +UNAME_WSL_CHECK=$(shell uname -a) +ifneq (,$(findstring Microsoft,$(UNAME_WSL_CHECK))) +UNAME=Windows +endif +endif + ifneq ($(UNAME),Darwin) ifneq ($(UNAME),Linux) +ifneq ($(UNAME),Windows) $(error "Unsupported UNAME=$(UNAME)") endif endif +endif ifneq ($(UNAME),Darwin) # iOS and Mac requires Xcode to be available, and Xcode is only available on macOS @@ -28,14 +38,31 @@ DISABLE_IOS=1 DISABLE_MAC=1 endif +# On Windows, we will just trigger LLVM builds using this make file. +ifeq ($(UNAME),Windows) +DISABLE_IOS=1 +DISABLE_MAC=1 +DISABLE_ANDROID=1 +DISABLE_WASM=1 +DISABLE_WASM_CROSS=1 +DISABLE_DESKTOP=1 +DISABLE_CCACHE=1 +DISABLE_LIBTOOLIZE=1 +endif + +CCACHE:=$(if $(DISABLE_CCACHE),,$(shell which ccache)) +NINJA:=$(shell which ninja) + include $(TOP)/sdks/versions.mk include $(TOP)/sdks/paths.mk +ifndef DISABLE_LIBTOOLIZE #brew's libtool is not compatible with some of the deps needed (I.E. V8) so in those systems we need to explicit add to the path #this is due mono not being compatible with xcode's libtool, which is what's on path by default ifeq (, $(shell which glibtoolize)) EXTRA_PATH=$(wildcard /usr/local/Cellar/libtool/*/bin/) endif +endif all: package diff --git a/sdks/builds/llvm.mk b/sdks/builds/llvm.mk index 26feec7950b..bf395c178e1 100644 --- a/sdks/builds/llvm.mk +++ b/sdks/builds/llvm.mk @@ -39,6 +39,9 @@ $(eval $(call LLVMProvisionTemplate,llvm,llvm32,$(TOP)/external/llvm)) $(eval $(call LLVMProvisionTemplate,llvm,llvm64,$(TOP)/external/llvm)) $(eval $(call LLVMProvisionTemplate,llvm,llvmwin32,$(TOP)/external/llvm)) $(eval $(call LLVMProvisionTemplate,llvm,llvmwin64,$(TOP)/external/llvm)) +ifeq ($(UNAME),Windows) +$(eval $(call LLVMProvisionTemplate,llvm,llvmwin64-msvc,$(TOP)/external/llvm)) +endif ifeq ($(UNAME),Darwin) $(eval $(call LLVMProvisionTemplate,llvm36,llvm32,$(LLVM36_SRC))) endif @@ -180,3 +183,27 @@ llvm-llvmwin32_CMAKE_ARGS=-DLLVM_BUILD_32_BITS=On $(eval $(call LLVMMxeTemplate,llvmwin32,i686,mxe-Win32)) $(eval $(call LLVMMxeTemplate,llvmwin64,x86_64,mxe-Win64)) endif + +## +# Parameters +# $(1): target +# $(2): arch +define LLVMMsvcTemplate + +.PHONY: setup-llvm-$(1) +setup-llvm-$(1): + mkdir -p $$(TOP)/sdks/out/llvm-$(1) + +.PHONY: package-llvm-$(1) +package-llvm-$(1): setup-llvm-$(1) + $$(TOP)/llvm/build_llvm_msbuild.sh "build" "$(2)" "release" "$$(TOP)/msvc/" "$$(TOP)/sdks/builds/llvm-$(1)" "$$(TOP)/sdks/out/llvm-$(1)" + +.PHONY: clean-llvm-$(1) +clean-llvm-$(1): + $$(TOP)/llvm/build_llvm_msbuild.sh "clean" "$(2)" "release" "$$(TOP)/msvc/" "$$(TOP)/sdks/builds/llvm-$(1)" "$$(TOP)/sdks/out/llvm-$(1)" + +endef + +ifeq ($(UNAME),Windows) +$(eval $(call LLVMMsvcTemplate,llvmwin64-msvc,x86_64)) +endif |