diff options
Diffstat (limited to 'build.sh')
-rwxr-xr-x | build.sh | 83 |
1 files changed, 70 insertions, 13 deletions
@@ -2,7 +2,7 @@ usage() { - echo "Usage: $0 [BuildArch] [BuildType] [clean] [verbose] [cross] [clangx.y]" + echo "Usage: $0 [BuildArch] [BuildType] [clean] [verbose] [cross] [clangx.y] [skipmscorlib]" echo "BuildArch can be: x64, ARM" echo "BuildType can be: Debug, Release" echo "clean - optional argument to force a clean build." @@ -10,6 +10,7 @@ usage() echo "clangx.y - optional argument to build using clang version x.y." echo "cross - optional argument to signify cross compilation," echo " - will use ROOTFS_DIR environment variable if set." + echo "skipmscorlib - do not build mscorlib.dll even if mono is installed." exit 1 } @@ -17,7 +18,7 @@ usage() setup_dirs() { echo Setting up directories for build - + mkdir -p "$__RootBinDir" mkdir -p "$__BinDir" mkdir -p "$__LogsDir" @@ -31,10 +32,10 @@ clean() echo Cleaning previous output for the selected configuration rm -rf "$__BinDir" rm -rf "$__IntermediatesDir" - + rm -rf "$__TestWorkingDir" rm -rf "$__TestIntermediatesDir" - + rm -rf "$__LogsDir/*_$__BuildOS__$__BuildArch__$__BuildType.*" } @@ -43,28 +44,28 @@ clean() check_prereqs() { echo "Checking pre-requisites..." - + # Check presence of CMake on the path hash cmake 2>/dev/null || { echo >&2 "Please install cmake before running this script"; exit 1; } - + # Check for clang hash clang-$__ClangMajorVersion.$__ClangMinorVersion 2>/dev/null || hash clang$__ClangMajorVersion$__ClangMinorVersion 2>/dev/null || hash clang 2>/dev/null || { echo >&2 "Please install clang before running this script"; exit 1; } - + } build_coreclr() { # All set to commence the build - + echo "Commencing build of native components for $__BuildOS.$__BuildArch.$__BuildType" cd "$__IntermediatesDir" - + # Regenerate the CMake solution echo "Invoking cmake with arguments: \"$__ProjectRoot\" $__CMakeArgs" "$__ProjectRoot/src/pal/tools/gen-buildsys-clang.sh" "$__ProjectRoot" $__ClangMajorVersion $__ClangMinorVersion $__BuildArch $__CMakeArgs - + # Check that the makefiles were created. - + if [ ! -f "$__IntermediatesDir/Makefile" ]; then echo "Failed to generate native component build project!" exit 1 @@ -78,9 +79,9 @@ build_coreclr() else NumProc=$(($(getconf _NPROCESSORS_ONLN)+1)) fi - + # Build CoreCLR - + echo "Executing make install -j $NumProc $__UnprocessedBuildArgs" make install -j $NumProc $__UnprocessedBuildArgs @@ -90,6 +91,52 @@ build_coreclr() fi } +build_mscorlib() +{ + hash mono 2> /dev/null || { echo >&2 "Skipping mscorlib.dll build since Mono is not installed."; return; } + + if [ $__SkipMSCorLib == 1 ]; then + echo "Skipping mscorlib.dll build." + return + fi + + echo "Commencing build of mscorlib components for $__BuildOS.$__BuildArch.$__BuildType" + + # Pull NuGet.exe down if we don't have it already + if [ ! -e "$__NuGetPath" ]; then + hash curl 2>/dev/null || hash wget 2>/dev/null || { echo >&2 echo "cURL or wget is required to build mscorlib." ; exit 1; } + + echo "Restoring NuGet.exe..." + + # curl has HTTPS CA trust-issues less often than wget, so lets try that first. + which curl > /dev/null 2> /dev/null + if [ $? -ne 0 ]; then + mkdir -p $__PackagesDir + wget -q -O $__NuGetPath https://api.nuget.org/downloads/nuget.exe + else + curl -sSL --create-dirs -o $__NuGetPath https://api.nuget.org/downloads/nuget.exe + fi + + if [ $? -ne 0 ]; then + echo "Failed to restore NuGet.exe." + exit 1 + fi + fi + + # Grab the MSBuild package if we don't have it already + if [ ! -e "$__MSBuildPath" ]; then + echo "Restoring MSBuild..." + mono "$__NuGetPath" install $__MSBuildPackageId -Version $__MSBuildPackageVersion -source "https://www.myget.org/F/dotnet-buildtools/" -OutputDirectory "$__PackagesDir" + if [ $? -ne 0 ]; then + echo "Failed to restore MSBuild." + exit 1 + fi + fi + + # Invoke MSBuild + mono "$__MSBuildPath" /nologo "$__ProjectRoot/build.proj" /verbosity:minimal "/fileloggerparameters:Verbosity=normal;LogFile=$__LogsDir/MSCorLib_$__BuildOS__$__BuildArch__$__BuildType.log" /t:Build /p:OSGroup=$__BuildOS /p:BuildOS=$__BuildOS /p:UseRoslynCompiler=true /p:BuildNugetPackage=false +} + echo "Commencing CoreCLR Repo build" # Argument types supported by this script: @@ -142,11 +189,16 @@ __RootBinDir="$__ProjectDir/bin" __LogsDir="$__RootBinDir/Logs" __UnprocessedBuildArgs= __MSBCleanBuildArgs= +__SkipMSCorLib=false __CleanBuild=false __VerboseBuild=false __CrossBuild=false __ClangMajorVersion=3 __ClangMinorVersion=5 +__MSBuildPackageId="Microsoft.Build.Mono.Debug" +__MSBuildPackageVersion="14.1.0.0-prerelease" +__MSBuildPath="$__PackagesDir/$__MSBuildPackageId.$__MSBuildPackageVersion/lib/MSBuild.exe" +__NuGetPath="$__PackagesDir/NuGet.exe" for i in "$@" do @@ -197,6 +249,7 @@ for i in "$@" __ClangMinorVersion=7 ;; skipmscorlib) + __SkipMSCorLib=1 ;; *) __UnprocessedBuildArgs="$__UnprocessedBuildArgs $i" @@ -245,6 +298,10 @@ check_prereqs build_coreclr +# Build mscolrib. + +build_mscorlib + # Build complete echo "Repo successfully built." |