summaryrefslogtreecommitdiff
path: root/build.sh
diff options
context:
space:
mode:
Diffstat (limited to 'build.sh')
-rwxr-xr-xbuild.sh83
1 files changed, 70 insertions, 13 deletions
diff --git a/build.sh b/build.sh
index 14ef25f2bb..f3cbb11dc0 100755
--- a/build.sh
+++ b/build.sh
@@ -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."