servo/README.md
author Ms2ger <ms2ger@gmail.com>
Mon, 05 Jan 2015 08:09:53 -0700
changeset 382194 e15b4e7bbe846302625f8251d65bc6dcdbb03459
parent 382038 6917ac09e523923727a4ef46a3841e04f2c3c3fb
child 382251 89b858e09183f9fd5bb210c571fc63e4a21f9098
permissions -rw-r--r--
servo: Merge #4550 - Rename MouseWindowEvent variants (from Ms2ger:MouseWindowEvent); r=jdm Source-Repo: https://github.com/servo/servo Source-Revision: ca876edc051c9b105747252155d0f11c31189646

# The Servo Parallel Browser Project

Servo is a prototype web browser engine written in the
[Rust](https://github.com/mozilla/rust) language. It is currently developed on
64bit OS X, 64bit Linux, and Android.

Servo welcomes contribution from everyone.  See
[`CONTRIBUTING.md`](CONTRIBUTING.md) for help getting started.

## Prerequisites

On OS X (homebrew):

``` sh
brew install automake pkg-config python cmake
pip install virtualenv
```

On OS X (MacPorts):

``` sh
sudo port install python27 py27-virtualenv cmake
```

On Debian-based Linuxes:

``` sh
sudo apt-get install curl freeglut3-dev \
    libfreetype6-dev libgl1-mesa-dri libglib2.0-dev xorg-dev \
    msttcorefonts gperf g++ cmake python-virtualenv \
    libssl-dev libbz2-dev
```

On Fedora:

``` sh
sudo yum install curl freeglut-devel libtool gcc-c++ libXi-devel \
    freetype-devel mesa-libGL-devel glib2-devel libX11-devel libXrandr-devel gperf \
    fontconfig-devel cabextract ttmkfdir python python-virtualenv expat-devel \
    rpm-build openssl-devel cmake bzip2
pushd .
cd /tmp
wget http://corefonts.sourceforge.net/msttcorefonts-2.5-1.spec
rpmbuild -bb msttcorefonts-2.5-1.spec
sudo yum install $HOME/rpmbuild/RPMS/noarch/msttcorefonts-2.5-1.noarch.rpm
popd
```

On Arch Linux:

``` sh
sudo pacman -S base-devel git python2 python2-virtualenv mesa ttf-font cmake bzip2
```

Cross-compilation for Android:

Pre-installed Android tools are needed. See wiki for
[details](https://github.com/mozilla/servo/wiki/Building-for-Android)

## The Rust compiler

Servo uses a snapshot Rust compiler to build itself. This is normally a
specific revision of Rust upstream, but sometimes has a backported patch or
two. If you'd like to know the snapshot revision of Rust which we use, see
`./rust-snapshot-hash`.

## Building

Servo is built with Cargo, the Rust package manager. We also use Mozilla's
Mach tools to orchestrate the build and other tasks.

### Normal build

``` sh
git clone https://github.com/servo/servo
cd servo
./mach build
./mach run tests/html/about-mozilla.html
```

### Building for Android target

``` sh
git clone https://github.com/servo/servo
cd servo
ANDROID_TOOLCHAIN=/path/to/toolchain ANDROID_NDK=/path/to/ndk PATH=$PATH:/path/to/toolchain/bin ./mach build --android
cd ports/android
ANDROID_SDK=/path/to/sdk make install
```

Rather than setting the `ANDROID_*` environment variables every time, you can
also create a `.servobuild` file and then edit it to contain the correct paths
to the Android SDK/NDK tools:

```
cp servobuild.example .servobuild
# edit .servobuild
```

## Running

### Commandline Arguments

- `-p INTERVAL` turns on the profiler and dumps info to the console every
  `INTERVAL` seconds
- `-s SIZE` sets the tile size for painting; defaults to 512
- `-z` disables all graphical output; useful for running JS / layout tests

### Keyboard Shortcuts

- `Ctrl-L` opens a dialog to browse to a new URL (Mac only currently)
- `Ctrl--` zooms out
- `Ctrl-=` zooms in
- `Backspace` goes backwards in the history
- `Shift-Backspace` goes forwards in the history
- `Esc` exits servo

## Developing

There are lots of mach commands you can use. You can list them with `./mach
--help`.