Using Servo as a Cargo dependency [Tuesday, 2015-08-25]
I recently decided to create my own browser, exactly fit to my needs, because the future of Firefox addons I strongly depend on is kind of uncertain.
Since I’ve also been using Rust quite heavily lately, I decided my browser would use the next-generation engine Servo.
Now, Servo uses Cargo, but the build system is also kept sane through mach, this means using Servo as a dependency from a common Rust project is not that straightforward.
The first thing that has to be done is to get the specific Rust version Servo is using, we have to do this because Servo heavily depends on Rust nightly features and other internals that may change between one commit and the other.
We’ll be using multirust to keep things sane and smooth.
> git clone --depth=1 https://github.com/servo/servo
> cd servo
> ./mach bootstrap-cargo
> ./mach bootstrap-rust
> cd .servo
> cd cargo
> mv * cargo
> tar czf cargo.tar.gz cargo
> mv cargo.tar.gz ..
> cd ..
> cd rust/*
> mv * rust
> tar czf rust.tar.gz rust
> mv rust.tar.gz ../..
> cd ../..
> multirust update servo --installer rust.tar.gz,cargo.tar.gz
Now that we have our Rust toolchain that matches the one used by Servo, add the
following dependency to your Cargo.toml
.
[dependencies.servo]
git = "https://github.com/servo/servo"
path = "components/servo"
default-features = false
This adds Servo as a dependency but it’s not enough to make it compile, you
also have to copy the Cargo.lock
in components/servo
from the Servo
repository to your project, this is because Cargo.lock
for libraries is
ignored, and Servo will likely fail to compile without the specific versions
it uses.
Now that the dependency is ready you can run cargo build
, wait a couple eons
and it will be done.
To figure out how to actually use Servo my advice is to look here and here, or read the next post when it’s ready.