servo - Servo 是一个用 Rust语言编写的原型 Web 浏览器引擎。它目前在 64 位 macOS、64 位 Linux、64 位 Windows 和 Android 上开发。

Created at: 2012-02-09 03:07:25
Language:
License: MPL-2.0

伺服并行浏览器引擎项目

Servo 是一个用 Rust 语言编写的原型 Web 浏览器引擎。它目前在64位macOS,64位Linux,64位Windows和Android上开发。

伺服欢迎大家的贡献。请参阅 CONTRIBUTING.mdHACKING_QUICKSTART.md 以获取入门帮助。

访问伺服项目页面以获取新闻和指南。

设置你的环境

Rustup.rs

构建伺服需要 rustup,版本 1.8.0 或更高版本。如果你使用的是旧版本,请运行 。

rustup self update

要在 Windows 上安装,请下载并运行 rustup-init.exe然后按照屏幕上的说明操作。

要在其他系统上安装,请运行:

curl https://sh.rustup.rs -sSf | sh

这也将下载当前稳定版本的 Rust,Servo 不会使用它。要跳过该步骤,请改为运行:

curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain none

参见 其他安装方法

其他依赖项

请选择你的操作系统:

苹果操作系统

建议使用 Xcode 版本 10.2 或更高版本。

在macOS上(基于英特尔或基于ARM)(自制软件)

注意:在本地克隆项目后运行这些步骤。

cd servo 
brew bundle install --file=etc/taskcluster/macos/Brewfile
brew bundle install --file=etc/taskcluster/macos/Brewfile-build
pip install virtualenv

在基于 Debian 的发行版上

sudo apt install python3-virtualenv python3-pip
./mach bootstrap

如果不起作用,请提交错误,然后运行以下命令:

./mach bootstrap

sudo apt install git curl autoconf libx11-dev libfreetype6-dev libgl1-mesa-dri \
    libglib2.0-dev xorg-dev gperf g++ build-essential cmake libssl-dev \
    liblzma-dev libxmu6 libxmu-dev \
    libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev \
    libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libharfbuzz-dev ccache \
    clang libunwind-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
    libgstreamer-plugins-bad1.0-dev autoconf2.13 llvm-dev

此外,还需要版本高于 16.2 的 GStreamer 的本地副本。你可以将其放在 中,也可以运行以对其进行设置。在 Ubuntu 20.04LTS 上,如果你安装了必要的软件包,则可以使用系统 GStreamer:

support/linux/gstreamer/gst
./mach bootstrap-gstreamer

sudo apt install gstreamer1.0-nice gstreamer1.0-plugins-bad

如果你使用的是 Ubuntu 16.04Linux Mint 18,请在构建之前运行以避免 harfbuzz 错误。

export HARFBUZZ_SYS_NO_PKG_CONFIG=1

如果你在尝试删除和所有旧版本的 clang 时收到未定义的符号错误,请参阅 #22016

gst_player_get_config
gir1.2-gst-plugins-bad-1.0

在费多拉

sudo dnf install python3 python3-virtualenv python3-pip python3-devel
python3 ./mach bootstrap

如果不起作用,请提交错误,然后运行以下命令:

python3 ./mach bootstrap

sudo dnf install curl libtool gcc-c++ libXi-devel libunwind-devel \
    freetype-devel mesa-libGL-devel mesa-libEGL-devel glib2-devel libX11-devel \
    libXrandr-devel gperf fontconfig-devel cabextract ttmkfdir  expat-devel \
    rpm-build openssl-devel cmake libX11-devel libXcursor-devel \
    libXmu-devel dbus-devel ncurses-devel harfbuzz-devel \
    ccache clang clang-libs python3-devel gstreamer1-devel \
    gstreamer1-plugins-base-devel gstreamer1-plugins-bad-free-devel autoconf213 \
    libjpeg-turbo-devel zlib libjpeg

在 CentOS 上

sudo yum install python-virtualenv python-pip
./mach bootstrap

如果不起作用,请提交错误,然后运行以下命令:

./mach bootstrap

sudo yum install curl libtool gcc-c++ libXi-devel freetype-devel \
    mesa-libGL-devel mesa-libEGL-devel glib2-devel libX11-devel libXrandr-devel \
    gperf fontconfig-devel cabextract ttmkfdir python expat-devel rpm-build \
    openssl-devel cmake3 libXcursor-devel libXmu-devel \
    dbus-devel ncurses-devel python34 harfbuzz-devel \
    ccache clang clang-libs llvm-toolset-7

内置内部和:

llvm-toolset
devtoolset

scl enable devtoolset-7 llvm-toolset-7 bash

设置了以下环境变量:

export CMAKE=cmake3
export LIBCLANG_PATH=/opt/rh/llvm-toolset-7/root/usr/lib64

在开放SUSE上

sudo zypper install libX11-devel libexpat-devel Mesa-libEGL-devel Mesa-libGL-devel cabextract cmake \
    dbus-1-devel fontconfig-devel freetype-devel gcc-c++ git glib2-devel gperf \
    harfbuzz-devel libXcursor-devel libXi-devel libXmu-devel libXrandr-devel libopenssl-devel \
    python3-pip python3-virtualenv rpm-build ccache llvm-clang libclang autoconf213 gstreamer-devel \
    gstreamer-plugins-base-devel gstreamer-plugins-bad-devel

在 Arch Linux 上

sudo pacman -S --needed base-devel git python python-virtualenv python-pip mesa cmake libxmu \
    pkg-config ttf-fira-sans harfbuzz ccache llvm clang autoconf2.13 gstreamer gstreamer-vaapi \
    gst-plugins-base gst-plugins-good gst-plugins-bad

在Gentoo Linux上

sudo emerge net-misc/curl \
    media-libs/freetype media-libs/mesa dev-util/gperf \
    dev-python/virtualenv dev-python/pip dev-libs/openssl \
    media-libs/harfbuzz dev-util/ccache sys-libs/libunwind \
    x11-libs/libXmu x11-base/xorg-server sys-devel/clang \
    media-libs/gstreamer media-libs/gst-plugins-bad media-libs/gst-plugins-base

设置了以下环境变量:

export LIBCLANG_PATH=$(llvm-config --prefix)/lib64

在 NixOS Linux 上

nix-shell etc/shell.nix

在运行 mach 之前,你需要在每个 shell 中运行它。

在视窗上 (MSVC)

  1. 安装 Python 3.9 for Windows (https://www.python.org/downloads/release/python-392/)。Windows x86-64 MSI安装程序很好。这是构建JavaScript引擎SpiderMonkey所必需的。

你还需要通过执行以下操作将环境变量设置为“C:\Python39\python.exe”:

PYTHON3

setx PYTHON3 "C:\Python39\python.exe" /m

这将在系统范围内为所有未来的命令窗口设置它。

/m

  1. 安装虚拟环境。

在普通的 Windows Shell (cmd) 中,执行以下操作:

pip install virtualenv

如果这不起作用,你可能需要重新启动才能使更改的 PATH 设置(通过 python 安装程序)生效。

  1. 安装最新的 GStreamer MSVC 软件包。你需要从 GStreamer 网站下载适用于你平台的两个文件并安装它们。当前推荐的版本是 1.16.0。即:
    .msi

请注意,MinGW 二进制文件将不起作用,因此请确保安装 MSVC 二进制文件。

请注意,你应该确保所有组件都是从 gstreamer 安装的,因为我们需要许多默认情况下未安装的可选库。

  1. 安装 Git for Windows (https://git-scm.com/download/win)。确实允许它将 git.exe 添加到 PATH 中(安装程序的默认设置很好)。

  2. 安装 Visual Studio Build Tools 2019 (https://visualstudio.microsoft.com/de/downloads/#build-tools-for-visual-studio-2019)。通过巧克力安装最容易:

choco install -y visualstudio2019buildtools --package-parameters="--add Microsoft.VisualStudio.Component.Roslyn.Compiler --add Microsoft.Component.MSBuild --add Microsoft.VisualStudio.Component.CoreBuildTools --add Microsoft.VisualStudio.Workload.MSBuildTools --add Microsoft.VisualStudio.Component.Windows10SDK --add Microsoft.VisualStudio.Component.VC.CoreBuildTools --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 --add Microsoft.VisualStudio.Component.VC.Redist.14.Latest --add Microsoft.VisualStudio.Component.VC.ATL --add Microsoft.VisualStudio.Component.VC.ATLMFC --add Microsoft.VisualStudio.Component.TextTemplating --add Microsoft.VisualStudio.Component.VC.CoreIde --add Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core --add Microsoft.VisualStudio.Workload.VCTools"

如果你确实需要使用Visual Studio Installer(UI),请选择“使用C++进行桌面开发”并添加可选的“MSVC”,“C++-ATL”和“C++-MFC”(最新)。

Visual Studio 2019 Build Tools 必须安装到默认位置,否则 mach.bat 将找不到它们。

[可选]安装 LLVM 以缩短链接时间

通过执行以下步骤,你可能会在 Windows 上体验更快的构建速度。(相关锈问题:https://github.com/rust-lang/rust/issues/37543)

  1. 下载最新版本的 LLVM (https://releases.llvm.org/)。
  2. 运行安装程序并选择将 LLVM 添加到系统路径。
  3. 将以下内容添加到你的货物配置中(可在 中找到)。你可能需要更改三元组以匹配你的环境。
    %USERPROFILE%\.cargo\config
[target.x86_64-pc-windows-msvc]
linker = "lld-link.exe"
对 Windows 环境进行疑难解答

如果你在使用默认设置的提示时遇到问题:

x64 type
mach.bat

  1. 你可能需要手动选择并启动类型,例如在 Windows 菜单中。
    x86_x64 Cross Tools Command Prompt for VS 2019
  2. cd to/the/path/servo
  3. python mach build -d

如果你收到错误:

Cannot run mach in a path on a case-sensitive file system on Windows

  1. 以管理员身份打开命令提示符或PowerShell。
  2. 禁用伺服路径区分大小写,
    fsutil.exe file SetCaseSensitiveInfo X:\path\to\servo disable

如果收到错误 api-ms-win-crt-runtime-l1-1-0.dll则将环境变量设置为包含 的适当目录,例如 。

DLL file 
 not found!
WindowsSdkDir
Windows Kit
Redist\ucrt\DLLs\x64\api-ms-win-crt-runtime-l1-1-0.dll
C:\Program Files (x86)\Windows Kits\10

如果收到错误LIBCLANG_PATH则可能安装了 32 位默认目标,而不是 64 位目标。你可以使用 找到配置,并使用 设置默认值。

thread 'main' panicked at 'Unable to find libclang: "couldn\'t find any valid shared libraries matching: [\'clang.dll\', \'libclang.dll\'], set the 
 environment variable to a path where one of these files can be found (invalid: ... invalid DLL (64-bit))])"'
rustup
rustup show
rustup set default-host x86_64-pc-windows-msvc

安卓交叉编译

运行以获取特定于 Android 的工具。有关详细信息,请参阅维基。

./mach bootstrap-android --build

克隆存储库

你的CARGO_HOME需要指向(或位于)与伺服存储库相同的驱动器中(请参阅#28530)。

git clone https://github.com/servo/servo
cd servo

建筑

Servo 是用 Rust 包管理器 Cargo 构建的。我们还使用 Mozilla 的 Mach 工具来编排构建和其他任务。你可以这样称呼马赫:

在 Unix 系统上:

./mach [command] [arguments]

在 Windows 命令行上:

mach.bat [command] [arguments]

下面的例子将使用Unix,但同样适用于Windows。

Rust 编译器

Servo 的构建系统使用 rustup.rs 自动下载 Rust 编译器。这是由 rust 工具链文件确定的 Rust Nightly 的特定版本。

正常构建

在开发模式下构建伺服。这对于开发很有用,但生成的二进制文件非常慢:

./mach build --dev
./mach run tests/html/about-mozilla.html

发布版本

用于基准测试、性能测试或实际使用。添加标志以创建优化版本:

--release

./mach build --release
./mach run --release tests/html/about-mozilla.html

注意:将同时构建和 .为了使编译速度更快一些,可以只编译伺服二进制文件:。

mach build 
servo
libsimpleservo
./mach build --dev -p servo

检查构建错误,而无需构建

如果你要对一个 crate 进行更改,导致另一个 crate 中的构建错误,请考虑以下情况而不是完整构建:

./mach check

它将运行 ,运行编译器的分析阶段(因此显示构建错误(如果有),但跳过代码生成阶段。这可能比完整构建快得多,尽管当然它不会生成你可以运行的二进制文件。

cargo check

构建安卓目标

对于 ARM(大多数手机):

armv7-linux-androideabi

./mach build --release --android
./mach package --release --android

对于 x86(通常用于模拟器):

./mach build --release --target i686-linux-android
./mach package --release --target i686-linux-android

运行

使用以下命令运行伺服:

./servo [url] [arguments] # if you run with nightly build
./mach run [url] [arguments] # if you run with mach

# For example
./mach run https://www.google.com

命令行参数

  • -p INTERVAL
    打开探查器并每秒将信息转储到控制台
    INTERVAL
  • -s SIZE
    设置用于绘画的拼贴大小;默认值为 512
  • -z
    禁用所有图形输出;对于运行JS/布局测试很有用
  • -Z help
    显示有用的输出以调试伺服

键盘快捷键

  • Ctrl
    +
    L
    打开网址提示符(+在 Mac 上)
    Cmd
    L
  • Ctrl
    +
    R
    重新加载当前页面(在 Mac 上为 +)
    Cmd
    R
  • Ctrl
    +
    -
    缩小(在 Mac 上为 +)
    Cmd
    -
  • Ctrl
    +
    =
    放大 (在 Mac 上为 +)
    Cmd
    =
  • Alt
    +
    left arrow
    在历史记录中倒退(+在Mac上)
    Cmd
    left arrow
  • Alt
    +
    right arrow
    在历史记录中前进(+在Mac上)
    Cmd
    right arrow
  • Esc
    或 + 退出伺服(在 Mac 上为 +)
    Ctrl
    Q
    Cmd
    Q

运行时依赖关系

Linux目录

  • GStreamer
    >=1.16
  • gst-plugins-bad
    >=1.16

发展

你可以使用很多 mach 命令。你可以使用 列出它们。

./mach --help

生成的文档可以在 https://doc.servo.org/servo/index.html