initHostDistroRid()
{
+ __HostDistroRid=""
+
+ # Some OS groups should default to use the portable packages
+ if [ "$__BuildOS" == "OSX" ]; then
+ __PortableBuild=1
+ fi
+
if [ "$__HostOS" == "Linux" ]; then
- if [ ! -e /etc/os-release ]; then
- echo "WARNING: Can not determine runtime id for current distro."
- __HostDistroRid=""
- else
+ if [ -e /etc/redhat-release ]; then
+ local redhatRelease=$(</etc/redhat-release)
+ if [[ $redhatRelease == "CentOS release 6."* || $redhatRelease == "Red Hat Enterprise Linux Server release 6."* ]]; then
+ __HostDistroRid="rhel.6-$__HostArch"
+ else
+ __PortableBuild=1
+ fi
+ elif [ -e /etc/os-release ]; then
source /etc/os-release
- __HostDistroRid="$ID.$VERSION_ID-$__HostArch"
+ if [[ $ID == "alpine" ]]; then
+ __HostDistroRid="linux-musl-$__HostArch"
+ else
+ __PortableBuild=1
+ __HostDistroRid="$ID.$VERSION_ID-$__HostArch"
+ fi
fi
+ elif [ "$__HostOS" == "FreeBSD" ]; then
+ __freebsd_version=`sysctl -n kern.osrelease | cut -f1 -d'.'`
+ __HostDistroRid="freebsd.$__freebsd_version-$__HostArch"
fi
+
+ # Portable builds target the base RID
+ if [ "$__PortableBuild" == 1 ]; then
+ if [ "$__BuildOS" == "OSX" ]; then
+ export __HostDistroRid="osx-$__BuildArch"
+ elif [ "$__BuildOS" == "Linux" ]; then
+ export __HostDistroRid="linux-$__BuildArch"
+ fi
+ fi
+
+ if [ "$__HostDistroRid" == "" ]; then
+ echo "WARNING: Cannot determine runtime id for current distro."
+ fi
+
+ echo "Setting __HostDistroRid to $__HostDistroRid"
}
initTargetDistroRid()
if [ $__CrossBuild == 1 ]; then
if [ "$__BuildOS" == "Linux" ]; then
if [ ! -e $ROOTFS_DIR/etc/os-release ]; then
- echo "WARNING: Can not determine runtime id for current distro."
- export __DistroRid=""
+ if [ -e $ROOTFS_DIR/android_platform ]; then
+ source $ROOTFS_DIR/android_platform
+ export __DistroRid="$RID"
+ else
+ echo "WARNING: Cannot determine runtime id for current distro."
+ export __DistroRid=""
+ fi
else
source $ROOTFS_DIR/etc/os-release
export __DistroRid="$ID.$VERSION_ID-$__BuildArch"
export __DistroRid="$__HostDistroRid"
fi
+ if [ "$ID.$VERSION_ID" == "ubuntu.16.04" ]; then
+ export __DistroRid="ubuntu.14.04-$__BuildArch"
+ fi
+
# Portable builds target the base RID
if [ "$__PortableBuild" == 1 ]; then
if [ "$__BuildOS" == "Linux" ]; then
export __DistroRid="linux-$__BuildArch"
+ export __RuntimeId="linux-$__BuildArch"
elif [ "$__BuildOS" == "OSX" ]; then
export __DistroRid="osx-$__BuildArch"
+ export __RuntimeId="osx-$__BuildArch"
fi
fi
+
+ echo "__DistroRid: " $__DistroRid
}
isMSBuildOnNETCoreSupported()
{
- # This needs to be updated alongwith corresponding changes to netci.groovy.
- __isMSBuildOnNETCoreSupported=0
+ __isMSBuildOnNETCoreSupported=$__msbuildonunsupportedplatform
+
+ if [ $__isMSBuildOnNETCoreSupported == 1 ]; then
+ return
+ fi
if [ "$__HostArch" == "x64" ]; then
if [ "$__HostOS" == "Linux" ]; then
- case "$__HostDistroRid" in
- "centos.7-x64")
- __isMSBuildOnNETCoreSupported=1
- ;;
- "debian.8-x64")
- __isMSBuildOnNETCoreSupported=1
- ;;
- "fedora.23-x64")
- __isMSBuildOnNETCoreSupported=1
- ;;
- "fedora.24-x64")
- __isMSBuildOnNETCoreSupported=1
- ;;
- "opensuse.42.1-x64")
- __isMSBuildOnNETCoreSupported=1
- ;;
- "rhel.7"*"-x64")
- __isMSBuildOnNETCoreSupported=1
- ;;
- "ubuntu.14.04-x64")
- __isMSBuildOnNETCoreSupported=1
- ;;
- "ubuntu.16.04-x64")
- __isMSBuildOnNETCoreSupported=1
- ;;
- "ubuntu.16.10-x64")
- __isMSBuildOnNETCoreSupported=1
- ;;
- "alpine.3.4.3-x64")
- __isMSBuildOnNETCoreSupported=1
- ;;
- *)
- __isMSBuildOnNETCoreSupported=$__msbuildonunsupportedplatform
- esac
+ __isMSBuildOnNETCoreSupported=1
+ UNSUPPORTED_RIDS=("debian.9-x64" "ubuntu.17.04-x64")
+ for UNSUPPORTED_RID in "${UNSUPPORTED_RIDS[@]}"
+ do
+ if [ "$__HostDistroRid" == "$UNSUPPORTED_RID" ]; then
+ __isMSBuildOnNETCoreSupported=0
+ break
+ fi
+ done
elif [ "$__HostOS" == "OSX" ]; then
__isMSBuildOnNETCoreSupported=1
fi
fi
}
-build_Tests()
+generate_layout()
{
__TestDir=$__ProjectDir/tests
__ProjectFilesDir=$__TestDir
__TestIntermediateDir="tests/obj/${__BuildOS}.${__BuildArch}.${__BuildType}"
fi
- echo "__BuildOS: ${__BuildOS}"
- echo "__BuildArch: ${__BuildArch}"
- echo "__BuildType: ${__BuildType}"
- echo "__TestIntermediateDir: ${__TestIntermediateDir}"
+ echo "__BuildOS: ${__BuildOS}"
+ echo "__BuildArch: ${__BuildArch}"
+ echo "__BuildType: ${__BuildType}"
+ echo "__TestIntermediateDir: ${__TestIntermediateDir}"
if [ ! -f "$__TestBinDir" ]; then
echo "Creating TestBinDir: ${__TestBinDir}"
# ===
# =========================================================================================
- build_Tests_internal "Restore_Product" "${__ProjectDir}/tests/build.proj" " -BatchRestorePackages" "Restore product binaries (build tests)"
-
- build_Tests_internal "Tests_GenerateRuntimeLayout" "${__ProjectDir}/tests/runtest.proj" "-BinPlaceRef -BinPlaceProduct -CopyCrossgenToProduct" "Restore product binaries (run tests)"
+ build_Tests_internal "Restore_Packages" "${__ProjectDir}/tests/build.proj" " -BatchRestorePackages" "Restore product binaries (build tests)"
if [ -n "$__UpdateInvalidPackagesArg" ]; then
__up=-updateinvalidpackageversion
fi
+ echo "${__MsgPrefix}Creating test overlay..."
+
+ if [ -z "$xUnitTestBinBase" ]; then
+ xUnitTestBinBase=$__TestWorkingDir
+ fi
+
+ export CORE_ROOT=$xUnitTestBinBase/Tests/Core_Root
+
+ if [ -d "${CORE_ROOT}" ]; then
+ rm -rf $CORE_ROOT
+ fi
+
+ mkdir -p $CORE_ROOT
+
+ build_Tests_internal "Tests_Overlay_Managed" "${__ProjectDir}/tests/runtest.proj" "-testOverlay" "Creating test overlay"
+
+ chmod +x $__BinDir/corerun
+ chmod +x $__BinDir/crossgen
+
+ # Make sure to copy over the pulled down packages
+ cp -r $__BinDir/* $CORE_ROOT/ > /dev/null
+
# Work hardcoded path around
if [ ! -f "${__BuildToolsDir}/Microsoft.CSharp.Core.Targets" ]; then
ln -s "${__BuildToolsDir}/Microsoft.CSharp.Core.targets" "${__BuildToolsDir}/Microsoft.CSharp.Core.Targets"
if [ ! -f "${__BuildToolsDir}/Microsoft.CSharp.targets" ]; then
ln -s "${__BuildToolsDir}/Microsoft.CSharp.Targets" "${__BuildToolsDir}/Microsoft.CSharp.targets"
fi
+}
- echo "Starting the Managed Tests Build..."
+build_Tests()
+{
+ __TestDir=$__ProjectDir/tests
+ __ProjectFilesDir=$__TestDir
+ __TestBinDir=$__TestWorkingDir
- __ManagedTestBuiltMarker=${__TestBinDir}/managed_test_build
+ if [ $__RebuildTests -ne 0 ]; then
+ if [ -d "${__TestBinDir}" ]; then
+ echo "Removing tests build dir: ${__TestBinDir}"
+ rm -rf $__TestBinDir
+ fi
+ fi
- if [ ! -f $__ManagedTestBuiltMarker ]; then
+ __CMakeBinDir="${__TestBinDir}"
- build_Tests_internal "Tests_Managed" "$__ProjectDir/tests/build.proj" "$__up" "Managed tests build (build tests)"
+ if [ -z "$__TestIntermediateDir" ]; then
+ __TestIntermediateDir="tests/obj/${__BuildOS}.${__BuildArch}.${__BuildType}"
+ fi
- if [ $? -ne 0 ]; then
- echo "${__MsgPrefix}Error: build failed. Refer to the build log files for details (above)"
- exit 1
- else
- echo "Tests have been built."
- echo "Create marker \"${__ManagedTestBuiltMarker}\""
- touch $__ManagedTestBuiltMarker
- fi
+ echo "__BuildOS: ${__BuildOS}"
+ echo "__BuildArch: ${__BuildArch}"
+ echo "__BuildType: ${__BuildType}"
+ echo "__TestIntermediateDir: ${__TestIntermediateDir}"
+
+ if [ ! -f "$__TestBinDir" ]; then
+ echo "Creating TestBinDir: ${__TestBinDir}"
+ mkdir -p $__TestBinDir
+ fi
+ if [ ! -f "$__LogsDir" ]; then
+ echo "Creating LogsDir: ${__LogsDir}"
+ mkdir -p $__LogsDir
+ fi
+
+ __BuildProperties="-p:OSGroup=${__BuildOS} -p:BuildOS=${__BuildOS} -p:BuildArch=${__BuildArch} -p:BuildType=${__BuildType}"
+
+ # =========================================================================================
+ # ===
+ # === Restore product binaries from packages
+ # ===
+ # =========================================================================================
+
+ build_Tests_internal "Restore_Product" "${__ProjectDir}/tests/build.proj" " -BatchRestorePackages" "Restore product binaries (build tests)"
+
+ if [ -n "$__BuildAgainstPackagesArg" ]; then
+ build_Tests_internal "Tests_GenerateRuntimeLayout" "${__ProjectDir}/tests/runtest.proj" "-BinPlaceRef -BinPlaceProduct -CopyCrossgenToProduct" "Restore product binaries (run tests)"
+ fi
+
+ echo "Starting the Managed Tests Build..."
+
+ build_Tests_internal "Tests_Managed" "$__ProjectDir/tests/build.proj" "$__up" "Managed tests build (build tests)"
+
+ if [ $? -ne 0 ]; then
+ echo "${__MsgPrefix}Error: build failed. Refer to the build log files for details (above)"
+ exit 1
else
- echo "Managed Tests had been built before."
+ echo "Managed tests build success!"
fi
if [ $__BuildTestWrappers -ne -0 ]; then
fi
fi
- echo "${__MsgPrefix}Creating test overlay..."
-
- if [ -z "$XuintTestBinBase" ]; then
- XuintTestBinBase=$__TestWorkingDir
- fi
-
- export CORE_ROOT=$XuintTestBinBase/Tests/Core_Root
-
- if [ ! -f "${CORE_ROOT}" ]; then
- mkdir -p $CORE_ROOT
- else
- rm -rf $CORE_ROOT/*
+ if [ -n "$__UpdateInvalidPackagesArg" ]; then
+ __up=-updateinvalidpackageversion
fi
- cp -r $__BinDir/* $CORE_ROOT/ > /dev/null
+ echo "${__MsgPrefix}Creating test overlay..."
- build_Tests_internal "Tests_Overlay_Managed" "$__ProjectDir/tests/runtest.proj" "-testOverlay" "Creating test overlay"
+ generate_layout
if [ $__ZipTests -ne 0 ]; then
echo "${__MsgPrefix}ZIP tests packages..."
build_Tests_internal()
{
- subDirectoryName=$1
- projectName=$2
- extraBuildParameters=$3
- stepName="$4"
+ subDirectoryName=$1
+ projectName=$2
+ extraBuildParameters=$3
+ stepName="$4"
- # Set up directories and file names
- __BuildLogRootName=$subDirectoryName
+ # Set up directories and file names
+ __BuildLogRootName=$subDirectoryName
__BuildLog="$__LogsDir/${__BuildLogRootName}.${__BuildOS}.${__BuildArch}.${__BuildType}.log"
__BuildWrn="$__LogsDir/${__BuildLogRootName}.${__BuildOS}.${__BuildArch}.${__BuildType}.wrn"
__BuildErr="$__LogsDir/${__BuildLogRootName}.${__BuildOS}.${__BuildArch}.${__BuildType}.err"
- __msbuildLog="\"/flp:Verbosity=normal;LogFile=${__BuildLog}\""
- __msbuildWrn="\"/flp1:WarningsOnly;LogFile=${__BuildWrn}\""
- __msbuildErr="\"/flp2:ErrorsOnly;LogFile=${__BuildErr}\""
- # Generate build command
- buildCommand="$__ProjectRoot/run.sh build -Project=$projectName -MsBuildLog=${__msbuildLog} -MsBuildWrn=${__msbuildWrn} -MsBuildErr=${__msbuildErr} $extraBuildParameters $__RunArgs $__UnprocessedBuildArgs"
+ if [[ "$subDirectoryName" == "Tests_Managed" ]]; then
+ # Execute msbuild managed test build in stages - workaround for excessive data retention in MSBuild ConfigCache
+ # See https://github.com/Microsoft/msbuild/issues/2993
- echo "Building step '$stepName' via $buildCommand"
+ # __SkipPackageRestore and __SkipTargetingPackBuild used to control build by tests/src/dirs.proj
+ export __SkipPackageRestore=false
+ export __SkipTargetingPackBuild=false
+ export __BuildLoopCount=2
+ export __TestGroupToBuild=1
+ __AppendToLog=false
- # Invoke MSBuild
- eval $buildCommand
+ if [ -n __priority1 ]; then
+ export __BuildLoopCount=16
+ export __TestGroupToBuild=2
+ fi
- # Invoke MSBuild
- # $__ProjectRoot/run.sh build -Project=$projectName -MsBuildLog="$__msbuildLog" -MsBuildWrn="$__msbuildWrn" -MsBuildErr="$__msbuildErr" $extraBuildParameters $__RunArgs $__UnprocessedBuildArgs
+ for (( slice=1 ; slice <= __BuildLoopCount; slice = slice + 1 ))
+ do
+ __msbuildLog="\"/flp:Verbosity=normal;LogFile=${__BuildLog};Append=${__AppendToLog}\""
+ __msbuildWrn="\"/flp1:WarningsOnly;LogFile=${__BuildWrn};Append=${__AppendToLog}\""
+ __msbuildErr="\"/flp2:ErrorsOnly;LogFile=${__BuildErr};Append=${__AppendToLog}\""
- # Make sure everything is OK
- if [ $? -ne 0 ]; then
- echo "${__MsgPrefix}Failed to build $stepName. See the build logs:"
- echo " $__BuildLog"
- echo " $__BuildWrn"
- echo " $__BuildErr"
- exit 1
+ export TestBuildSlice=$slice
+
+ # Generate build command
+ buildCommand="$__ProjectRoot/run.sh build -Project=$projectName -MsBuildLog=${__msbuildLog} -MsBuildWrn=${__msbuildWrn} -MsBuildErr=${__msbuildErr} -MsBuildEventLogging=\"/l:BinClashLogger,Tools/Microsoft.DotNet.Build.Tasks.dll;LogFile=binclash.log\" $extraBuildParameters $__RunArgs $__UnprocessedBuildArgs"
+
+ echo "Building step '$stepName' slice=$slice via $buildCommand"
+
+ # Invoke MSBuild
+ eval $buildCommand
+
+ # Make sure everything is OK
+ if [ $? -ne 0 ]; then
+ echo "${__MsgPrefix}Failed to build $stepName. See the build logs:"
+ echo " $__BuildLog"
+ echo " $__BuildWrn"
+ echo " $__BuildErr"
+ exit 1
+ fi
+ export __SkipPackageRestore=true
+ export __SkipTargetingPackBuild=true
+ __AppendToLog=true
+ done
+ else
+ __msbuildLog="\"/flp:Verbosity=normal;LogFile=${__BuildLog}\""
+ __msbuildWrn="\"/flp1:WarningsOnly;LogFile=${__BuildWrn}\""
+ __msbuildErr="\"/flp2:ErrorsOnly;LogFile=${__BuildErr}\""
+
+ # Generate build command
+ buildCommand="$__ProjectRoot/run.sh build -Project=$projectName -MsBuildLog=${__msbuildLog} -MsBuildWrn=${__msbuildWrn} -MsBuildErr=${__msbuildErr} -MsBuildEventLogging=\"/l:BinClashLogger,Tools/Microsoft.DotNet.Build.Tasks.dll;LogFile=binclash.log\" $extraBuildParameters $__RunArgs $__UnprocessedBuildArgs"
+
+ echo "Building step '$stepName' via $buildCommand"
+
+ # Invoke MSBuild
+ eval $buildCommand
+
+ # Invoke MSBuild
+ # $__ProjectRoot/run.sh build -Project=$projectName -MsBuildLog="$__msbuildLog" -MsBuildWrn="$__msbuildWrn" -MsBuildErr="$__msbuildErr" $extraBuildParameters $__RunArgs $__UnprocessedBuildArgs
+
+ # Make sure everything is OK
+ if [ $? -ne 0 ]; then
+ echo "${__MsgPrefix}Failed to build $stepName. See the build logs:"
+ echo " $__BuildLog"
+ echo " $__BuildWrn"
+ echo " $__BuildErr"
+ exit 1
+ fi
fi
}
echo "BuildType can be: debug, checked, release"
echo "coverage - optional argument to enable code coverage build (currently supported only for Linux and OSX)."
echo "ninja - target ninja instead of GNU make"
- echo "clangx.y - optional argument to build using clang version x.y."
+ echo "clangx.y - optional argument to build using clang version x.y - supported version 3.5 - 6.0"
echo "cross - optional argument to signify cross compilation,"
echo " - will use ROOTFS_DIR environment variable if set."
echo "crosscomponent - optional argument to build cross-architecture component,"
echo " - will use CAC_ROOTFS_DIR environment variable if set."
echo "portableLinux - build for Portable Linux Distribution"
+ echo "portablebuild - Use portable build."
echo "verbose - optional argument to enable verbose build output."
echo "rebuild - if tests have already been built - rebuild them"
+ echo "generatelayoutonly - only pull down dependencies and build coreroot"
+ echo "buildagainstpackages - pull down and build using packages."
echo "runtests - run tests after building them"
echo "ziptests - zips CoreCLR tests & Core_Root for a Helix run"
echo "bindir - output directory (defaults to $__ProjectRoot/bin)"
echo "msbuildonunsupportedplatform - build managed binaries even if distro is not officially supported."
+ echo "priority1 - include priority=1 tests in the build"
exit 1
}
__ClangMinorVersion=0
__NuGetPath="$__PackagesDir/NuGet.exe"
__HostDistroRid=""
+__BuildAgainstPackagesArg=
__DistroRid=""
__cmakeargs=""
__PortableLinux=0
__RunTests=0
__RebuildTests=0
__BuildTestWrappers=0
+__GenerateLayoutOnly=
+__priority1=
CORE_ROOT=
-
while :; do
if [ $# -le 0 ]; then
break
__CrossBuild=1
;;
+ portableBuild)
+ __PortableBuild=1
+ ;;
+
portablelinux)
if [ "$__BuildOS" == "Linux" ]; then
__PortableLinux=1
__VerboseBuild=1
;;
- clang3.5)
+ clang3.5|-clang3.5)
__ClangMajorVersion=3
__ClangMinorVersion=5
;;
- clang3.6)
+ clang3.6|-clang3.6)
__ClangMajorVersion=3
__ClangMinorVersion=6
;;
- clang3.7)
+ clang3.7|-clang3.7)
__ClangMajorVersion=3
__ClangMinorVersion=7
;;
- clang3.8)
+ clang3.8|-clang3.8)
__ClangMajorVersion=3
__ClangMinorVersion=8
;;
- clang3.9)
+ clang3.9|-clang3.9)
__ClangMajorVersion=3
__ClangMinorVersion=9
;;
+ clang4.0|-clang4.0)
+ __ClangMajorVersion=4
+ __ClangMinorVersion=0
+ ;;
+
+ clang5.0|-clang5.0)
+ __ClangMajorVersion=5
+ __ClangMinorVersion=0
+ ;;
+
+ clang6.0|-clang6.0)
+ __ClangMajorVersion=6
+ __ClangMinorVersion=0
+ ;;
+
ninja)
__UseNinja=1
;;
__ZipTests=1
;;
+ generatelayoutonly)
+ __GenerateLayoutOnly=1
+ ;;
+
+ buildagainstpackages)
+ __BuildAgainstPackagesArg=1
+ ;;
+
bindir)
if [ -n "$2" ]; then
__RootBinDir="$2"
msbuildonunsupportedplatform)
__msbuildonunsupportedplatform=1
;;
+ priority1)
+ __priority1=1
+ __UnprocessedBuildArgs="$__UnprocessedBuildArgs -priority=1"
+ ;;
*)
__UnprocessedBuildArgs="$__UnprocessedBuildArgs $1"
;;
# Configure environment if we are doing a verbose build
if [ $__VerboseBuild == 1 ]; then
export VERBOSE=1
- __RunArgs="$__RunArgs -verbose"
+ __RunArgs="$__RunArgs -verbose"
fi
# Set default clang version
if [ ! -d "$__BinDir" ] || [ ! -d "$__BinDir/bin" ]; then
- echo "Has not been found built CoreCLR instance"
- echo "Please build it before tests using './build.sh $__BuildArch $__BuildType'"
+ echo "Cannot find build directory for the CoreCLR Product or native tests."
+ echo "Please make sure CoreCLR and native tests are built before building managed tests."
+ echo "Example use: './build.sh $__BuildArch $__BuildType' without -skiptests switch"
exit 1
fi
echo "Building Tests..."
-build_Tests
+if [ -z "$__GenerateLayoutOnly" ]; then
+ build_Tests
+else
+ generate_layout
+fi
if [ $? -ne 0 ]; then
echo "Failed to build tests"
echo " coreFxBinDir = $CORE_ROOT"
echo " testNativeBinDir = $__testNativeBinDir"
echo " -------------------------------------------------- "
+ echo " Example runtest.sh command"
+ echo ""
+ echo " ./tests/runtest.sh --coreOverlayDir=$CORE_ROOT --testNativeBinDir=$__testNativeBinDir --testRootDir=$__TestBinDir --copyNativeTestBin"
+ echo " -------------------------------------------------- "
echo "To run single test use the following command:"
echo " bash ${__TestBinDir}/__TEST_PATH__/__TEST_NAME__.sh -coreroot=${CORE_ROOT}"
fi