mirror of
https://github.com/denoland/rusty_v8.git
synced 2024-12-25 08:39:15 -05:00
add depot_tools to path in build.rs (#6)
This commit is contained in:
parent
7dbde4e6fb
commit
72d622bb4e
2 changed files with 41 additions and 47 deletions
12
.github/workflows/ci.yml
vendored
12
.github/workflows/ci.yml
vendored
|
@ -25,11 +25,6 @@ jobs:
|
|||
with:
|
||||
rust-version: "1.38.0"
|
||||
|
||||
- name: Install python
|
||||
uses: actions/setup-python@v1
|
||||
with:
|
||||
python-version: "2.7.16"
|
||||
|
||||
- name: Remove unused versions of Python
|
||||
# Depot_tools bootstraps its own copy of virtualenv. This fails on
|
||||
# windows when multiple versions of python are in present in PATH,
|
||||
|
@ -45,10 +40,7 @@ jobs:
|
|||
ForEach-Object { Move-Item "$_" "$_.disabled" }
|
||||
|
||||
- name: Environment (common)
|
||||
run: |
|
||||
echo ::set-env name=GH_ACTIONS::1
|
||||
echo ::set-env name=RUSTC_WRAPPER::sccache
|
||||
echo ::set-env name=DENO_BUILD_MODE::release
|
||||
run: echo ::set-env name=RUSTC_WRAPPER::sccache
|
||||
|
||||
- name: Environment (linux)
|
||||
if: startsWith(matrix.os, 'ubuntu')
|
||||
|
@ -60,7 +52,6 @@ jobs:
|
|||
curl -LO https://github.com/mozilla/sccache/releases/download/0.2.12/sccache-0.2.12-x86_64-unknown-linux-musl.tar.gz
|
||||
tar -xzvf sccache-0.2.12-x86_64-unknown-linux-musl.tar.gz
|
||||
echo ::add-path::`pwd`/sccache-0.2.12-x86_64-unknown-linux-musl/
|
||||
echo ::add-path::`pwd`/third_party/depot_tools/
|
||||
|
||||
- name: Environment (mac)
|
||||
if: startsWith(matrix.os, 'macOS')
|
||||
|
@ -68,7 +59,6 @@ jobs:
|
|||
curl -LO https://github.com/mozilla/sccache/releases/download/0.2.12/sccache-0.2.12-x86_64-apple-darwin.tar.gz
|
||||
tar -xzvf sccache-0.2.12-x86_64-apple-darwin.tar.gz
|
||||
echo ::add-path::`pwd`/sccache-0.2.12-x86_64-apple-darwin/
|
||||
echo ::add-path::`pwd`/third_party/depot_tools/
|
||||
|
||||
- name: Environment (windows)
|
||||
if: startsWith(matrix.os, 'windows')
|
||||
|
|
76
build.rs
76
build.rs
|
@ -2,14 +2,12 @@
|
|||
use cargo_gn;
|
||||
use std::env;
|
||||
use std::path::Path;
|
||||
use std::path::PathBuf;
|
||||
use std::process::Command;
|
||||
use which::which;
|
||||
|
||||
fn main() {
|
||||
if cfg!(windows) {
|
||||
init_depot_tools_windows();
|
||||
}
|
||||
init_depot_tools();
|
||||
|
||||
if !Path::new("third_party/v8/src").is_dir()
|
||||
|| env::var_os("GCLIENT_SYNC").is_some()
|
||||
{
|
||||
|
@ -50,71 +48,77 @@ fn main() {
|
|||
}
|
||||
}
|
||||
|
||||
fn init_depot_tools_windows() {
|
||||
fn init_depot_tools() {
|
||||
env::set_var("DEPOT_TOOLS_WIN_TOOLCHAIN", "0");
|
||||
env::set_var("DEPOT_TOOLS_UPDATE", "0");
|
||||
env::set_var("DEPOT_TOOLS_METRICS", "0");
|
||||
|
||||
let depot_tools = env::current_dir()
|
||||
.unwrap()
|
||||
.join("third_party")
|
||||
.join("depot_tools");
|
||||
// Bootstrap depot_tools.
|
||||
if !depot_tools.join("git.bat").is_file() {
|
||||
let status = Command::new("cmd.exe")
|
||||
.arg("/c")
|
||||
.arg("bootstrap\\win_tools.bat")
|
||||
.current_dir(&depot_tools)
|
||||
.status()
|
||||
.expect("bootstrapping depot_tools failed");
|
||||
assert!(status.success());
|
||||
}
|
||||
|
||||
// Add third_party/depot_tools and buildtools/win to PATH.
|
||||
// TODO: this should be done on all platforms.
|
||||
// TODO: buildtools/win should not be added; instead, cargo_gn should invoke
|
||||
// depot_tools/gn.bat.
|
||||
let buildtools_win =
|
||||
env::current_dir().unwrap().join("buildtools").join("win");
|
||||
|
||||
// Bootstrap depot_tools.
|
||||
let path = env::var_os("PATH").unwrap();
|
||||
let paths = vec![depot_tools, buildtools_win]
|
||||
|
||||
// "Add depot_tools to the start of your PATH (must be ahead of any installs
|
||||
// of Python)."
|
||||
// https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up
|
||||
let paths = vec![depot_tools.clone(), buildtools_win]
|
||||
.into_iter()
|
||||
.chain(env::split_paths(&path))
|
||||
.collect::<Vec<_>>();
|
||||
let path = env::join_paths(paths).unwrap();
|
||||
env::set_var("PATH", &path);
|
||||
// TODO: cargo_gn should do this.
|
||||
env::set_var("DEPOT_TOOLS_WIN_TOOLCHAIN", "0");
|
||||
}
|
||||
|
||||
fn git_submodule_update() {
|
||||
Command::new("git")
|
||||
.arg("submodule")
|
||||
.arg("update")
|
||||
.arg("--init")
|
||||
.status()
|
||||
.expect("git submodule update failed");
|
||||
env::set_var("GN", which("gn").unwrap());
|
||||
|
||||
if cfg!(windows) {
|
||||
// Bootstrap depot_tools.
|
||||
if !depot_tools.join("git.bat").is_file() {
|
||||
let status = Command::new("cmd.exe")
|
||||
.arg("/c")
|
||||
.arg("bootstrap\\win_tools.bat")
|
||||
.current_dir(&depot_tools)
|
||||
.status()
|
||||
.expect("bootstrapping depot_tools failed");
|
||||
assert!(status.success());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn gclient_sync() {
|
||||
let root = env::current_dir().unwrap();
|
||||
let third_party = root.join("third_party");
|
||||
let gclient_rel = PathBuf::from("depot_tools/gclient.py");
|
||||
let depot_tools = third_party.join("depot_tools");
|
||||
let gclient_file = third_party.join("gclient_config.py");
|
||||
assert!(gclient_file.exists());
|
||||
|
||||
if !third_party.join(&gclient_rel).exists() {
|
||||
git_submodule_update();
|
||||
let gclient = depot_tools.join(if cfg!(windows) {
|
||||
"gclient.bat"
|
||||
} else {
|
||||
"gclient"
|
||||
});
|
||||
if !gclient.is_file() {
|
||||
panic!(
|
||||
"Could not find gclient {}. Maybe run git submodule update?",
|
||||
gclient.display()
|
||||
);
|
||||
}
|
||||
|
||||
println!("Running gclient sync to download V8. This could take a while.");
|
||||
|
||||
let status = Command::new("python")
|
||||
let status = Command::new(gclient)
|
||||
.current_dir(&third_party)
|
||||
.arg(&gclient_rel)
|
||||
.arg("sync")
|
||||
.arg("--no-history")
|
||||
.arg("--shallow")
|
||||
.env("DEPOT_TOOLS_UPDATE", "0")
|
||||
.env("DEPOT_TOOLS_METRICS", "0")
|
||||
.env("GCLIENT_FILE", gclient_file)
|
||||
.env("DEPOT_TOOLS_WIN_TOOLCHAIN", "0")
|
||||
.status()
|
||||
.expect("gclient sync failed");
|
||||
assert!(status.success());
|
||||
|
|
Loading…
Reference in a new issue