aboutsummaryrefslogtreecommitdiffstats
path: root/python/servo/command_base.py
diff options
context:
space:
mode:
authorSimon Sapin <simon.sapin@exyr.org>2017-11-27 18:02:53 +0100
committerSimon Sapin <simon.sapin@exyr.org>2018-01-10 18:05:44 +0100
commit365a139716436bed8e6a178f4539e4a3d31099c4 (patch)
tree5cf0a6c5dbd499607519258ebf1ab99ddd66406d /python/servo/command_base.py
parent6dff251e35736fa74eaab6ddbc8b6ecec08ecf48 (diff)
downloadservo-365a139716436bed8e6a178f4539e4a3d31099c4.tar.gz
servo-365a139716436bed8e6a178f4539e4a3d31099c4.zip
Use rustup.rs instead of custom bootstrap
Fixes #11361, closes #18874
Diffstat (limited to 'python/servo/command_base.py')
-rw-r--r--python/servo/command_base.py131
1 files changed, 40 insertions, 91 deletions
diff --git a/python/servo/command_base.py b/python/servo/command_base.py
index 3ff2a6eea3b..c1cab4a682c 100644
--- a/python/servo/command_base.py
+++ b/python/servo/command_base.py
@@ -138,6 +138,18 @@ def call(*args, **kwargs):
return subprocess.call(*args, shell=sys.platform == 'win32', **kwargs)
+def check_output(*args, **kwargs):
+ """Wrap `subprocess.call`, printing the command if verbose=True."""
+ verbose = kwargs.pop('verbose', False)
+ if verbose:
+ print(' '.join(args[0]))
+ if 'env' in kwargs:
+ kwargs['env'] = normalize_env(kwargs['env'])
+ # we have to use shell=True in order to get PATH handling
+ # when looking for the binary on Windows
+ return subprocess.check_output(*args, shell=sys.platform == 'win32', **kwargs)
+
+
def check_call(*args, **kwargs):
"""Wrap `subprocess.check_call`, printing the command if verbose=True.
@@ -254,10 +266,7 @@ class CommandBase(object):
context.sharedir = self.config["tools"]["cache-dir"]
- self.config["tools"].setdefault("system-rust", False)
- self.config["tools"].setdefault("system-cargo", False)
- self.config["tools"].setdefault("rust-root", "")
- self.config["tools"].setdefault("cargo-root", "")
+ self.config["tools"].setdefault("use-rustup", True)
self.config["tools"].setdefault("rustc-with-gold", get_env_bool("SERVO_RUSTC_WITH_GOLD", True))
self.config.setdefault("build", {})
@@ -276,63 +285,46 @@ class CommandBase(object):
# Set default android target
self.handle_android_target("armv7-linux-androideabi")
- self.set_cargo_root()
- self.set_use_stable_rust(False)
-
- _use_stable_rust = False
- _rust_stable_version = None
- _rust_nightly_date = None
+ self.set_use_geckolib_toolchain(False)
- def set_cargo_root(self):
- if not self.config["tools"]["system-cargo"]:
- self.config["tools"]["cargo-root"] = path.join(
- self.context.sharedir, "cargo", self.rust_nightly_date())
+ _use_geckolib_toolchain = False
+ _geckolib_toolchain = None
+ _default_toolchain = None
- def set_use_stable_rust(self, use_stable_rust=True):
- self._use_stable_rust = use_stable_rust
- if not self.config["tools"]["system-rust"]:
- self.config["tools"]["rust-root"] = path.join(
- self.context.sharedir, "rust", self.rust_path())
- if use_stable_rust:
+ def set_use_geckolib_toolchain(self, use_geckolib_toolchain=True):
+ self._use_geckolib_toolchain = use_geckolib_toolchain
+ if use_geckolib_toolchain:
# Cargo maintainer's position is that CARGO_INCREMENTAL is a nightly-only feature
# and should not be used on the stable channel.
# https://github.com/rust-lang/cargo/issues/3835
self.config["build"]["incremental"] = False
- def use_stable_rust(self):
- return self._use_stable_rust
-
- def rust_install_dir(self):
- if self._use_stable_rust:
- return self.rust_stable_version()
+ def toolchain(self):
+ if self._use_geckolib_toolchain:
+ return self.geckolib_toolchain()
else:
- return self.rust_nightly_date()
+ return self.default_toolchain()
- def rust_path(self):
- if self._use_stable_rust:
- version = self.rust_stable_version()
- else:
- version = "nightly"
-
- subdir = "rustc-%s-%s" % (version, host_triple())
- return os.path.join(self.rust_install_dir(), subdir)
-
- def rust_stable_version(self):
- if self._rust_stable_version is None:
- filename = path.join("rust-stable-version")
+ def geckolib_toolchain(self):
+ if self._geckolib_toolchain is None:
+ filename = path.join(self.context.topdir, "geckolib-rust-toolchain")
with open(filename) as f:
- self._rust_stable_version = f.read().strip()
- return self._rust_stable_version
+ self._geckolib_toolchain = f.read().strip()
+ return self._geckolib_toolchain
- def rust_nightly_date(self):
- if self._rust_nightly_date is None:
+ def default_toolchain(self):
+ if self._default_toolchain is None:
filename = path.join(self.context.topdir, "rust-toolchain")
with open(filename) as f:
- toolchain = f.read().strip()
- prefix = "nightly-"
- assert toolchain.startswith(prefix)
- self._rust_nightly_date = toolchain[len(prefix):]
- return self._rust_nightly_date
+ self._default_toolchain = f.read().strip()
+ return self._default_toolchain
+
+ def call_rustup_run(self, args, **kwargs):
+ if self.config["tools"]["use-rustup"]:
+ args = ["rustup" + BIN_SUFFIX, "run", "--install", self.toolchain()] + args
+ else:
+ args[0] += BIN_SUFFIX
+ return call(args, **kwargs)
def get_top_dir(self):
return self.context.topdir
@@ -423,29 +415,9 @@ class CommandBase(object):
# Always build harfbuzz from source
env["HARFBUZZ_SYS_NO_PKG_CONFIG"] = "true"
- if not self.config["tools"]["system-rust"] \
- or self.config["tools"]["rust-root"]:
- env["RUST_ROOT"] = self.config["tools"]["rust-root"]
- # These paths are for when rust-root points to an unpacked installer
- extra_path += [path.join(self.config["tools"]["rust-root"], "rustc", "bin")]
- extra_lib += [path.join(self.config["tools"]["rust-root"], "rustc", "lib")]
- # These paths are for when rust-root points to a rustc sysroot
- extra_path += [path.join(self.config["tools"]["rust-root"], "bin")]
- extra_lib += [path.join(self.config["tools"]["rust-root"], "lib")]
-
- if not self.config["tools"]["system-cargo"] \
- or self.config["tools"]["cargo-root"]:
- # This path is for when rust-root points to an unpacked installer
- extra_path += [
- path.join(self.config["tools"]["cargo-root"], "cargo", "bin")]
- # This path is for when rust-root points to a rustc sysroot
- extra_path += [
- path.join(self.config["tools"]["cargo-root"], "bin")]
-
if extra_path:
env["PATH"] = "%s%s%s" % (os.pathsep.join(extra_path), os.pathsep, env["PATH"])
- env["CARGO_HOME"] = self.config["tools"]["cargo-home-dir"]
if self.config["build"]["incremental"]:
env["CARGO_INCREMENTAL"] = "1"
@@ -591,33 +563,10 @@ class CommandBase(object):
target_platform = target or host_triple()
- rust_root = self.config["tools"]["rust-root"]
- rustc_path = path.join(
- rust_root, "rustc", "bin", "rustc" + BIN_SUFFIX
- )
- rustc_binary_exists = path.exists(rustc_path)
-
- base_target_path = path.join(rust_root, "rustc", "lib", "rustlib")
-
- target_path = path.join(base_target_path, target_platform)
- target_exists = path.exists(target_path)
-
# Always check if all needed MSVC dependencies are installed
if "msvc" in target_platform:
Registrar.dispatch("bootstrap", context=self.context)
- if not (self.config['tools']['system-rust'] or (rustc_binary_exists and target_exists)):
- print("Looking for rustc at %s" % (rustc_path))
- Registrar.dispatch("bootstrap-rust", context=self.context, target=filter(None, [target]),
- stable=self._use_stable_rust)
-
- cargo_path = path.join(self.config["tools"]["cargo-root"], "cargo", "bin",
- "cargo" + BIN_SUFFIX)
- cargo_binary_exists = path.exists(cargo_path)
-
- if not self.config["tools"]["system-cargo"] and not cargo_binary_exists:
- Registrar.dispatch("bootstrap-cargo", context=self.context)
-
self.context.bootstrapped = True
def ensure_clobbered(self, target_dir=None):