使用本地 Glean 构建进行开发

FOG 使用 Glean 的发布版本,该版本发布在 crates.io 上。

对于本地开发和尝试运行,您可以用本地或远程版本替换此 Glean 实现。

  1. 要告诉 mach 在哪里找到您的 Glean,请修补顶级 Cargo.toml 以指向您的 Glean 分支。

    [patch.crates-io]
    glean = { git = "https://github.com/myfork/glean", branch = "my-feature-branch" }
    glean-core = { git = "https://github.com/myfork/glean", branch = "my-feature-branch" }
    

    需要指定这两个板条箱以确保它们同步。

    您可以通过 branchtagrev (Git 提交) 指定要使用的确切代码。有关详细信息,请参阅 cargo 文档

    您还可以使用路径依赖项,用于真正的本地 Glean。

    [patch.crates-io]
    glean = { path = "../glean/glean-core/rlb" }
    glean-core = { path = "../glean/glean-core" }
    
  2. 如果修补的存储库中 Glean SDK 的版本与 mozilla-central 内的工作区所需的版本不 semver-兼容,则此时尝试更新 Cargo lockfile 将导致类似以下错误:

    warning: Patch `glean vMM.m.p (/path/to/glean/glean-core/rlb)` was not used in the crate graph.
    

    在这种情况下,将 Cargo.tomlgfx/wr/Cargo.toml 中的 glean 板条箱版本更改为与您的 glean 存储库中的版本匹配。

    glean = "=MM.m.p"
    
  3. 更新根工作区的 Cargo lockfile。

    cargo update -p glean
    

    (您可能会认为,如果您必须在步骤 2 中更改 gfx/wr/Cargo.toml,则您也必须在 gfx/wr 中执行 cargo update,但您错了。它不是必需的,如果您尝试这样做,它只会因 crates.io 不知道您本地版本的 Glean 而报错。)

  4. Mozilla 的供应链管理策略要求对第三方软件(包括 Glean SDK,因为它被分发为第三方软件)进行审核并认证其安全。您的本地 Glean SDK 并非来自经过审查的来源。如果您现在尝试引入,./mach vendor rust 可能会报错类似以下内容:

    Vet error: There are some issues with your policy.audit-as-crates-io entries
    

    为了允许您的本地 Glean 板条箱被视为来自 crates.io 的板条箱以进行审查,请在 supply-chain/config.toml 的顶部添加以下部分。

    [policy.glean]
    audit-as-crates-io = true
    
    [policy.glean-core]
    audit-as-crates-io = true
    

    **注意:**不要尝试检入这些更改。@supply-chain-reviewers 可能会因为您 r- 了补丁而感到恼火。

  5. 引入更改的板条箱。

    ./mach vendor rust
    

    **注意:**如果您使用的是路径依赖项,mach vendor rust 实际上不会更改文件。相反,它会直接从您指定的磁盘位置提取文件。

  6. 最后,构建 Firefox。

    ./mach build
    

远程 git 引用也适用于尝试运行,但 path 依赖项则不行。

请确保您没有引入 Glean 的非发布版本。