Update BuildTools, PgoData to rc1-02801-02, release-20180502-0048, respectively ...
[platform/upstream/coreclr.git] / build-test.sh
1 #!/usr/bin/env bash
2
3 initHostDistroRid()
4 {
5     __HostDistroRid=""
6
7     # Some OS groups should default to use the portable packages
8     if [ "$__BuildOS" == "OSX" ]; then
9         __PortableBuild=1
10     fi
11
12     if [ "$__HostOS" == "Linux" ]; then
13         if [ -e /etc/redhat-release ]; then
14             local redhatRelease=$(</etc/redhat-release)
15             if [[ $redhatRelease == "CentOS release 6."* || $redhatRelease == "Red Hat Enterprise Linux Server release 6."* ]]; then
16                 __HostDistroRid="rhel.6-$__HostArch"
17             else
18                 __PortableBuild=1
19             fi
20         elif [ -e /etc/os-release ]; then
21             source /etc/os-release
22             if [[ $ID == "alpine" ]]; then
23                 __HostDistroRid="linux-musl-$__HostArch"
24             else
25                 __PortableBuild=1
26                 __HostDistroRid="$ID.$VERSION_ID-$__HostArch"
27             fi
28         fi
29     elif [ "$__HostOS" == "FreeBSD" ]; then
30         __freebsd_version=`sysctl -n kern.osrelease | cut -f1 -d'.'`
31         __HostDistroRid="freebsd.$__freebsd_version-$__HostArch"
32     fi
33
34     # Portable builds target the base RID
35     if [ "$__PortableBuild" == 1 ]; then
36         if [ "$__BuildOS" == "OSX" ]; then
37             export __HostDistroRid="osx-$__BuildArch"
38         elif [ "$__BuildOS" == "Linux" ]; then
39             export __HostDistroRid="linux-$__BuildArch"
40         fi
41     fi
42
43     if [ "$__HostDistroRid" == "" ]; then
44         echo "WARNING: Cannot determine runtime id for current distro."
45     fi
46
47     echo "Setting __HostDistroRid to $__HostDistroRid"
48 }
49
50 initTargetDistroRid()
51 {
52     if [ $__CrossBuild == 1 ]; then
53         if [ "$__BuildOS" == "Linux" ]; then
54             if [ ! -e $ROOTFS_DIR/etc/os-release ]; then
55                 if [ -e $ROOTFS_DIR/android_platform ]; then
56                     source $ROOTFS_DIR/android_platform
57                     export __DistroRid="$RID"
58                 else
59                     echo "WARNING: Cannot determine runtime id for current distro."
60                     export __DistroRid=""
61                 fi
62             else
63                 source $ROOTFS_DIR/etc/os-release
64                 export __DistroRid="$ID.$VERSION_ID-$__BuildArch"
65             fi
66         fi
67     else
68         export __DistroRid="$__HostDistroRid"
69     fi
70
71     if [ "$ID.$VERSION_ID" == "ubuntu.16.04" ]; then
72      export __DistroRid="ubuntu.14.04-$__BuildArch"
73     fi
74
75     # Portable builds target the base RID
76     if [ "$__PortableBuild" == 1 ]; then
77         if [ "$__BuildOS" == "Linux" ]; then
78             export __DistroRid="linux-$__BuildArch"
79             export __RuntimeId="linux-$__BuildArch"
80         elif [ "$__BuildOS" == "OSX" ]; then
81             export __DistroRid="osx-$__BuildArch"
82             export __RuntimeId="osx-$__BuildArch"
83         fi
84     fi
85
86     echo "__DistroRid: " $__DistroRid
87 }
88
89 isMSBuildOnNETCoreSupported()
90 {
91     __isMSBuildOnNETCoreSupported=$__msbuildonunsupportedplatform
92
93     if [ $__isMSBuildOnNETCoreSupported == 1 ]; then
94         return
95     fi
96
97     if [ "$__HostArch" == "x64" ]; then
98         if [ "$__HostOS" == "Linux" ]; then
99             __isMSBuildOnNETCoreSupported=1
100             UNSUPPORTED_RIDS=("debian.9-x64" "ubuntu.17.04-x64")
101             for UNSUPPORTED_RID in "${UNSUPPORTED_RIDS[@]}"
102             do
103                 if [ "$__HostDistroRid" == "$UNSUPPORTED_RID" ]; then
104                     __isMSBuildOnNETCoreSupported=0
105                     break
106                 fi
107             done
108         elif [ "$__HostOS" == "OSX" ]; then
109             __isMSBuildOnNETCoreSupported=1
110         fi
111     fi
112 }
113
114 generate_layout()
115 {
116     __TestDir=$__ProjectDir/tests
117     __ProjectFilesDir=$__TestDir
118     __TestBinDir=$__TestWorkingDir
119
120     if [ $__RebuildTests -ne 0 ]; then
121         if [ -d "${__TestBinDir}" ]; then
122             echo "Removing tests build dir: ${__TestBinDir}"
123             rm -rf $__TestBinDir
124         fi
125     fi
126
127     __CMakeBinDir="${__TestBinDir}"
128
129     if [ -z "$__TestIntermediateDir" ]; then
130         __TestIntermediateDir="tests/obj/${__BuildOS}.${__BuildArch}.${__BuildType}"
131     fi
132
133     echo "__BuildOS: ${__BuildOS}"
134     echo "__BuildArch: ${__BuildArch}"
135     echo "__BuildType: ${__BuildType}"
136     echo "__TestIntermediateDir: ${__TestIntermediateDir}"
137
138     if [ ! -f "$__TestBinDir" ]; then
139         echo "Creating TestBinDir: ${__TestBinDir}"
140         mkdir -p $__TestBinDir
141     fi
142     if [ ! -f "$__LogsDir" ]; then
143         echo "Creating LogsDir: ${__LogsDir}"
144         mkdir -p $__LogsDir
145     fi
146
147     __BuildProperties="-p:OSGroup=${__BuildOS} -p:BuildOS=${__BuildOS} -p:BuildArch=${__BuildArch} -p:BuildType=${__BuildType}"
148
149     # =========================================================================================
150     # ===
151     # === Restore product binaries from packages
152     # ===
153     # =========================================================================================
154
155     build_Tests_internal "Restore_Packages" "${__ProjectDir}/tests/build.proj" " -BatchRestorePackages" "Restore product binaries (build tests)"
156
157     if [ -n "$__UpdateInvalidPackagesArg" ]; then
158         __up=-updateinvalidpackageversion
159     fi
160
161     echo "${__MsgPrefix}Creating test overlay..."
162
163     if [ -z "$xUnitTestBinBase" ]; then
164       xUnitTestBinBase=$__TestWorkingDir
165     fi
166
167     export CORE_ROOT=$xUnitTestBinBase/Tests/Core_Root
168
169     if [ -d "${CORE_ROOT}" ]; then
170       rm -rf $CORE_ROOT
171     fi
172
173     mkdir -p $CORE_ROOT
174
175     build_Tests_internal "Tests_Overlay_Managed" "${__ProjectDir}/tests/runtest.proj" "-testOverlay" "Creating test overlay"
176
177     chmod +x $__BinDir/corerun
178     chmod +x $__BinDir/crossgen
179
180     # Make sure to copy over the pulled down packages
181     cp -r $__BinDir/* $CORE_ROOT/ > /dev/null
182
183     # Work hardcoded path around
184     if [ ! -f "${__BuildToolsDir}/Microsoft.CSharp.Core.Targets" ]; then
185         ln -s "${__BuildToolsDir}/Microsoft.CSharp.Core.targets" "${__BuildToolsDir}/Microsoft.CSharp.Core.Targets"
186     fi
187     if [ ! -f "${__BuildToolsDir}/Microsoft.CSharp.targets" ]; then
188         ln -s "${__BuildToolsDir}/Microsoft.CSharp.Targets" "${__BuildToolsDir}/Microsoft.CSharp.targets"
189     fi
190 }
191
192 build_Tests()
193 {
194     __TestDir=$__ProjectDir/tests
195     __ProjectFilesDir=$__TestDir
196     __TestBinDir=$__TestWorkingDir
197
198     if [ $__RebuildTests -ne 0 ]; then
199         if [ -d "${__TestBinDir}" ]; then
200             echo "Removing tests build dir: ${__TestBinDir}"
201             rm -rf $__TestBinDir
202         fi
203     fi
204
205     __CMakeBinDir="${__TestBinDir}"
206
207     if [ -z "$__TestIntermediateDir" ]; then
208         __TestIntermediateDir="tests/obj/${__BuildOS}.${__BuildArch}.${__BuildType}"
209     fi
210
211     echo "__BuildOS: ${__BuildOS}"
212     echo "__BuildArch: ${__BuildArch}"
213     echo "__BuildType: ${__BuildType}"
214     echo "__TestIntermediateDir: ${__TestIntermediateDir}"
215
216     if [ ! -f "$__TestBinDir" ]; then
217         echo "Creating TestBinDir: ${__TestBinDir}"
218         mkdir -p $__TestBinDir
219     fi
220     if [ ! -f "$__LogsDir" ]; then
221         echo "Creating LogsDir: ${__LogsDir}"
222         mkdir -p $__LogsDir
223     fi
224
225     __BuildProperties="-p:OSGroup=${__BuildOS} -p:BuildOS=${__BuildOS} -p:BuildArch=${__BuildArch} -p:BuildType=${__BuildType}"
226
227     # =========================================================================================
228     # ===
229     # === Restore product binaries from packages
230     # ===
231     # =========================================================================================
232
233     build_Tests_internal "Restore_Product" "${__ProjectDir}/tests/build.proj" " -BatchRestorePackages" "Restore product binaries (build tests)"
234
235     if [ -n "$__BuildAgainstPackagesArg" ]; then
236         build_Tests_internal "Tests_GenerateRuntimeLayout" "${__ProjectDir}/tests/runtest.proj" "-BinPlaceRef -BinPlaceProduct -CopyCrossgenToProduct" "Restore product binaries (run tests)"
237     fi
238
239     echo "Starting the Managed Tests Build..."
240
241     __ManagedTestBuiltMarker=${__TestBinDir}/managed_test_build
242
243     if [ ! -f $__ManagedTestBuiltMarker ]; then
244
245         build_Tests_internal "Tests_Managed" "$__ProjectDir/tests/build.proj" "$__up" "Managed tests build (build tests)"
246
247         if [ $? -ne 0 ]; then
248             echo "${__MsgPrefix}Error: build failed. Refer to the build log files for details (above)"
249             exit 1
250         else
251             echo "Tests have been built."
252             echo "Create marker \"${__ManagedTestBuiltMarker}\""
253             touch $__ManagedTestBuiltMarker
254         fi
255     else
256         echo "Managed Tests had been built before."
257     fi
258
259     if [ $__BuildTestWrappers -ne -0 ]; then
260         echo "${__MsgPrefix}Creating test wrappers..."
261
262         __XUnitWrapperBuiltMarker=${__TestBinDir}/xunit_wrapper_build
263
264         if [ ! -f $__XUnitWrapperBuiltMarker ]; then
265
266             build_Tests_internal "Tests_XunitWrapper" "$__ProjectDir/tests/runtest.proj" "-BuildWrappers -MsBuildEventLogging=\" \" " "Test Xunit Wrapper"
267
268             if [ $? -ne 0 ]; then
269                 echo "${__MsgPrefix}Error: build failed. Refer to the build log files for details (above)"
270                 exit 1
271             else
272                 echo "XUnit Wrappers have been built."
273                 echo "Create marker \"${__XUnitWrapperBuiltMarker}\""
274                 touch $__XUnitWrapperBuiltMarker
275             fi
276         else
277             echo "XUnit Wrappers had been built before."
278         fi
279     fi
280
281     if [ -n "$__UpdateInvalidPackagesArg" ]; then
282         __up=-updateinvalidpackageversion
283     fi
284
285     echo "${__MsgPrefix}Creating test overlay..."
286
287     generate_layout
288
289     if [ $__ZipTests -ne 0 ]; then
290         echo "${__MsgPrefix}ZIP tests packages..."
291         build_Tests_internal "Helix_Prep" "$__ProjectDir/tests/helixprep.proj" " " "Prep test binaries for Helix publishing"
292     fi
293 }
294
295 build_Tests_internal()
296 {
297     subDirectoryName=$1
298     projectName=$2
299     extraBuildParameters=$3
300     stepName="$4"
301
302     # Set up directories and file names
303     __BuildLogRootName=$subDirectoryName
304     __BuildLog="$__LogsDir/${__BuildLogRootName}.${__BuildOS}.${__BuildArch}.${__BuildType}.log"
305     __BuildWrn="$__LogsDir/${__BuildLogRootName}.${__BuildOS}.${__BuildArch}.${__BuildType}.wrn"
306     __BuildErr="$__LogsDir/${__BuildLogRootName}.${__BuildOS}.${__BuildArch}.${__BuildType}.err"
307     __msbuildLog="\"/flp:Verbosity=normal;LogFile=${__BuildLog}\""
308     __msbuildWrn="\"/flp1:WarningsOnly;LogFile=${__BuildWrn}\""
309     __msbuildErr="\"/flp2:ErrorsOnly;LogFile=${__BuildErr}\""
310
311     # Generate build command
312     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"
313
314     echo "Building step '$stepName' via $buildCommand"
315
316     # Invoke MSBuild
317     eval $buildCommand
318
319     # Invoke MSBuild
320     # $__ProjectRoot/run.sh build -Project=$projectName -MsBuildLog="$__msbuildLog" -MsBuildWrn="$__msbuildWrn" -MsBuildErr="$__msbuildErr" $extraBuildParameters $__RunArgs $__UnprocessedBuildArgs
321
322     # Make sure everything is OK
323     if [ $? -ne 0 ]; then
324         echo "${__MsgPrefix}Failed to build $stepName. See the build logs:"
325         echo "    $__BuildLog"
326         echo "    $__BuildWrn"
327         echo "    $__BuildErr"
328         exit 1
329     fi
330 }
331
332 usage()
333 {
334     echo "Usage: $0 [BuildArch] [BuildType] [verbose] [coverage] [cross] [clangx.y] [ninja] [runtests] [bindir]"
335     echo "BuildArch can be: x64, x86, arm, armel, arm64"
336     echo "BuildType can be: debug, checked, release"
337     echo "coverage - optional argument to enable code coverage build (currently supported only for Linux and OSX)."
338     echo "ninja - target ninja instead of GNU make"
339     echo "clangx.y - optional argument to build using clang version x.y - supported version 3.5 - 6.0"
340     echo "cross - optional argument to signify cross compilation,"
341     echo "      - will use ROOTFS_DIR environment variable if set."
342     echo "crosscomponent - optional argument to build cross-architecture component,"
343     echo "               - will use CAC_ROOTFS_DIR environment variable if set."
344     echo "portableLinux - build for Portable Linux Distribution"
345     echo "portablebuild - Use portable build."
346     echo "verbose - optional argument to enable verbose build output."
347     echo "rebuild - if tests have already been built - rebuild them"
348     echo "generatelayoutonly - only pull down dependencies and build coreroot"
349     echo "buildagainstpackages - pull down and build using packages."
350     echo "runtests - run tests after building them"
351     echo "ziptests - zips CoreCLR tests & Core_Root for a Helix run"
352     echo "bindir - output directory (defaults to $__ProjectRoot/bin)"
353     echo "msbuildonunsupportedplatform - build managed binaries even if distro is not officially supported."
354     exit 1
355 }
356
357
358 # Obtain the location of the bash script to figure out where the root of the repo is.
359 __ProjectRoot="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
360
361 # $__ProjectRoot/build.sh $1 $2
362
363 # Use uname to determine what the CPU is.
364 CPUName=$(uname -p)
365
366 # Some Linux platforms report unknown for platform, but the arch for machine.
367 if [ "$CPUName" == "unknown" ]; then
368     CPUName=$(uname -m)
369 fi
370
371 case $CPUName in
372     i686)
373         echo "Unsupported CPU $CPUName detected, build might not succeed!"
374         __BuildArch=x86
375         __HostArch=x86
376         ;;
377
378     x86_64)
379         __BuildArch=x64
380         __HostArch=x64
381         ;;
382
383     armv7l)
384         echo "Unsupported CPU $CPUName detected, build might not succeed!"
385         __BuildArch=arm
386         __HostArch=arm
387         ;;
388
389     aarch64)
390         __BuildArch=arm64
391         __HostArch=arm64
392         ;;
393
394     *)
395         echo "Unknown CPU $CPUName detected, configuring as if for x64"
396         __BuildArch=x64
397         __HostArch=x64
398         ;;
399 esac
400
401 # Use uname to determine what the OS is.
402 OSName=$(uname -s)
403 case $OSName in
404     Linux)
405         __BuildOS=Linux
406         __HostOS=Linux
407         ;;
408
409     Darwin)
410         __BuildOS=OSX
411         __HostOS=OSX
412         ;;
413
414     FreeBSD)
415         __BuildOS=FreeBSD
416         __HostOS=FreeBSD
417         ;;
418
419     OpenBSD)
420         __BuildOS=OpenBSD
421         __HostOS=OpenBSD
422         ;;
423
424     NetBSD)
425         __BuildOS=NetBSD
426         __HostOS=NetBSD
427         ;;
428
429     SunOS)
430         __BuildOS=SunOS
431         __HostOS=SunOS
432         ;;
433
434     *)
435         echo "Unsupported OS $OSName detected, configuring as if for Linux"
436         __BuildOS=Linux
437         __HostOS=Linux
438         ;;
439 esac
440
441 __BuildType=Debug
442 __CodeCoverage=
443 __IncludeTests=INCLUDE_TESTS
444
445 # Set the various build properties here so that CMake and MSBuild can pick them up
446 export __ProjectDir="$__ProjectRoot"
447 __SourceDir="$__ProjectDir/src"
448 __PackagesDir="$__ProjectDir/packages"
449 __RootBinDir="$__ProjectDir/bin"
450 __BuildToolsDir="$__ProjectDir/Tools"
451 __UnprocessedBuildArgs=
452 __RunArgs=
453 __MSBCleanBuildArgs=
454 __UseNinja=0
455 __VerboseBuild=0
456 __SkipRestore=""
457 __CrossBuild=0
458 __ClangMajorVersion=0
459 __ClangMinorVersion=0
460 __NuGetPath="$__PackagesDir/NuGet.exe"
461 __HostDistroRid=""
462 __BuildAgainstPackagesArg=
463 __DistroRid=""
464 __cmakeargs=""
465 __PortableLinux=0
466 __msbuildonunsupportedplatform=0
467 __ZipTests=0
468 __NativeTestIntermediatesDir=
469 __RunTests=0
470 __RebuildTests=0
471 __BuildTestWrappers=0
472 __GenerateLayoutOnly=
473 CORE_ROOT=
474
475 while :; do
476     if [ $# -le 0 ]; then
477         break
478     fi
479
480     lowerI="$(echo $1 | awk '{print tolower($0)}')"
481     case $lowerI in
482         -\?|-h|--help)
483             usage
484             exit 1
485             ;;
486
487         x86)
488             __BuildArch=x86
489             ;;
490
491         x64)
492             __BuildArch=x64
493             ;;
494
495         arm)
496             __BuildArch=arm
497             ;;
498
499         armel)
500             __BuildArch=armel
501             ;;
502
503         arm64)
504             __BuildArch=arm64
505             ;;
506
507         debug)
508             __BuildType=Debug
509             ;;
510
511         checked)
512             __BuildType=Checked
513             ;;
514
515         release)
516             __BuildType=Release
517             ;;
518
519         coverage)
520             __CodeCoverage=Coverage
521             ;;
522
523         cross)
524             __CrossBuild=1
525             ;;
526
527         portableBuild)
528             __PortableBuild=1
529             ;;
530
531         portablelinux)
532             if [ "$__BuildOS" == "Linux" ]; then
533                 __PortableLinux=1
534             else
535                 echo "ERROR: portableLinux not supported for non-Linux platforms."
536                 exit 1
537             fi
538             ;;
539
540         verbose)
541         __VerboseBuild=1
542         ;;
543
544         clang3.5|-clang3.5)
545             __ClangMajorVersion=3
546             __ClangMinorVersion=5
547             ;;
548
549         clang3.6|-clang3.6)
550             __ClangMajorVersion=3
551             __ClangMinorVersion=6
552             ;;
553
554         clang3.7|-clang3.7)
555             __ClangMajorVersion=3
556             __ClangMinorVersion=7
557             ;;
558
559         clang3.8|-clang3.8)
560             __ClangMajorVersion=3
561             __ClangMinorVersion=8
562             ;;
563
564         clang3.9|-clang3.9)
565             __ClangMajorVersion=3
566             __ClangMinorVersion=9
567             ;;
568
569         clang4.0|-clang4.0)
570             __ClangMajorVersion=4
571             __ClangMinorVersion=0
572             ;;
573
574         clang5.0|-clang5.0)
575             __ClangMajorVersion=5
576             __ClangMinorVersion=0
577             ;;
578
579         clang6.0|-clang6.0)
580             __ClangMajorVersion=6
581             __ClangMinorVersion=0
582             ;;
583
584         ninja)
585             __UseNinja=1
586             ;;
587
588         runtests)
589             __RunTests=1
590             ;;
591
592         rebuild)
593             __RebuildTests=1
594             ;;
595
596         ziptests)
597             __ZipTests=1
598             ;;
599
600         generatelayoutonly)
601             __GenerateLayoutOnly=1
602             ;;
603
604         buildagainstpackages)
605             __BuildAgainstPackagesArg=1
606             ;;
607
608         bindir)
609             if [ -n "$2" ]; then
610                 __RootBinDir="$2"
611                 if [ ! -d $__RootBinDir ]; then
612                     mkdir $__RootBinDir
613                 fi
614                 __RootBinParent=$(dirname $__RootBinDir)
615                 __RootBinName=${__RootBinDir##*/}
616                 __RootBinDir="$(cd $__RootBinParent &>/dev/null && printf %s/%s $PWD $__RootBinName)"
617                 shift
618             else
619                 echo "ERROR: 'bindir' requires a non-empty option argument"
620                 exit 1
621             fi
622             ;;
623
624         msbuildonunsupportedplatform)
625             __msbuildonunsupportedplatform=1
626             ;;
627         *)
628             __UnprocessedBuildArgs="$__UnprocessedBuildArgs $1"
629             ;;
630     esac
631
632     shift
633 done
634
635
636 __RunArgs="-BuildArch=$__BuildArch -BuildType=$__BuildType -BuildOS=$__BuildOS"
637
638 # Configure environment if we are doing a verbose build
639 if [ $__VerboseBuild == 1 ]; then
640     export VERBOSE=1
641     __RunArgs="$__RunArgs -verbose"
642 fi
643
644 # Set default clang version
645 if [[ $__ClangMajorVersion == 0 && $__ClangMinorVersion == 0 ]]; then
646     if [ $__CrossBuild == 1 ]; then
647         __ClangMajorVersion=3
648         __ClangMinorVersion=6
649     else
650         __ClangMajorVersion=3
651         __ClangMinorVersion=5
652     fi
653 fi
654
655
656 # Set dependent variables
657 __LogsDir="$__RootBinDir/Logs"
658
659 # init the host distro name
660 initHostDistroRid
661
662 # Set the remaining variables based upon the determined build configuration
663 __BinDir="$__RootBinDir/Product/$__BuildOS.$__BuildArch.$__BuildType"
664 __PackagesBinDir="$__BinDir/.nuget"
665 __ToolsDir="$__RootBinDir/tools"
666 __TestDir="$__ProjectDir/tests"
667 __TestWorkingDir="$__RootBinDir/tests/$__BuildOS.$__BuildArch.$__BuildType"
668 __IntermediatesDir="$__RootBinDir/obj/$__BuildOS.$__BuildArch.$__BuildType"
669 __TestIntermediatesDir="$__RootBinDir/tests/obj/$__BuildOS.$__BuildArch.$__BuildType"
670 __isMSBuildOnNETCoreSupported=0
671 __CrossComponentBinDir="$__BinDir"
672 __CrossCompIntermediatesDir="$__IntermediatesDir/crossgen"
673
674 __CrossArch="$__HostArch"
675 if [[ "$__HostArch" == "x64" && "$__BuildArch" == "arm" ]]; then
676     __CrossArch="x86"
677 fi
678 if [ $__CrossBuild == 1 ]; then
679     __CrossComponentBinDir="$__CrossComponentBinDir/$__CrossArch"
680 fi
681 __CrossgenCoreLibLog="$__LogsDir/CrossgenCoreLib_$__BuildOS.$BuildArch.$__BuildType.log"
682 __CrossgenExe="$__CrossComponentBinDir/crossgen"
683
684 isMSBuildOnNETCoreSupported
685
686 # CI_SPECIFIC - On CI machines, $HOME may not be set. In such a case, create a subfolder and set the variable to set.
687 # This is needed by CLI to function.
688 if [ -z "$HOME" ]; then
689     if [ ! -d "$__ProjectDir/temp_home" ]; then
690         mkdir temp_home
691     fi
692     export HOME=$__ProjectDir/temp_home
693     echo "HOME not defined; setting it to $HOME"
694 fi
695
696 # Specify path to be set for CMAKE_INSTALL_PREFIX.
697 # This is where all built CoreClr libraries will copied to.
698 export __CMakeBinDir="$__BinDir"
699
700 if [ ! -d "$__BinDir" ] || [ ! -d "$__BinDir/bin" ]; then
701
702     echo "Cannot find build directory for the CoreCLR Product or native tests."
703     echo "Please make sure CoreCLR and native tests are built before building managed tests."
704     echo "Example use: './build.sh $__BuildArch $__BuildType' without -skiptests switch"
705     exit 1
706 fi
707
708 # Configure environment if we are doing a cross compile.
709 if [ $__CrossBuild == 1 ]; then
710     export CROSSCOMPILE=1
711     if ! [[ -n "$ROOTFS_DIR" ]]; then
712         export ROOTFS_DIR="$__ProjectRoot/cross/rootfs/$__BuildArch"
713     fi
714 fi
715
716 # init the target distro name
717 initTargetDistroRid
718
719 # Override tool directory
720
721 __CoreClrVersion=1.1.0
722 __sharedFxDir=$__BuildToolsDir/dotnetcli/shared/Microsoft.NETCore.App/$__CoreClrVersion/
723
724 echo "Building Tests..."
725
726 if [ -z "$__GenerateLayoutOnly" ]; then
727     build_Tests
728 else
729     generate_layout
730 fi
731
732 if [ $? -ne 0 ]; then
733     echo "Failed to build tests"
734     exit 1
735 fi
736
737 echo "${__MsgPrefix}Test build successful."
738 echo "${__MsgPrefix}Test binaries are available at ${__TestBinDir}"
739
740 __testNativeBinDir=$__IntermediatesDir/tests
741
742 if [ $__RunTests -ne 0 ]; then
743
744     echo "Run Tests..."
745
746     echo "${__TestDir}/runtest.sh --testRootDir=$__TestBinDir --coreClrBinDir=$__BinDir --coreFxBinDir=$__sharedFxDir --testNativeBinDir=$__testNativeBinDir"
747
748     $__TestDir/runtest.sh --testRootDir=$__TestBinDir --coreClrBinDir=$__BinDir --coreFxBinDir=$CORE_ROOT --testNativeBinDir=$__testNativeBinDir
749
750     echo "Tests run successful."
751 else
752     echo "To run all tests use 'tests/runtests.sh' where:"
753     echo "    testRootDir      = $__TestBinDir"
754     echo "    coreClrBinDir    = $__BinDir"
755     echo "    coreFxBinDir     = $CORE_ROOT"
756     echo "    testNativeBinDir = $__testNativeBinDir"
757     echo " -------------------------------------------------- "
758     echo " Example runtest.sh command"
759     echo ""
760     echo " ./tests/runtest.sh --coreOverlayDir=$CORE_ROOT --testNativeBinDir=$__testNativeBinDir --testRootDir=$__TestBinDir --copyNativeTestBin"
761     echo " -------------------------------------------------- "
762     echo "To run single test use the following command:"
763     echo "    bash ${__TestBinDir}/__TEST_PATH__/__TEST_NAME__.sh -coreroot=${CORE_ROOT}"
764 fi
765