X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=build-test.sh;h=65703d57bf3aacbec5080b251bdeef9b1f7dd3ee;hb=11f58cb707092055ad8519723b45b72def099300;hp=fe86703f561a4a71f2b98cfc991fe8af9af06ddc;hpb=b7922721dc7298094da3f4c2bcf31b43fde9476b;p=platform%2Fupstream%2Fcoreclr.git diff --git a/build-test.sh b/build-test.sh index fe86703..65703d5 100755 --- a/build-test.sh +++ b/build-test.sh @@ -150,10 +150,89 @@ generate_layout() build_MSBuild_projects "Tests_Overlay_Managed" "${__ProjectDir}/tests/runtest.proj" "Creating test overlay" "/t:CreateTestOverlay" chmod +x $__BinDir/corerun - chmod +x $__BinDir/crossgen + chmod +x $__CrossgenExe # Make sure to copy over the pulled down packages cp -r $__BinDir/* $CORE_ROOT/ > /dev/null + + if [ "$__BuildOS" != "OSX" ]; then + nextCommand="\"$__TestDir/setup-stress-dependencies.sh\" --arch=$__BuildArch --outputDir=$CORE_ROOT" + echo "Resolve runtime dependences via $nextCommand" + eval $nextCommand + if [ $? != 0 ]; then + echo "${__MsgPrefix}Error: setup-stress-dependencies failed." + exit 1 + fi + fi + + # Precompile framework assemblies with crossgen if required + if [ $__DoCrossgen -ne 0 ]; then + precompile_coreroot_fx + fi +} + +precompile_coreroot_fx() +{ + echo "${__MsgPrefix}Running crossgen on framework assemblies in CORE_ROOT: '${CORE_ROOT}'" + + # Read the exclusion file for this platform + skipCrossGenFiles=($(read_array "$(dirname "$0")/tests/skipCrossGenFiles.${__BuildArch}.txt")) + + local overlayDir=$CORE_ROOT + + filesToPrecompile=$(find -L $overlayDir -iname \*.dll -not -iname \*.ni.dll -not -iname \*-ms-win-\* -not -iname xunit.\* -type f) + for fileToPrecompile in ${filesToPrecompile} + do + local filename=${fileToPrecompile} + if is_skip_crossgen_test "$(basename $filename)"; then + continue + fi + echo Precompiling $filename + $__CrossgenExe /Platform_Assemblies_Paths $overlayDir $filename 1> $filename.stdout 2>$filename.stderr + local exitCode=$? + if [[ $exitCode != 0 ]]; then + if grep -q -e '0x80131018' $filename.stderr; then + printf "\n\t$filename is not a managed assembly.\n\n" + else + echo Unable to precompile $filename. + cat $filename.stdout + cat $filename.stderr + exit $exitCode + fi + else + rm $filename.{stdout,stderr} + fi + done +} + +declare -a skipCrossGenFiles + +function is_skip_crossgen_test { + for skip in "${skipCrossGenFiles[@]}"; do + if [ "$1" == "$skip" ]; then + return 0 + fi + done + return 1 +} + +# Get an array of items by reading the specified file line by line. +function read_array { + local theArray=() + + if [ ! -f "$1" ]; then + return + fi + + # bash in Mac OS X doesn't support 'readarray', so using alternate way instead. + # readarray -t theArray < "$1" + # Any line that starts with '#' is ignored. + while IFS='' read -r line || [ -n "$line" ]; do + if [[ $line != "#"* ]]; then + theArray[${#theArray[@]}]=$line + fi + done < "$1" + echo ${theArray[@]} } generate_testhost() @@ -415,13 +494,14 @@ build_native_projects() __versionSourceFile="$intermediatesForBuild/version.c" if [ $__SkipGenerateVersion == 0 ]; then pwd - $__ProjectRoot/dotnet.sh msbuild /nologo /verbosity:minimal /clp:Summary \ - /p:RestoreDefaultOptimizationDataPackage=false /p:PortableBuild=true \ - /p:UsePartialNGENOptimization=false /maxcpucount \ - $__ProjectDir/build.proj /t:GenerateVersionHeader \ - /p:GenerateVersionHeader=true /p:NativeVersionSourceFile=$__versionSourceFile \ - /l:BinClashLogger,Tools/Microsoft.DotNet.Build.Tasks.dll\;LogFile=binclash.log \ - $__CommonMSBuildArgs $__UnprocessedBuildArgs + $__ProjectRoot/eng/common/msbuild.sh $__ProjectRoot/eng/empty.csproj \ + /p:NativeVersionFile=$__versionSourceFile \ + /p:ArcadeBuild=true /t:GenerateNativeVersionFile /restore \ + $__CommonMSBuildArgs $__UnprocessedBuildArgs + if [ $? -ne 0 ]; then + echo "Failed to generate native version file." + exit $? + fi else # Generate the dummy version.c, but only if it didn't exist to make sure we don't trigger unnecessary rebuild __versionSourceLine="static char sccsid[] __attribute__((used)) = \"@(#)No version information produced\";" @@ -436,7 +516,12 @@ build_native_projects() pushd "$intermediatesForBuild" # Regenerate the CMake solution # Force cross dir to point to project root cross dir, in case there is a cross build. - nextCommand="CONFIG_DIR=\"$__ProjectRoot/cross\" \"$__ProjectRoot/src/pal/tools/gen-buildsys-clang.sh\" \"$__TestDir\" $__ClangMajorVersion $__ClangMinorVersion $platformArch $__BuildType $__CodeCoverage $generator $extraCmakeArguments $__cmakeargs" + scriptDir="$__ProjectRoot/src/pal/tools" + if [[ $__GccBuild == 0 ]]; then + nextCommand="CONFIG_DIR=\"$__ProjectRoot/cross\" \"$scriptDir/gen-buildsys-clang.sh\" \"$__TestDir\" $__ClangMajorVersion $__ClangMinorVersion $platformArch $scriptDir $__BuildType $__CodeCoverage $generator $extraCmakeArguments $__cmakeargs" + else + nextCommand="CONFIG_DIR=\"$__ProjectRoot/cross\" \"$scriptDir/gen-buildsys-gcc.sh\" \"$__TestDir\" \"$__GccMajorVersion\" \"$__GccMinorVersion\" $platformArch $scriptDir $__BuildType $__CodeCoverage $generator $extraCmakeArguments $__cmakeargs" + fi echo "Invoking $nextCommand" eval $nextCommand popd @@ -475,6 +560,7 @@ usage() 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 - supported version 3.5 - 6.0" + echo "gccx.y - optional argument to build using gcc version x.y." echo "cross - optional argument to signify cross compilation," echo " - will use ROOTFS_DIR environment variable if set." echo "portableLinux - build for Portable Linux Distribution" @@ -487,6 +573,7 @@ usage() echo "generatelayoutonly - only pull down dependencies and build coreroot" echo "generatetesthostonly - only pull down dependencies and build coreroot and the CoreFX testhost" echo "skiprestorepackages - skip package restore" + echo "crossgen - Precompiles the framework managed assemblies in coreroot" echo "runtests - run tests after building them" echo "bindir - output directory (defaults to $__ProjectRoot/bin)" echo "msbuildonunsupportedplatform - build managed binaries even if distro is not officially supported." @@ -583,7 +670,7 @@ __IncludeTests=INCLUDE_TESTS # Set the various build properties here so that CMake and MSBuild can pick them up export __ProjectDir="$__ProjectRoot" __SourceDir="$__ProjectDir/src" -__PackagesDir="$__ProjectDir/packages" +__PackagesDir="$__ProjectDir/.packages" __RootBinDir="$__ProjectDir/bin" __BuildToolsDir="$__ProjectDir/Tools" __DotNetCli="$__ProjectDir/dotnet.sh" @@ -601,6 +688,9 @@ __ConfigureOnly=0 __CrossBuild=0 __ClangMajorVersion=0 __ClangMinorVersion=0 +__GccBuild=0 +__GccMajorVersion=0 +__GccMinorVersion=0 __NuGetPath="$__PackagesDir/NuGet.exe" __SkipRestorePackages=0 __DistroRid="" @@ -615,6 +705,7 @@ __GenerateLayoutOnly= __GenerateTestHostOnly= __priority1= __BuildTestWrappersOnly= +__DoCrossgen=0 CORE_ROOT= while :; do @@ -726,6 +817,36 @@ while :; do __ClangMinorVersion=0 ;; + gcc5|-gcc5) + __GccMajorVersion=5 + __GccMinorVersion= + __GccBuild=1 + ;; + + gcc6|-gcc6) + __GccMajorVersion=6 + __GccMinorVersion= + __GccBuild=1 + ;; + + gcc7|-gcc7) + __GccMajorVersion=7 + __GccMinorVersion= + __GccBuild=1 + ;; + + gcc8|-gcc8) + __GccMajorVersion=8 + __GccMinorVersion= + __GccBuild=1 + ;; + + gcc|-gcc) + __GccMajorVersion= + __GccMinorVersion= + __GccBuild=1 + ;; + ninja) __UseNinja=1 ;; @@ -763,6 +884,10 @@ while :; do __SkipRestorePackages=1 ;; + crossgen) + __DoCrossgen=1 + ;; + bindir) if [ -n "$2" ]; then __RootBinDir="$2" @@ -809,7 +934,7 @@ else __NumProc=$(nproc --all) fi -__CommonMSBuildArgs=("/p:__BuildArch=$__BuildArch" "/p:__BuildType=$__BuildType" "/p:__BuildOS=$__BuildOS") +__CommonMSBuildArgs=("/p:__BuildArch=$__BuildArch" "/p:__BuildType=$__BuildType" "/p:__BuildOS=$__BuildOS" "/nodeReuse:false") # Configure environment if we are doing a verbose build if [ $__VerboseBuild == 1 ]; then @@ -844,9 +969,6 @@ __CrossComponentBinDir="$__BinDir" __CrossCompIntermediatesDir="$__IntermediatesDir/crossgen" __CrossArch="$__HostArch" -if [[ "$__HostArch" == "x64" && "$__BuildArch" == "arm" ]]; then - __CrossArch="x86" -fi if [ $__CrossBuild == 1 ]; then __CrossComponentBinDir="$__CrossComponentBinDir/$__CrossArch" fi @@ -876,7 +998,12 @@ fi # init the target distro name initTargetDistroRid -# Override tool directory +if [ $__PortableBuild == 0 ]; then + __CommonMSBuildArgs="$__CommonMSBuildArgs /p:PortableBuild=false" +fi + +# Restore Build Tools +source $__ProjectRoot/init-tools.sh if [[ (-z "$__GenerateLayoutOnly") && (-z "$__GenerateTestHostOnly") && (-z "$__BuildTestWrappersOnly") ]]; then build_Tests