ARM-CI: Convert Linux ARM emulator CI check to cross build (fixes PR #5680)
authorPrajwal A N <an.prajwal@samsung.com>
Fri, 10 Jun 2016 06:03:16 +0000 (15:03 +0900)
committerPrajwal A N <an.prajwal@samsung.com>
Tue, 14 Jun 2016 04:44:15 +0000 (13:44 +0900)
* Previously used emulated build took a lot of time leading to timeout errors
* Changing this CI check to build using cross build
* Resolves CI issues caused by previous identical PR #5680

Signed-off-by: Prajwal A N <an.prajwal@samsung.com>
netci.groovy

index 63c8106..20e9314 100755 (executable)
@@ -1018,7 +1018,7 @@ def static addTriggers(def job, def branch, def isPR, def architecture, def os,
                         Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} Cross ${configuration} Build")
                     }
                     else {
-                        Utilities.addGithubPRTriggerForBranch(job, branch, "Linux ARM Emulator Build", "(?i).*test\\W+Linux\\W+arm\\W+emulator.*")
+                        Utilities.addGithubPRTriggerForBranch(job, branch, "Linux ARM Emulator Cross ${configuration} Build", "(?i).*test\\W+Linux\\W+arm\\W+emulator\\W+${configuration}.*")
                     }
                     break
                 default:
@@ -1728,19 +1728,29 @@ combinedScenarios.each { scenario ->
                                         break
                                     }
                                     else {
+                                        // Build only for Debug or Release
+                                        if ( lowerConfiguration != 'debug' && lowerConfiguration != 'release' ) {
+                                            break
+                                        }
+
+                                        // Setup variables to hold emulator folder path and the rootfs mount path
+                                        def armemul_path = '/opt/linux-arm-emulator'
+                                        def armrootfs_mountpath = '/opt/linux-arm-emulator-root'
                                         // Unmount previously mounted rootfs and mount the Linux ARM emulator rootfs at /opt/linux-arm-emulator-root/
-                                        buildCommands += "if grep -qs '/opt/linux-arm-emulator-root' /proc/mounts; then sudo umount /opt/linux-arm-emulator-root; fi ; sudo mount /opt/linux-arm-emulator/platform/rootfs-t30.ext4 /opt/linux-arm-emulator-root/"
-                                        // Remove old copy of coreclr and copy the latest version of coreclr
-                                        // This need to be done as it is not possible to clone the repository inside the chroot jail
-                                        buildCommands += "sudo rm -rf /opt/linux-arm-emulator-root/home/coreclr; sudo mkdir /opt/linux-arm-emulator-root/home/coreclr; sudo cp -R ./ /opt/linux-arm-emulator-root/home/coreclr"
-
-                                        // Chroot into the Linux ARM emulator environment and execute the build
-                                        buildCommands += """echo \"Chrooting into Linux ARM emulator environment\"
-                                                            sudo chroot /opt/linux-arm-emulator-root/ /bin/bash -x <<EOF
-                                                            source /dotnet/setenv/setenv_coreclr.sh
-                                                            cd home/coreclr
-                                                            ./build.sh arm clean verbose skipmscorlib
-EOF"""
+                                        buildCommands += "if grep -qs ${armrootfs_mountpath} /proc/mounts; then sudo umount ${armrootfs_mountpath}; fi ; sudo mount ${armemul_path}/platform/rootfs-t30.ext4 ${armrootfs_mountpath}"
+
+                                        // Export LINUX_ARM_INCPATH to hold the include paths to be used by CPLUS_INCLUDE_PATH environment variable
+                                        // Apply the changes needed to the library search paths to build for the emulator rootfs
+                                        buildCommands += """echo \"Exporting LINUX_ARM_INCPATH environment variable\"
+                                                            source ${armrootfs_mountpath}/dotnet/setenv/setenv_incpath.sh ${armrootfs_mountpath}
+
+                                                            echo \"Applying cross build patch to suit Linux ARM emulator rootfs\"
+                                                            git am < ${armrootfs_mountpath}/dotnet/setenv/coreclr_cross.patch
+
+                                                            ROOTFS_DIR=${armrootfs_mountpath} CPLUS_INCLUDE_PATH=\$LINUX_ARM_INCPATH CXXFLAGS=\$LINUX_ARM_CXXFLAGS ./build.sh arm-softfp clean cross verbose skipmscorlib clang3.5 ${lowerConfiguration}
+
+                                                            echo \"Rewinding HEAD to master code\"
+                                                            git reset --hard HEAD^"""
 
                                         // Basic archiving of the build, no pal tests
                                         Utilities.addArchival(newJob, "/opt/linux-arm-emulator-root/home/coreclr/bin/Product/**")