-function create_core_overlay {
- local errorSource='create_core_overlay'
- local printUsage=1
-
- if [ -n "$coreOverlayDir" ]; then
- export CORE_ROOT="$coreOverlayDir"
-
- if [ -n "$copyNativeTestBin" ]; then
- copy_test_native_bin_to_test_root $coreOverlayDir
- fi
-
- return
- fi
-
- # Check inputs to make sure we have enough information to create the core layout. $testRootDir/Tests/Core_Root should
- # already exist and contain test dependencies that are not built.
- local testDependenciesDir=$testRootDir/Tests/Core_Root
- if [ ! -d "$testDependenciesDir" ]; then
- exit_with_error "$errorSource" "Did not find the test dependencies directory: $testDependenciesDir"
- fi
- if [ -z "$coreClrBinDir" ]; then
- exit_with_error "$errorSource" "One of --coreOverlayDir or --coreClrBinDir must be specified." "$printUsage"
- fi
- if [ ! -d "$coreClrBinDir" ]; then
- exit_with_error "$errorSource" "Directory specified by --coreClrBinDir does not exist: $coreClrBinDir"
- fi
- if [ -z "$coreFxBinDir" ]; then
- exit_with_error "$errorSource" "One of --coreOverlayDir or --coreFxBinDir must be specified." "$printUsage"
- fi
-
- # Create the overlay
- coreOverlayDir=$testRootDir/Tests/coreoverlay
- export CORE_ROOT="$coreOverlayDir"
- if [ -e "$coreOverlayDir" ]; then
- rm -f -r "$coreOverlayDir"
- fi
- mkdir "$coreOverlayDir"
-
- cp -f -v "$coreFxBinDir/"* "$coreOverlayDir/" 2>/dev/null
- cp -f -p -v "$coreClrBinDir/"* "$coreOverlayDir/" 2>/dev/null
- if [ -d "$mscorlibDir/bin" ]; then
- cp -f -v "$mscorlibDir/bin/"* "$coreOverlayDir/" 2>/dev/null
- fi
- cp -f -v "$testDependenciesDir/"xunit* "$coreOverlayDir/" 2>/dev/null
- cp -n -v "$testDependenciesDir/"* "$coreOverlayDir/" 2>/dev/null
- if [ -f "$coreOverlayDir/mscorlib.ni.dll" ]; then
- # Test dependencies come from a Windows build, and mscorlib.ni.dll would be the one from Windows
- rm -f "$coreOverlayDir/mscorlib.ni.dll"
- fi
- if [ -f "$coreOverlayDir/System.Private.CoreLib.ni.dll" ]; then
- # Test dependencies come from a Windows build, and System.Private.CoreLib.ni.dll would be the one from Windows
- rm -f "$coreOverlayDir/System.Private.CoreLib.ni.dll"
- fi
- copy_test_native_bin_to_test_root $coreOverlayDir
-}
-
-declare -a skipCrossGenFiles
-
-function is_skip_crossgen_test {
- for skip in "${skipCrossGenFiles[@]}"; do
- if [ "$1" == "$skip" ]; then
- return 0
- fi
- done
- return 1
-}
-
-function precompile_overlay_assemblies {
- skipCrossGenFiles=($(read_array "$(dirname "$0")/skipCrossGenFiles.$ARCH.txt"))
-
- if [ $doCrossgen == 1 ]; then
- local overlayDir=$CORE_ROOT
-
- filesToPrecompile=$(find -L $overlayDir -iname \*.dll -not -iname \*.ni.dll -not -iname \*-ms-win-\* -type f )
- for fileToPrecompile in ${filesToPrecompile}
- do
- local filename=${fileToPrecompile}
- if [ $jitdisasm == 1 ]; then
- $overlayDir/corerun $overlayDir/jit-dasm.dll --crossgen $overlayDir/crossgen --platform $overlayDir --output $testRootDir/dasm $filename
- local exitCode=$?
- if [ $exitCode != 0 ]; then
- echo Unable to generate dasm for $filename
- fi
- else
- if is_skip_crossgen_test "$(basename $filename)"; then
- continue
- fi
- echo Precompiling $filename
- $overlayDir/crossgen /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
- fi
- done
- else
- echo Skipping crossgen of FX assemblies.
- fi
-}
-
-function copy_test_native_bin_to_test_root {
- local errorSource='copy_test_native_bin_to_test_root'
- local coreRootDir=$1
-
- if [ -z "$testNativeBinDir" ]; then
- exit_with_error "$errorSource" "--testNativeBinDir is required."
- fi
- testNativeBinDir=$testNativeBinDir/src
- if [ ! -d "$testNativeBinDir" ]; then
- exit_with_error "$errorSource" "Directory specified by --testNativeBinDir does not exist: $testNativeBinDir"
- fi
-
- # Copy native test components from the native test build into the respective test directory in the test root directory
- find "$testNativeBinDir" -type f -iname "*.$libExtension" |
- while IFS='' read -r filePath || [ -n "$filePath" ]; do
- local dirPath=$(dirname "$filePath")
- cp -f "$filePath" "$coreRootDir"
- done
-}
-