| #!/bin/bash |
| # |
| # Copyright 2013 Google Inc. All Rights Reserved. |
| # Author: rmistry@google.com (Ravi Mistry) |
| # |
| # This scripts does the following: |
| # * Checks out Chromium ToT and Skia LKGR. |
| # * Applies the specified patch. |
| # * Builds Chromium. |
| # * Copies the build to a new directory. |
| # * Reverts the patch. |
| # * Builds Chromium. |
| # * Copies both builds to Google Storage. |
| # |
| # Use "PIXEL_DIFFS=true" to build content_shell instead of chrome. |
| # |
| # The script should be run from the cluster-telemetry-master GCE instance's |
| # /b/skia-repo/buildbot/cluster_telemetry/telemetry_master_scripts |
| # directory. |
| |
| if [ $# -ne 7 ]; then |
| echo |
| echo "Usage: `basename $0` /tmp/patch chromium rmistry-2013-11-20.07-34-05 /tmp/logfile 1" |
| echo |
| echo "The first argument is the location of the Chromium Patch." |
| echo "The second argument is the location of the Blink Patch." |
| echo "The third argument is the location of the Skia Patch." |
| echo "The fourth argument is the unique runid (typically requester + timestamp)." |
| echo "The fifth argument is the location of the log file." |
| echo "The sixth argument is whether chromium should be built with aura. 1 means yes, 0 means no." |
| echo "The seventh argument is the target platform the build will be run on (Android/Linux)." |
| echo |
| exit 1 |
| fi |
| |
| CHROMIUM_PATCH_LOCATION=$1 |
| BLINK_PATCH_LOCATION=$2 |
| SKIA_PATCH_LOCATION=$3 |
| RUN_ID=$4 |
| LOG_FILE_LOCATION=$5 |
| USE_AURA=$6 |
| TARGET_PLATFORM=$7 |
| |
| source vm_utils.sh |
| |
| function copy_build_log_to_gs() { |
| echo "== Copying build log to gs ==" |
| gsutil cp -a public-read $LOG_FILE_LOCATION \ |
| gs://chromium-skia-gm/telemetry/tryserver-outputs/build-logs/$RUN_ID-chromium.txt |
| rm $LOG_FILE_LOCATION |
| } |
| |
| if [ "$TARGET_PLATFORM" == "Android" ]; then |
| echo "== Using android-base ==" |
| CHROMIUM_BUILD_DIR_BASE=/b/storage/chromium-builds/android-base |
| FETCH_TARGET_ARG="--fetch_target=android" |
| elif [ ! -n "$PIXEL_DIFFS" ]; then |
| echo "== Using tryserver-base ==" |
| CHROMIUM_BUILD_DIR_BASE=/b/storage/chromium-builds/tryserver-base |
| else |
| echo "== Using pixeldiffs-base ==" |
| CHROMIUM_BUILD_DIR_BASE=/b/storage/chromium-builds/pixeldiffs-base |
| fi |
| mkdir -p $CHROMIUM_BUILD_DIR_BASE |
| |
| # Find Chromium's ToT |
| git ls-remote https://chromium.googlesource.com/chromium/src.git --verify refs/heads/master &> /tmp/chromium-tot |
| CHROMIUM_COMMIT_HASH=`cut -f1 /tmp/chromium-tot` |
| # Find Skia's Git LKGR. |
| for i in {1..10}; do wget -O /tmp/skia-lkgr http://skia-tree-status.appspot.com/lkgr && break || sleep 2; done |
| SKIA_COMMIT_HASH=`cat /tmp/skia-lkgr` |
| |
| # Chromium sync command using Chromium ToT and Skia LKGR. |
| echo "== Syncing with chromium $CHROMIUM_COMMIT_HASH + skia $SKIA_COMMIT_HASH ==" |
| SYNC_SKIA_IN_CHROME_CMD="PYTHONPATH=/b/skia-repo/buildbot/third_party/chromium_buildbot/site_config/:/b/skia-repo/buildbot/site_config/:/b/skia-repo/buildbot/third_party/chromium_buildbot/scripts/:/b/skia-repo/buildbot/common/ python sync_skia_in_chrome.py --destination=$CHROMIUM_BUILD_DIR_BASE --chrome_revision=$CHROMIUM_COMMIT_HASH --skia_revision=$SKIA_COMMIT_HASH $FETCH_TARGET_ARG" |
| |
| eval $SYNC_SKIA_IN_CHROME_CMD |
| |
| if [ $? -ne 0 ] |
| then |
| echo "== There was an error. Deleting base directory and trying again... ==" |
| rm -rf $CHROMIUM_BUILD_DIR_BASE |
| mkdir -p $CHROMIUM_BUILD_DIR_BASE |
| eval $SYNC_SKIA_IN_CHROME_CMD |
| fi |
| if [ $? -ne 0 ] |
| then |
| echo "== There was an error checking out chromium $CHROMIUM_COMMIT_HASH + skia $SKIA_COMMIT_HASH ==" |
| copy_build_log_to_gs |
| exit 1 |
| fi |
| |
| # Construct directory names from chromium and skia's truncated commit hashes. |
| DIR_NAME=try-${CHROMIUM_COMMIT_HASH:0:7}-${SKIA_COMMIT_HASH:0:7}-${RUN_ID} |
| DIR_NAME_WITH_PATCH=${DIR_NAME}-withpatch |
| |
| cd $CHROMIUM_BUILD_DIR_BASE/src/ |
| |
| # Make sure we are starting from a clean slate. |
| reset_chromium_checkout |
| |
| echo "== Applying the specified patches ==" |
| # Stay in the current directory for the chromium patch. |
| apply_patch $CHROMIUM_PATCH_LOCATION |
| # Apply blink patch. |
| cd third_party/WebKit/ |
| apply_patch $BLINK_PATCH_LOCATION |
| cd ../skia/ |
| apply_patch $SKIA_PATCH_LOCATION |
| |
| echo "== Building chromium with the patches ==" |
| cd $CHROMIUM_BUILD_DIR_BASE/src/ |
| if [ "$TARGET_PLATFORM" == "Android" ]; then |
| echo "== Building chrome_shell_apk ==" |
| build_chrome_shell_apk |
| elif [ ! -n "$PIXEL_DIFFS" ]; then |
| echo "== Building chromium ==" |
| build_chromium |
| else |
| echo "== Building content_shell ==" |
| build_content_shell |
| fi |
| echo "== Copy patch build to Google Storage ==" |
| copy_build_to_google_storage $DIR_NAME_WITH_PATCH $CHROMIUM_BUILD_DIR_BASE |
| |
| echo "== Building chromium without the patches ==" |
| cd $CHROMIUM_BUILD_DIR_BASE/src/ |
| reset_chromium_checkout |
| if [ "$TARGET_PLATFORM" == "Android" ]; then |
| echo "== Building chrome_shell_apk ==" |
| build_chrome_shell_apk |
| elif [ ! -n "$PIXEL_DIFFS" ]; then |
| echo "== Building chromium ==" |
| build_chromium |
| else |
| echo "== Building content_shell ==" |
| build_content_shell |
| fi |
| echo "== Copy build with no patch to Google Storage ==" |
| copy_build_to_google_storage $DIR_NAME $CHROMIUM_BUILD_DIR_BASE |
| |
| copy_build_log_to_gs |