diff options
author | Simon Sapin <simon.sapin@exyr.org> | 2014-09-26 15:11:20 +0100 |
---|---|---|
committer | Simon Sapin <simon.sapin@exyr.org> | 2014-09-29 17:41:45 +0100 |
commit | 04d839328bf69551c5db413fc348943760dcc95a (patch) | |
tree | 682801d6c47b7772e55973db911d7c636253e33f /python/servo/command_base.py | |
parent | 516b608a2f5d1f56f59c0b04d1a88e67883cea36 (diff) | |
download | servo-04d839328bf69551c5db413fc348943760dcc95a.tar.gz servo-04d839328bf69551c5db413fc348943760dcc95a.zip |
Have the Rust snapshot directory include the Rust version and hash.
That way, whenever rust-snapshot-hash changes, mach will look for
the Rust snapshot in a different directory and re-boostrap as needed.
However, older rust version will be left behind never cleaned up.
This is good for git-bisect, but not for disk space:
the current snapshot is 618 MB.
In the future, we may want `mach clean` or some other comment
to remove unused Rust snapshots.
CC #3388
Diffstat (limited to 'python/servo/command_base.py')
-rw-r--r-- | python/servo/command_base.py | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/python/servo/command_base.py b/python/servo/command_base.py index dd02446eb63..3a755c7e106 100644 --- a/python/servo/command_base.py +++ b/python/servo/command_base.py @@ -19,6 +19,30 @@ def cd(new_path): os.chdir(previous_path) +def host_triple(): + os_type = subprocess.check_output(["uname", "-s"]).strip().lower() + if os_type == "linux": + os_type = "unknown-linux-gnu" + elif os_type == "darwin": + os_type = "apple-darwin" + elif os_type == "android": + os_type == "linux-androideabi" + else: + os_type == "unknown" + + cpu_type = subprocess.check_output(["uname", "-m"]).strip().lower() + if cpu_type in ["i386", "i486", "i686", "i768", "x86"]: + cpu_type = "i686" + elif cpu_type in ["x86_64", "x86-64", "x64", "amd64"]: + cpu_type = "x86_64" + elif cpu_type == "arm": + cpu_type = "arm" + else: + cpu_type = "unknown" + + return "%s-%s" % (cpu_type, os_type) + + class CommandBase(object): """Base class for mach command providers. @@ -44,11 +68,20 @@ class CommandBase(object): self.config["tools"].setdefault("cargo-root", "") if not self.config["tools"]["system-rust"]: self.config["tools"]["rust-root"] = path.join( - context.topdir, "rust") + context.topdir, "rust", *self.rust_snapshot_path().split("/")) if not self.config["tools"]["system-cargo"]: self.config["tools"]["cargo-root"] = path.join( context.topdir, "cargo") + _rust_snapshot_path = None + + def rust_snapshot_path(self): + if self._rust_snapshot_path is None: + filename = path.join(self.context.topdir, "rust-snapshot-hash") + snapshot_hash = open(filename).read().strip() + self._rust_snapshot_path = "%s-%s" % (snapshot_hash, host_triple()) + return self._rust_snapshot_path + def build_env(self): """Return an extended environment dictionary.""" env = os.environ.copy() @@ -95,7 +128,7 @@ class CommandBase(object): if not self.config["tools"]["system-rust"] and \ not path.exists(path.join( - self.context.topdir, "rust", "bin", "rustc")): + self.config["tools"]["rust-root"], "bin", "rustc")): Registrar.dispatch("bootstrap-rust", context=self.context) if not self.config["tools"]["system-cargo"] and \ not path.exists(path.join( |