dotnet-monitor/eng/build.sh

264 строки
7.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# Copyright (c) .NET Foundation and contributors. All rights reserved.
# Licensed under the MIT license. See LICENSE file in the project root for full license information.
# Obtain the location of the bash script to figure out where the root of the repo is.
__RepoRootDir="$(cd "$(dirname "$0")"/..; pwd -P)"
__CreateArchives=0
__BuildType=Debug
__CMakeArgs=
__CommonMSBuildArgs=
__Compiler=clang
__CompilerMajorVersion=
__CompilerMinorVersion=
__CrossBuild=0
__ExtraCmakeArgs=
__HostArch=x64
__HostOS=Linux
__IsMSBuildOnNETCoreSupported=0
__ManagedBuild=1
__ManagedBuildArgs=
__NativeBuild=1
__NumProc=1
__PortableBuild=1
__RootBinDir="$__RepoRootDir"/artifacts
__RuntimeSourceFeed=
__RuntimeSourceFeedKey=
__SkipConfigure=0
__SkipGenerateVersion=0
__TargetOS=Linux
__Test=0
__TestGroup=All
__UnprocessedBuildArgs=
usage_list+=("-skipmanaged: do not build managed components.")
usage_list+=("-skipnative: do not build native components.")
usage_list+=("-test: run xunit tests")
handle_arguments() {
lowerI="$(echo "$1" | tr "[:upper:]" "[:lower:]")"
case "$lowerI" in
architecture|-architecture|-a)
__TargetArch="$(echo "$2" | tr "[:upper:]" "[:lower:]")"
__ShiftArgs=1
;;
-binarylog|-bl|-clean|-integrationtest|-pack|-performancetest|-pipelineslog|-pl|-preparemachine|-publish|-r|-rebuild|-restore|-sign)
__ManagedBuildArgs="$__ManagedBuildArgs $1"
;;
configuration|-configuration|-c)
_type="$(echo "$2" | tr "[:upper:]" "[:lower:]")"
if [[ "$_type" == "release" ]]; then
__BuildType=Release
elif [[ "$_type" = "checked" ]]; then
__BuildType=Checked
fi
__ShiftArgs=1
;;
-clean|-binarylog|-bl|-pipelineslog|-pl|-restore|-r|-rebuild|-pack|-integrationtest|-performancetest|-sign|-publish|-preparemachine)
__ManagedBuildArgs="$__ManagedBuildArgs $1"
;;
-runtimesourcefeed)
__ManagedBuildArgs="$__ManagedBuildArgs /p:DotNetRuntimeSourceFeed=$2"
__ShiftArgs=1
;;
-runtimesourcefeedkey)
__ManagedBuildArgs="$__ManagedBuildArgs /p:DotNetRuntimeSourceFeedKey=$2"
__ShiftArgs=1
;;
skipmanaged|-skipmanaged)
__ManagedBuild=0
;;
skipnative|-skipnative)
__NativeBuild=0
;;
test|-test)
__Test=1
;;
testgroup|-testgroup)
__TestGroup=$2
__ShiftArgs=1
;;
archive|-archive)
__CreateArchives=1
;;
-warnaserror|-nodereuse)
__ManagedBuildArgs="$__ManagedBuildArgs $1 $2"
__ShiftArgs=1
;;
*)
__UnprocessedBuildArgs="$__UnprocessedBuildArgs $1"
;;
esac
}
source "$__RepoRootDir"/eng/native/build-commons.sh
__LogsDir="$__RootBinDir/log/$__BuildType"
__ArtifactsIntermediatesDir="$__RootBinDir/obj"
if [[ "$__TargetArch" == "armel" ]]; then
# Armel cross build is Tizen specific and does not support Portable RID build
__PortableBuild=0
fi
#
# Initialize the target distro name
#
initTargetDistroRid
echo "RID: $__OutputRid"
__BinDir="$__RootBinDir/bin/$__OutputRid.$__BuildType"
__IntermediatesDir="$__ArtifactsIntermediatesDir/$__OutputRid.$__BuildType"
__CommonMSBuildArgs="/p:PackageRid=$__OutputRid"
# Specify path to be set for CMAKE_INSTALL_PREFIX.
# This is where all built libraries will copied to.
__CMakeBinDir="$__BinDir"
export __CMakeBinDir
mkdir -p "$__IntermediatesDir"
mkdir -p "$__LogsDir"
mkdir -p "$__CMakeBinDir"
__ExtraCmakeArgs="$__ExtraCmakeArgs -DCLR_MANAGED_BINARY_DIR=$__RootBinDir/bin -DCLR_BUILD_TYPE=$__BuildType"
# Specify path to be set for CMAKE_INSTALL_PREFIX.
# This is where all built native libraries will copied to.
export __CMakeBinDir="$__BinDir"
#
# Setup LLDB paths for native build
#
if [ "$__HostOS" == "OSX" ]; then
export LLDB_H="$__RepoRootDir"/src/SOS/lldbplugin/swift-4.0
export LLDB_LIB=$(xcode-select -p)/../SharedFrameworks/LLDB.framework/LLDB
export LLDB_PATH=$(xcode-select -p)/usr/bin/lldb
export MACOSX_DEPLOYMENT_TARGET=10.12
if [ ! -f $LLDB_LIB ]; then
echo "Cannot find the lldb library. Try installing Xcode."
exit 1
fi
# Workaround bad python version in /usr/local/bin/python2.7 on lab machines
export PATH=/usr/bin:$PATH
which python
python --version
if [[ "$__TargetArch" == x64 ]]; then
__ExtraCmakeArgs="-DCMAKE_OSX_ARCHITECTURES=\"x86_64\" $__ExtraCmakeArgs"
elif [[ "$__TargetArch" == arm64 ]]; then
__ExtraCmakeArgs="-DCMAKE_OSX_ARCHITECTURES=\"arm64\" $__ExtraCmakeArgs"
else
echo "Error: Unknown OSX architecture $__TargetArch."
exit 1
fi
fi
#
# Build native components
#
if [[ "$__NativeBuild" == 1 ]]; then
echo Generating Version Header
"$__RepoRootDir/eng/common/msbuild.sh" \
"$__RepoRootDir"/eng/empty.csproj \
/restore \
/t:GenerateRuntimeVersionFile \
/p:NativeVersionFile="$__versionSourceFile" \
/p:RuntimeVersionFile="$runtimeVersionHeaderFile" \
/bl:"$__LogDir$"/GenNativeVersion.binlog \
/clp:nosummary
if [ "$?" != 0 ]; then
echo "Generate version header failed."
exit 1
fi
set -o pipefail
build_native "$__TargetOS" "$__TargetArch" "$__RepoRootDir" "$__IntermediatesDir" "install" "$__ExtraCmakeArgs" "dotnet-monitor component" | tee "$__LogsDir"/make.log
exit_code="$?"
set +o pipefail
if [ $exit_code != 0 ]; then
echo "Native build failed."
exit 1
fi
fi
#
# Managed build
#
if [[ "$__ManagedBuild" == 1 ]]; then
echo "Commencing managed build for $__BuildType in $__RootBinDir/bin"
"$__RepoRootDir/eng/common/build.sh" --build --configuration "$__BuildType" $__CommonMSBuildArgs $__ManagedBuildArgs $__ArcadeScriptArgs $__UnprocessedBuildArgs
if [ "$?" != 0 ]; then
exit 1
fi
fi
#
# Archive build
#
if [[ "$__CreateArchives" == 1 ]]; then
echo "Commencing archiving for $__BuildType in $__RootBinDir/bin"
"$__RepoRootDir/eng/common/build.sh" \
--build \
--configuration "$__BuildType" \
-nobl \
/bl:"$__LogsDir"/Archive.binlog \
/p:CreateArchives=true \
$__CommonMSBuildArgs \
$__ManagedBuildArgs \
$__ArcadeScriptArgs \
$__UnprocessedBuildArgs
if [ "$?" != 0 ]; then
exit 1
fi
fi
#
# Run xunit tests
#
if [[ "$__Test" == 1 ]]; then
"$__RepoRootDir/eng/common/build.sh" \
--test \
--configuration "$__BuildType" \
/p:BuildArch="$__TargetArch" \
-nobl \
/bl:"$__LogsDir"/Test.binlog \
/p:TestGroup="$__TestGroup" \
$__CommonMSBuildArgs \
$__ManagedBuildArgs \
$__ArcadeScriptArgs \
$__UnprocessedBuildArgs
if [ $? != 0 ]; then
exit 1
fi
fi
echo "BUILD: Repo sucessfully built."
echo "BUILD: Product binaries are available at $__CMakeBinDir"