Imported Upstream version 6.4.0.137

Former-commit-id: 943baa9f16a098c33e129777827f3a9d20da00d6
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2019-07-26 19:53:28 +00:00
parent e9207cf623
commit ef583813eb
2712 changed files with 74169 additions and 40587 deletions

View File

@@ -0,0 +1,3 @@
# Windows line ending
*.sh text eol=lf
*.bat text eol=crlf

3
external/llvm/scripts/ci/.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
builds
out
*.tar.gz

View File

@@ -0,0 +1,429 @@
:: --------------------------------------------------
:: 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.
:: %10 MsBuild bin path, if used.
:: %11 Force MSBuild (true/false), if used.
:: --------------------------------------------------
@echo off
setlocal
set TEMP_PATH=%PATH%
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 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 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 "%FORCE_MSBUILD%" == "" (
set FORCE_MSBUILD=false
)
if not exist "%LLVM_DIR%" (
echo Could not find "%LLVM_DIR%".
goto ON_ERROR
)
set LLVM_CFLAGS=%VS_CFLAGS%
set LLVM_ARCH=x86_64
if /i "%VS_PLATFORM%" == "win32" (
set LLVM_ARCH=i386
)
:: Check if executed from VS2015/VS2017 build environment.
if "%VisualStudioVersion%" == "14.0" (
goto ON_ENV_OK
)
if "%VisualStudioVersion%" == "15.0" (
goto ON_ENV_OK
)
:: Executed outside VS2015/VS2017 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 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".
)
:: VS 2017.
set VSWHERE_TOOLS_BIN=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
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%" -latest -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".
)
)
echo Could not detect Visual Studio build environment. You may experience build problems if wrong toolchain is auto detected.
:ON_ENV_OK
:: 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.
pushd
cd "%LLVM_DIR%"
"%GIT%" submodule update --init
if not ERRORLEVEL == 0 (
"%GIT%" submodule init
"%GIT%" submodule update
if not ERRORLEVEL == 0 (
echo Git llvm submodules failed to updated. You may experience compilation problems if some submodules are out of date.
)
)
popd
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=
if /i "%CMAKE_GENERATOR%" == "ninja" (
set CMAKE_GENERATOR_ARGS=-DCMAKE_BUILD_TYPE=%VS_CONFIGURATION%
) else (
set CMAKE_GENERATOR_ARGS=-Thost=x64
)
:: 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%" ^
%LLVM_ADDITIONAL_CMAKE_ARGS% ^
%CMAKE_GENERATOR_ARGS% ^
-G "%CMAKE_GENERATOR%" ^
"%LLVM_DIR%"
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 || (
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
)
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_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
set PATH=%TEMP_PATH%
exit /b %BUILD_RESULT%
:: ##############################################################################################################################
:: Functions
:: --------------------------------------------------
:: 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.
)
:: Detect VS version to use right cmake generator.
set CMAKE_GENERATOR=Visual Studio 14 2015
if "%VisualStudioVersion%" == "15.0" (
set CMAKE_GENERATOR=Visual Studio 15 2017
)
if /i "%VS_PLATFORM%" == "x64" (
set CMAKE_GENERATOR=%CMAKE_GENERATOR% Win64
)
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=Ninja
set LLVM_BUILD_OUTPUT_DIR=%LLVM_BUILD_DIR%
:_SETUP_CMAKE_ENVIRONMENT_EXIT
goto :EOF
@echo on

View File

@@ -0,0 +1,8 @@
#!/bin/bash -e
RUN_JENKINS_LINUX_SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
echo "ENVIRONMENT:"
env
$RUN_JENKINS_LINUX_SCRIPT_DIR/package.sh

39
external/llvm/scripts/ci/run-jenkins-osx.sh vendored Executable file
View File

@@ -0,0 +1,39 @@
#!/bin/bash -e
echo "ENVIRONMENT:"
env
llvm_base_CMAKE_FLAGS="-DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD=X86;ARM;AArch64 -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly -DLLVM_BUILD_TESTS=Off -DLLVM_INCLUDE_TESTS=Off -DLLVM_TOOLS_TO_BUILD=opt;llc;llvm-config;llvm-dis -G Ninja"
llvm64_CMAKE_FLAGS="$llvm_base_CMAKE_FLAGS"
llvm32_CMAKE_FLAGS="$llvm_base_CMAKE_FLAGS -DLLVM_BUILD_32_BITS=On"
rm -rf build
mkdir -p build
cd build
cmake $llvm64_CMAKE_FLAGS -DCMAKE_INSTALL_PREFIX=$PWD/../usr64 ../
ninja
ninja install
cd ..
rm -rf build32
mkdir -p build32
cd build32
cmake $llvm32_CMAKE_FLAGS -DCMAKE_INSTALL_PREFIX=$PWD/../usr32 ../
ninja
ninja install
cd ..
rm -rf tmp-bin
mkdir tmp-bin
cp usr64/bin/{llc,opt,llvm-dis,llvm-config} tmp-bin/
rm usr64/bin/*
cp tmp-bin/* usr64/bin/
rm -rf tmp-bin2
mkdir tmp-bin2
cp usr32/bin/{llc,opt,llvm-dis,llvm-config} tmp-bin2
rm usr32/bin/*
cp tmp-bin2/* usr32/bin/
# Don't need 32 bit binaries
rm -f usr64/lib/libLTO.* usr64/lib/*.dylib usr32/lib/libLTO.* usr32/lib/*.dylib
tar cvzf llvm-osx64-$GIT_COMMIT.tar.gz usr64 usr32

View File

@@ -0,0 +1,47 @@
:: Set up build environment and build LLVM using build-external-llvm.bat.
:: Arguments:
:: -------------------------------------------------------
:: -------------------------------------------------------
@echo off
setlocal
set BUILD_RESULT=1
:: Get path for current running script.
set RUN_JENKINS_WINDOWS_SCRIPT_PATH=%~dp0
set MONO_LLVM_SRC_DIR=%RUN_JENKINS_WINDOWS_SCRIPT_PATH%..\..
set MONO_LLVM_BUILD_DIR=%RUN_JENKINS_WINDOWS_SCRIPT_PATH%builds\llvm-llvmwin64-msvc
set MONO_LLVM_INSTALL_DIR=%RUN_JENKINS_WINDOWS_SCRIPT_PATH%out\llvm-llvmwin64-msvc
if exist "%MONO_LLVM_BUILD_DIR%" (
rmdir /S /Q "%MONO_LLVM_BUILD_DIR%"
)
if exist "%MONO_LLVM_INSTALL_DIR%" (
rmdir /S /Q "%MONO_LLVM_INSTALL_DIR%"
)
mkdir "%MONO_LLVM_BUILD_DIR%"
mkdir "%MONO_LLVM_INSTALL_DIR%"
:: Setup Windows environment.
call %RUN_JENKINS_WINDOWS_SCRIPT_PATH%setup-windows-env.bat
:: Setup VS msvc build environment.
call %RUN_JENKINS_WINDOWS_SCRIPT_PATH%setup-vs-msvcbuild-env.bat
:: Run LLVM builds using default argument (similar to how its build from mono.sln)
call %RUN_JENKINS_WINDOWS_SCRIPT_PATH%build-external-llvm.bat "%MONO_LLVM_SRC_DIR%" "%MONO_LLVM_BUILD_DIR%" "%MONO_LLVM_INSTALL_DIR%" "%MONO_LLVM_BUILD_DIR%" "-D__default_codegen__ -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -DHAVE_CONFIG_H -DGC_NOT_DLL -DWIN32_THREADS -DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -D_WIN32_IE=0x0501 -D_UNICODE -DUNICODE -DFD_SETSIZE=1024 -DNVALGRIND" "-DLLVM_ENABLE_ASSERTIONS=Off" "x64" "Release" "Build" "" "false" && (
set BUILD_RESULT=0
) || (
set BUILD_RESULT=1
if not %ERRORLEVEL% == 0 (
set BUILD_RESULT=%ERRORLEVEL%
)
)
exit /b %BUILD_RESULT%
@echo on

View File

@@ -0,0 +1,41 @@
#!/bin/bash -e
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"
}
echo "ENVIRONMENT:"
env
RUN_JENKINS_WINDOWS_SCRIPT_PATH=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
RUN_JENKINS_WINDOWS_SCRIPT_PATH_WINDOWS=$(win32_format_path "$RUN_JENKINS_WINDOWS_SCRIPT_PATH/run-jenkins-windows.bat")
WINDOWS_CMD=$(which cmd.exe)
if [ ! -f $WINDOWS_CMD ]; then
WINDOWS_CMD=$WINDIR/System32/cmd.exe
fi
"$WINDOWS_CMD" /c "$RUN_JENKINS_WINDOWS_SCRIPT_PATH_WINDOWS"
GIT_COMMIT=$(git rev-parse HEAD)
tar cvzf llvm-llvmwin64-msvc-$GIT_COMMIT-Windows.tar.gz -C $RUN_JENKINS_WINDOWS_SCRIPT_PATH/out/llvm-llvmwin64-msvc .

View File

@@ -1,39 +1,24 @@
#!/bin/bash -e
echo "ENVIRONMENT:"
env
RUN_JENKINS_SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
llvm_base_CMAKE_FLAGS="-DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD=X86;ARM;AArch64 -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly -DLLVM_BUILD_TESTS=Off -DLLVM_INCLUDE_TESTS=Off -DLLVM_TOOLS_TO_BUILD=opt;llc;llvm-config;llvm-dis -G Ninja"
llvm64_CMAKE_FLAGS="$llvm_base_CMAKE_FLAGS"
llvm32_CMAKE_FLAGS="$llvm_base_CMAKE_FLAGS -DLLVM_BUILD_32_BITS=On"
rm -rf build
mkdir -p build
cd build
cmake $llvm64_CMAKE_FLAGS -DCMAKE_INSTALL_PREFIX=$PWD/../usr64 ../
ninja
ninja install
cd ..
rm -rf build32
mkdir -p build32
cd build32
cmake $llvm32_CMAKE_FLAGS -DCMAKE_INSTALL_PREFIX=$PWD/../usr32 ../
ninja
ninja install
cd ..
rm -rf tmp-bin
mkdir tmp-bin
cp usr64/bin/{llc,opt,llvm-dis,llvm-config} tmp-bin/
rm usr64/bin/*
cp tmp-bin/* usr64/bin/
rm -rf tmp-bin2
mkdir tmp-bin2
cp usr32/bin/{llc,opt,llvm-dis,llvm-config} tmp-bin2
rm usr32/bin/*
cp tmp-bin2/* usr32/bin/
# Don't need 32 bit binaries
rm -f usr64/lib/libLTO.* usr64/lib/*.dylib usr32/lib/libLTO.* usr32/lib/*.dylib
tar cvzf llvm-osx64-$GIT_COMMIT.tar.gz usr64 usr32
host_uname="$(uname)"
case "$host_uname" in
CYGWIN*)
$RUN_JENKINS_SCRIPT_DIR/run-jenkins-windows.sh
;;
Linux)
host_uname="$(uname -a)"
case "$host_uname" in
*Microsoft*)
$RUN_JENKINS_SCRIPT_DIR/run-jenkins-windows.sh
;;
*)
$RUN_JENKINS_SCRIPT_DIR/run-jenkins-linux.sh
;;
esac
;;
Darwin)
$RUN_JENKINS_SCRIPT_DIR/run-jenkins-osx.sh
;;
esac

View File

@@ -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

View File

@@ -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