# 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
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
# 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 "."
}