summaryrefslogtreecommitdiff
path: root/build.cmd
diff options
context:
space:
mode:
Diffstat (limited to 'build.cmd')
-rw-r--r--build.cmd190
1 files changed, 190 insertions, 0 deletions
diff --git a/build.cmd b/build.cmd
new file mode 100644
index 0000000000..4e169abd1d
--- /dev/null
+++ b/build.cmd
@@ -0,0 +1,190 @@
+@echo off
+setlocal
+
+:: Set the default arguments for build
+set __BuildArch=x64
+set __BuildType=debug
+
+:: Set the various build properties here so that CMake and MSBuild can pick them up
+set __ProjectDir=%CD%
+set __ProjectFilesDir=%~dp0
+set __SourceDir=%__ProjectDir%\src
+set __PackagesDir=%__SourceDir%\.nuget
+set __RootBinDir=%__ProjectDir%\binaries
+set __LogsDir=%__RootBinDir%\Logs
+set __CMakeSlnDir=%__RootBinDir%\CMake
+set __MSBCleanBuildArgs=
+
+:Arg_Loop
+if "%1" == "" goto ArgsDone
+if /i "%1" == "/?" goto Usage
+if /i "%1" == "x64" (set __BuildArch=x64&&shift&goto Arg_Loop)
+
+if /i "%1" == "debug" (set __BuildType=debug&shift&goto Arg_Loop)
+if /i "%1" == "release" (set __BuildType=release&shift&goto Arg_Loop)
+
+if /i "%1" == "clean" (set __CleanBuild=1&shift&goto Arg_Loop)
+
+if /i "%1" == "unixmscorlib" (set __UnixMscorlibOnly=1&shift&goto Arg_Loop)
+
+echo Invalid commandline argument: %1
+goto Usage
+
+:ArgsDone
+
+echo Commencing CoreCLR Repo build
+echo.
+
+:: Set the remaining variables based upon the determined build configuration
+set __BinDir=%__RootBinDir%\Product\%__BuildArch%\%__BuildType%
+set __PackagesBinDir=%__BinDir%\.nuget
+set __ToolsDir=%__RootBinDir%\tools
+set __TestWorkingDir=%__RootBinDir%\tests\%__BuildArch%\%__BuildType%
+set __IntermediatesDir=%__RootBinDir%\intermediates\%__BuildArch%\%__BuildType%
+
+:: Generate path to be set for CMAKE_INSTALL_PREFIX to contain forward slash
+set __CMakeBinDir=%__BinDir%
+set "__CMakeBinDir=%__CMakeBinDir:\=/%"
+
+:: Switch to clean build mode if the binaries output folder does not exist
+if not exist %__RootBinDir% set __CleanBuild=1
+
+:: Configure environment if we are doing a clean build.
+if not defined __CleanBuild goto CheckPrereqs
+echo Doing a clean build
+echo.
+
+:: MSBuild projects would need a rebuild
+set __MSBCleanBuildArgs=/t:rebuild
+
+:: Cleanup the binaries drop folder
+if exist %__BinDir% rd /s /q %__BinDir%
+md %__BinDir%
+
+:: Cleanup the CMake folder
+if exist %__CMakeSlnDir% rd /s /q %__CMakeSlnDir%
+md %__CMakeSlnDir%
+
+:: Cleanup the logs folder
+if exist %__LogsDir% rd /s /q %__LogsDir%
+md %__LogsDir%
+
+::Cleanup intermediates folder
+if exist %__IntermediatesDir% rd /s /q %__IntermediatesDir%
+
+:: Check prerequisites
+:CheckPrereqs
+echo Checking pre-requisites...
+echo.
+::
+:: Check presence of CMake on the path
+for %%X in (cmake.exe) do (set FOUNDCMake=%%~$PATH:X)
+if defined FOUNDCMake goto CheckVS
+echo Installation of CMake, and ensuring it is on the path, is a pre-requisite to build this repository.
+goto :eof
+
+:CheckVS
+:: Check presence of VS
+if defined VS120COMNTOOLS goto CheckVSExistence
+echo Installation of VS 2013 is a pre-requisite to build this repository.
+goto :eof
+
+:CheckVSExistence
+:: Does VS 2013 really exist?
+if exist "%VS120COMNTOOLS%\..\IDE\devenv.exe" goto CheckMSBuild
+echo Installation of VS 2013 is a pre-requisite to build this repository.
+goto :eof
+
+:CheckMSBuild
+:: Note: We've disabled node reuse because it causes file locking issues.
+:: The issue is that we extend the build with our own targets which
+:: means that that rebuilding cannot successfully delete the task
+:: assembly.
+set _msbuildexe="%ProgramFiles(x86)%\MSBuild\12.0\Bin\MSBuild.exe"
+if not exist %_msbuildexe% set _msbuildexe="%ProgramFiles%\MSBuild\12.0\Bin\MSBuild.exe"
+if not exist %_msbuildexe% set _msbuildexe="%ProgramFiles(x86)%\MSBuild\14.0\Bin\MSBuild.exe"
+if not exist %_msbuildexe% set _msbuildexe="%ProgramFiles%\MSBuild\14.0\Bin\MSBuild.exe"
+if not exist %_msbuildexe% echo Error: Could not find MSBuild.exe. Please see https://github.com/dotnet/coreclr/wiki/Developer%%20Guide for build instructions. && exit /b 1
+
+:: All set to commence the build
+
+setlocal
+if defined __UnixMscorlibOnly goto PerformMScorlibBuild
+
+echo Commencing build of native components for %__BuildArch%/%__BuildType%
+echo.
+
+:: Set the environment for the native build
+call "%VS120COMNTOOLS%\..\..\VC\vcvarsall.bat" x86_amd64
+cd %__CMakeSlnDir%
+
+if exist "%VSINSTALLDIR%DIA SDK" goto GenVSSolution
+echo Error: DIA SDK is missing at "%VSINSTALLDIR%DIA SDK". ^
+This is due to bug in VS Intaller. It does not install DIA SDK at "%VSINSTALLDIR%" but rather ^
+at VS install location of previous version. Workaround is to copy DIA SDK folder from VS install location ^
+of previous version to "%VSINSTALLDIR%" and then resume build.
+goto :eof
+
+:GenVSSolution
+:: Regenerate the VS solution
+call ..\..\src\pal\tools\gen-buildsys-win.bat %__ProjectDir%
+
+:BuildComponents
+if exist %__CMakeSlnDir%\install.vcxproj goto BuildCoreCLR
+echo Failed to generate native component build project!
+goto :eof
+
+REM Build CoreCLR
+:BuildCoreCLR
+set __CoreCLRBuildLog=%__LogsDir%\CoreCLR_%__BuildArch%__%__BuildType%.log
+%_msbuildexe% %__CMakeSlnDir%\install.vcxproj %__MSBCleanBuildArgs% /nologo /maxcpucount /nodeReuse:false /p:Configuration=%__BuildType% /p:Platform=%__BuildArch% /fileloggerparameters:Verbosity=diag;LogFile="%__CoreCLRBuildLog%"
+pushd %__ProjectDir%
+IF NOT ERRORLEVEL 1 goto PerformMScorlibBuild
+echo Native component build failed. Refer %__CoreCLRBuildLog% for details.
+goto :eof
+
+:PerformMScorlibBuild
+endlocal
+
+setlocal
+set __AdditionalMSBuildArgs=
+
+if defined __UnixMscorlibOnly set __AdditionalMSBuildArgs=/p:OS=Unix /p:BuildNugetPackage=false
+
+:: Set the environment for the managed build
+call "%VS120COMNTOOLS%\VsDevCmd.bat"
+echo Commencing build of mscorlib for %__BuildArch%/%__BuildType%
+echo.
+set __MScorlibBuildLog=%__LogsDir%\MScorlib_%__BuildArch%__%__BuildType%.log
+%_msbuildexe% "%__ProjectFilesDir%build.proj" %__MSBCleanBuildArgs% /nologo /maxcpucount /verbosity:minimal /nodeReuse:false /fileloggerparameters:Verbosity=diag;LogFile="%__MScorlibBuildLog%" %__AdditionalMSBuildArgs%
+IF NOT ERRORLEVEL 1 (
+ if defined __UnixMscorlibOnly goto :eof
+ goto PerformTestBuild
+)
+
+echo MScorlib build failed. Refer %__MScorlibBuildLog% for details.
+goto :eof
+
+:PerformTestBuild
+echo.
+echo Commencing build of tests for %__BuildArch%/%__BuildType%
+echo.
+call tests\buildtest.cmd
+endlocal
+
+::Build complete
+echo Repo successfully built.
+echo.
+echo Product binaries are available at %__BinDir%
+echo Test binaries are available at %__TestWorkingDir%
+goto :eof
+
+:Usage
+echo.
+echo Usage:
+echo %0 BuildArch BuildType [clean] where:
+echo.
+echo BuildArch can be: x64
+echo BuildType can be: Debug, Release
+echo Clean - optional argument to force a clean build.
+goto :eof