GYP tools

GYP tools provide an OS independent way to create a build structure. For example "make files" on Linux. For details see:


Build bot

There is a build bot that constantly builds Chromium for different architectures


For ARM:


For details see


Setup development environment

I used toolchain from http://people.canonical.com/~hrw/ubuntu-maverick-armel-cross-compilers/README

TODO: describe setting chroot on ARM board

Get the source



$ svn co http://src.chromium.org/svn/trunk/tools/depot_tools
$ export PATH=`pwd`/depot_tools:"$PATH"
# Pick a directory for your build.  We will call this directory $CHROMIUM_ROOT below.
# Check out Chromium:
$ gclient config http://src.chromium.org/svn/trunk/src
$ gclient sync

look at the wiki pages mentioned above if you want to install particular revision


Most likely Ubuntu 10.10 will allow you to have cross packages installed using xdeb, etc In the meen time I installed the necessary packages into ARM board and copied necessary files into rootfs/{lib,usr/lib,usr/include}

rootfs is passed to GYP tools and used in generated Makefiles as a source of includes and libs. It is based on support for -sysroot in GNU cross toolchain.

On the ARM board:

sudo apt-get install symlinks
symlinks -cr /usr/lib

On PC:

(PATH is a path to chroot on the ARM board or empty if everything was done in the nonchroot environment)

rsync -avrl logname@IP:PATH/{usr/include,usr/lib} rootfs/usr/
rsync -avrl logname@IP:PATH/lib rootfs/

if in doubt add -n option to rsync command for a dry run

Run Build

cp xbuild-chromium.sh $CHROMIUM_ROOT/src

Build Scripts


#set -x
pushd ../../rootfs
export INCLUDE_DIR=$ROOTFS/usr/include

#Disabled ffmpeg because of yasm problems
#TODO enable them again when finish debugging
export GYP_DEFINES="release_optimize=1 build_ffmpegsumo=0 werror= target_arch=$ARCH sysroot=$ROOTFS disable_nacl=1 linux_use_tcmalloc=0 armv7=1 arm_neon=0 arm_thumb=1 arm_fpu=vfpv3-d16"
#export GYP_DEFINES="werror= target_arch=$ARCH sysroot=$ROOTFS disable_nacl=1 linux_use_tcmalloc=0 armv7=1 arm_neon=0 arm_thumb=1 arm_fpu=vfpv3-d16"
export CROSSTOOL=/usr/bin/arm-linux-gnueabi
export CXX=$CROSSTOOL-g++
export CXXFLAGS="--sysroot=$ROOTFS -idirafter $INCLUDE_DIR"

#idirafter is used becuse nss.h is taken from /usr/include instead of mozilla/security/nss/lib/nss/nss.h
export CFLAGS=" --sysroot=$ROOTFS -idirafter $INCLUDE_DIR"

export CC=$CROSSTOOL-gcc
export AR=$CROSSTOOL-ar
export AS=$CROSSTOOL-as
export RANLIB=$CROSSTOOL-ranlib
export LINKER_OPTS="--sysroot=$ROOTFS"

./build/gyp_chromium -f make

#TODO: generate options of that config from GYP_DEFINES

pushd third_party/ffmpeg/patched-ffmpeg-mt
./configure --disable-ffmpeg --disable-ffplay --disable-ffserver --disable-ffprobe --enable-shared --disable-static --disable-debug --disable-network --disable-encoders --disable-decoders --disable-hwaccels --disable-muxers --disable-demuxers --disable-parsers --disable-bsfs --disable-protocols --disable-devices --disable-filters --disable-gpl --disable-bzlib --disable-zlib --enable-decoder=theora --enable-decoder=vorbis --enable-demuxer=ogg --enable-pthreads --enable-cross-compile --arch=arm --target-os=linux --enable-armvfp --disable-neon --cross-prefix=${CROSSTOOL}- --extra-cflags='-march=armv7-a -mtune=cortex-a8 -mfpu=vfpv3-d16 -mfloat-abi=softfp' --prefix=./chromium-ffmpeg --disable-armv6 --disable-armv6t2  --enable-decoder=vp8 --enable-pic
mv config.h ../config/Chromium/linux/$ARCH

time make -r -j2 BUILDTYPE=Release V=1 chrome 2>&1| tee chromium.log

V=1 cause build to print commands

release_optimize=1 in GYP_DEFINES is a work around. See http://code.google.com/p/chromium/issues/detail?id=38957


dev_list="apache2 bison fakeroot flex g++ gperf libapache2-mod-php5
          libasound2-dev libbz2-dev libcairo2-dev libdbus-glib-1-dev
          libgconf2-dev libgl1-mesa-dev libglu1-mesa-dev libglib2.0-dev
          libgnome-keyring-dev libgtk2.0-dev libjpeg62-dev libnspr4-dev
          libnss3-dev libpam0g-dev libsqlite3-dev libxslt1-dev libxss-dev
          lighttpd mesa-common-dev  patch perl php5-cgi pkg-config
          python python-dev rpm subversion ttf-dejavu-core ttf-kochi-gothic
          ttf-kochi-mincho wdiff libcurl4-gnutls-dev"
if egrep -q 'Ubuntu (8\.04|8\.10)' /etc/issue; then
  dev_list="${dev_list} libcupsys2-dev"
  dev_list="${dev_list} libcups2-dev"
#sudo apt-get update

# We initially run "apt-get" with the --reinstall option and parse its output.
# This way, we can find all the packages that need to be newly installed
# without accidentally promoting any packages from "auto" to "manual".
# We then re-run "apt-get" with just the list of missing packages.
echo "Finding missing packages..."
# Intentially leaving $packages unquoted so it's more readable.
echo "Packages required: " $packages
new_list_cmd="sudo apt-get install --reinstall $(echo $packages)"
$(echo $new_list_cmd)


For a sanity check you can do a native build and try procedures described below on PC to understand what to expect.

from: http://code.google.com/p/chromium/issues/detail?id=38957#makechanges

Comment 14 by piman@chromium.org, Today (2 hours ago)

Some suggestions, trace the data path:

  • check if test_shell works or not (you can build it with make test_shell). If it doesn't it's likely the bug is in WebKit and/or Skia.

  • If it does, then debug chrome (the renderer process - find the PID from the process manager), check whether the renderer painted correctly. You'll want to check in chrome/renderer/render_widget.cc all the users of PaintRect (mostly DoDeferredUpdate) to see if the contents looks right.

  • If that looked right, then debug the browser process, check in chrome/browser/renderer_host/backing_store_x.cc if PaintToBackingStore gets the right data and if it paints the backing store correctly.

  • If that was right too, then debug the XShowRect/CairoShowRect/PaintToRect functions in the same file, that copies from the backing store to the window.

Some details how to do it:



  • building test_shell
  • running tests

Debugging Chromium



Resources/HowTo/CrossBuildingChromiumBrowser (last modified 2011-04-12 21:29:51)