Use "Simple Chrome for Chrome OS Workflow" to build Skia for ChromeOS
authorborenet@google.com <borenet@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Wed, 19 Jun 2013 15:13:32 +0000 (15:13 +0000)
committerborenet@google.com <borenet@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Wed, 19 Jun 2013 15:13:32 +0000 (15:13 +0000)
(SkipBuildbotRuns) since this isn't used yet.

R=djsollen@google.com

Review URL: https://codereview.chromium.org/17412007

git-svn-id: http://skia.googlecode.com/svn/trunk@9681 2bbb7eff-a529-9590-31e7-b0007b416f81

DEPS
gyp/common_conditions.gypi
platform_tools/chromeos/bin/build_skia_in_chroot
platform_tools/chromeos/bin/chromeos_make
platform_tools/chromeos/bin/chromeos_setup.sh

diff --git a/DEPS b/DEPS
index ab34cde..d7ec59f 100644 (file)
--- a/DEPS
+++ b/DEPS
@@ -31,6 +31,8 @@ deps_os = {
   },
   "chromeos": {
     "platform_tools/chromeos/third_party/externals/gif" : "https://android.googlesource.com/platform/external/giflib.git@android-4.2.2_r1.2",
+    "platform_tools/chromeos/toolchain/src/third_party/chromite": "https://chromium.googlesource.com/chromiumos/chromite.git@d6a4c7e0ee4d53ddc5238dbddfc0417796a70e54",
+    "platform_tools/chromeos/toolchain/src/third_party/pyelftools": "https://chromium.googlesource.com/chromiumos/third_party/pyelftools.git@bdc1d380acd88d4bfaf47265008091483b0d614e",
   },
 }
 
index cf8cbde..54e4ad6 100644 (file)
           }],
           [ 'skia_os == "chromeos"', {
             'ldflags': [
-              '--sysroot=/build/<(skia_cros_target)',
               '-lstdc++',
               '-lm',
             ],
index d73ce90..cfad89a 100755 (executable)
@@ -31,6 +31,22 @@ then
   exit 1;
 fi
 
+
+# TODO(borenet): Add these to the tarball, so we don't have to copy.
+# Copy missing headers and libraries into the sysroot.
+if [[ ${GENERIC_BOARD_TYPE} == "amd64-generic" ]];
+then 
+  LIB_DIR="lib64"
+else
+  LIB_DIR="lib"
+fi
+if ! [[ -f "${SYSROOT}/usr/include/GL/glu.h" ]]; then
+  cp platform_tools/chromeos/toolchain/${GENERIC_BOARD_TYPE}/usr/include/GL/glu.h ${SYSROOT}/usr/include/GL
+fi
+if ! [[ -f "${SYSROOT}/usr/${LIB_DIR}/libGLU.so" ]]; then
+  cp platform_tools/chromeos/toolchain/${GENERIC_BOARD_TYPE}/usr/${LIB_DIR}/libGLU.so* ${SYSROOT}/usr/${LIB_DIR}
+fi
+
 make ${makeVars}
 returnVal=$?
 if [ $returnVal != 0 ]
index dc008f3..ee873b2 100755 (executable)
@@ -4,7 +4,6 @@
 # chroot contained within an existing ChromeOS checkout, entering the chroot,
 # and running the build_skia_in_chroot script.
 
-MAKE_FLAGS=$@
 SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
 
 if [ $(uname) != "Linux" ]; then
@@ -12,26 +11,69 @@ if [ $(uname) != "Linux" ]; then
     exit 1
 fi
 
-if [ -z "${CHROMEOS_ROOT}" ]; then
-    echo "ERROR: Please set CHROMEOS_ROOT to the root of your ChromeOS checkout."
+
+makeVars=""
+deviceID=""
+
+while (( "$#" )); do
+
+  if [[ $(echo "$1" | grep "^-d$") != "" ]];
+  then 
+    deviceID="$2"
+    shift
+  else
+    makeVars="$makeVars $1"
+  fi
+
+shift
+done
+
+if [[ -z "${deviceID}" ]]; then
+  echo "You must provide a deviceID with -d."
+  exit 1
+fi
+
+CHROMEOS_CHROOT="${SCRIPT_DIR}/../toolchain"
+
+# Obtain some extra headers and libraries if needed.
+if ! [[ -d "${CHROMEOS_CHROOT}/x86-generic" && \
+        -d "${CHROMEOS_CHROOT}/amd64-generic" && \
+        -d "${CHROMEOS_CHROOT}/arm-generic" ]]; then
+  gsutil cp gs://chromium-skia-gm/chromeos-toolchains/cros_toolchain.tgz ${CHROMEOS_CHROOT}
+  if [[ "$?" != "0" ]]; then
+    exit 1
+  fi
+  pushd ${CHROMEOS_CHROOT} > /dev/null
+  tar -zxvf cros_toolchain.tgz
+  if [[ "$?" != "0" ]]; then
     exit 1
+  fi
+  rm cros_toolchain.tgz
+  popd > /dev/null
 fi
 
-CHROMEOS_CHROOT="${CHROMEOS_ROOT}/chroot"
+# Get the required SDK version.
+# TODO(borenet): Should we instead get the latest from GS?
+#SDK_VERSION=$(gsutil cat gs://chromeos-image-archive/${deviceID}-release/LATEST-master)
+#SDK_VERSION=${SDK_VERSION:4}
+SDK_VERSION="4279.0.0"
+mkdir -p "${CHROMEOS_CHROOT}/src/chromeos"
+echo -n ${SDK_VERSION} > "${CHROMEOS_CHROOT}/src/chromeos/CHROMEOS_LKGM"
 
-# Where the Skia code will pretend to live inside the chroot.
-SKIA_CHROOT_PARENT="/usr/local"
-SKIA_CHROOT_DIR="${SKIA_CHROOT_PARENT}/skia"
+# Put a fake .gclient file in the toolchain directory so that the cros tool
+# thinks we're in a Chrome checkout.
+echo "Delete me!" > "${CHROMEOS_CHROOT}/.gclient"
 
-echo "Mounting Skia source at ${SKIA_CHROOT_DIR} in chroot."
-sudo mkdir -p ${CHROMEOS_CHROOT}${SKIA_CHROOT_DIR}
-sudo mount $(pwd) ${CHROMEOS_CHROOT}${SKIA_CHROOT_DIR} -o bind
+# Where the Skia code will pretend to live inside the chroot.
+SKIA_TOP_DIR="${SCRIPT_DIR}/../../.."
 
-echo "Compiling in chroot: ${CHROMEOS_CHROOT}"
-sudo ${CHROMEOS_ROOT}/chromite/bin/cros_sdk -- /bin/sh -c "cd ${SKIA_CHROOT_DIR}; platform_tools/chromeos/bin/build_skia_in_chroot $MAKE_FLAGS"
+pushd ${CHROMEOS_CHROOT}
+cros chrome-sdk --board ${deviceID} --debug -- /bin/sh -c "cd ${SKIA_TOP_DIR}; platform_tools/chromeos/bin/build_skia_in_chroot ${makeVars}"
 returnVal=$?
+popd > /dev/null
 
-sudo umount ${CHROMEOS_CHROOT}${SKIA_CHROOT_DIR}
+# Clean up
+rm ${CHROMEOS_CHROOT}/.gclient
 
 if [ "${returnVal}" != "0" ]
 then
index d0dc5b7..ccd2d8a 100755 (executable)
@@ -12,76 +12,45 @@ SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
 # Helper function to configure the GYP defines to the appropriate values
 # based on the target device.
 setup_device() {
-  DEFINES="OS=linux"
-  DEFINES="${DEFINES} host_os=$(uname -s | sed -e 's/Linux/linux/;s/Darwin/mac/')"
-  DEFINES="${DEFINES} skia_os=chromeos"
-
-  # TODO(borenet): We have to define skia_warnings_as_errors=0 for the arm
-  # build, which throws lots of "mangling of va_list has changed" warnings.
-  DEFINES="${DEFINES} skia_warnings_as_errors=0"
-
   # Setup the build variation depending on the target device
-  TARGET_DEVICE="$1"
+  TARGET_DEVICE="${SDK_BOARD}"
 
   if [ -z "$TARGET_DEVICE" ]; then
-    echo "INFO: no target device type was specified so using the default 'x86-generic'"
-    TARGET_DEVICE="x86-generic"
+    echo "ERROR: No target device specified!"
+    return 1
   fi
 
-  # Toolchain prefixes.
-  X86_TOOLCHAIN_PREFIX="i686-pc-linux-gnu"
-  AMD64_TOOLCHAIN_PREFIX="x86_64-cros-linux-gnu"
-  ARMV7_TOOLCHAIN_PREFIX="armv7a-cros-linux-gnueabi"
+  DEFINES="OS=linux host_os=linux skia_os=chromeos"
 
   case $TARGET_DEVICE in
-    x86-generic)
+    x86-alex)
         DEFINES="${DEFINES} skia_arch_type=x86 skia_arch_width=32"
-        CHROMEOS_TOOLCHAIN_TYPE=${X86_TOOLCHAIN_PREFIX}
-        BOARD_TYPE="x86-generic"
+        GENERIC_BOARD_TYPE="x86-generic"
         ;;
-    amd64-generic)
+    link)
         DEFINES="${DEFINES} skia_arch_type=x86 skia_arch_width=64"
-        CHROMEOS_TOOLCHAIN_TYPE=${AMD64_TOOLCHAIN_PREFIX}
-        BOARD_TYPE="amd64-generic"
+        GENERIC_BOARD_TYPE="amd64-generic"
         ;;
-    arm-generic)
+    daisy)
         DEFINES="${DEFINES} skia_arch_type=arm arm_neon=1 armv7=1 arm_thumb=0 skia_arch_width=32"
-        CHROMEOS_TOOLCHAIN_TYPE=${ARMV7_TOOLCHAIN_PREFIX}
-        BOARD_TYPE="arm-generic"
+        # TODO(borenet): We have to define skia_warnings_as_errors=0 for the arm
+        # build, which throws lots of "mangling of va_list has changed" warnings.
+        DEFINES="${DEFINES} skia_warnings_as_errors=0"
+        GENERIC_BOARD_TYPE="arm-generic"
         ;;
     *)
         echo -n "ERROR: unknown device specified ($TARGET_DEVICE), valid values: "
-        echo "x86-generic amd64-generic arm-generic"
+        echo "x86-alex link daisy"
         return 1;
         ;;
   esac
 
-  DEFINES="${DEFINES} skia_cros_target=${BOARD_TYPE}"
-
-  CHROMEOS_TOOLCHAIN_PREFIX="/usr/bin/${CHROMEOS_TOOLCHAIN_TYPE}"
-  exportVar AR "$CHROMEOS_TOOLCHAIN_PREFIX-ar"
-  if [[ -z "$CHROMEOS_MAKE_CCACHE" ]]; then
-    exportVar CC "$CHROMEOS_TOOLCHAIN_PREFIX-gcc"
-    exportVar CXX "$CHROMEOS_TOOLCHAIN_PREFIX-g++"
-    exportVar LINK "$CHROMEOS_TOOLCHAIN_PREFIX-gcc"
-  else
-    exportVar CC "$CHROMEOS_MAKE_CCACHE $CHROMEOS_TOOLCHAIN_PREFIX-gcc"
-    exportVar CXX "$CHROMEOS_MAKE_CCACHE $CHROMEOS_TOOLCHAIN_PREFIX-g++"
-    exportVar LINK "$CHROMEOS_MAKE_CCACHE $CHROMEOS_TOOLCHAIN_PREFIX-gcc"
-  fi
-  exportVar RANLIB "$CHROMEOS_TOOLCHAIN_PREFIX-ranlib"
-  exportVar OBJCOPY "$CHROMEOS_TOOLCHAIN_PREFIX-objcopy"
-  exportVar STRIP "$CHROMEOS_TOOLCHAIN_PREFIX-strip"
-
   echo "The build is targeting the device: $TARGET_DEVICE"
 
-  BUILD_PREFIX="/build/${BOARD_TYPE}"
-
-  exportVar C_INCLUDE_PATH "${BUILD_PREFIX}/usr/include"
-  exportVar CPLUS_INCLUDE_PATH "${BUILD_PREFIX}/usr/include"
-  exportVar LIBRARY_PATH "${BUILD_PREFIX}/usr/lib"
-  exportVar LD_LIBRARY_PATH "${BUILD_PREFIX}/usr/lib"
-
+  exportVar GENERIC_BOARD_TYPE ${GENERIC_BOARD_TYPE}
   exportVar GYP_DEFINES "$DEFINES"
+  exportVar GYP_GENERATORS "make"
+  exportVar GYP_GENERATOR_FLAGS ""
   exportVar SKIA_OUT "out/config/chromeos-${TARGET_DEVICE}"
+  exportVar builddir_name "."
 }