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
[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
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
Now that the dependency is ready you can run
cargo build, wait a couple eons
and it will be done.