bootstrap.py: respect crt-static

Bootstrap requires serde_derive, which needs proc-macro crate types, so
it won't work with crt-static.
This commit is contained in:
Johannes Nixdorf 2018-04-20 20:50:50 +02:00
parent a5a875d17b
commit 5ecf29df05
1 changed files with 30 additions and 3 deletions

View File

@ -489,7 +489,7 @@ class RustBuild(object):
""" """
return os.path.join(self.build_dir, self.build, "stage0") return os.path.join(self.build_dir, self.build, "stage0")
def get_toml(self, key): def get_toml(self, key, section=None):
"""Returns the value of the given key in config.toml, otherwise returns None """Returns the value of the given key in config.toml, otherwise returns None
>>> rb = RustBuild() >>> rb = RustBuild()
@ -501,12 +501,29 @@ class RustBuild(object):
>>> rb.get_toml("key3") is None >>> rb.get_toml("key3") is None
True True
Optionally also matches the section the key appears in
>>> rb.config_toml = '[a]\\nkey = "value1"\\n[b]\\nkey = "value2"'
>>> rb.get_toml('key', 'a')
'value1'
>>> rb.get_toml('key', 'b')
'value2'
>>> rb.get_toml('key', 'c') is None
True
""" """
cur_section = None
for line in self.config_toml.splitlines(): for line in self.config_toml.splitlines():
section_match = re.match(r'^\s*\[(.*)\]\s*$', line)
if section_match is not None:
cur_section = section_match.group(1)
match = re.match(r'^{}\s*=(.*)$'.format(key), line) match = re.match(r'^{}\s*=(.*)$'.format(key), line)
if match is not None: if match is not None:
value = match.group(1) value = match.group(1)
return self.get_string(value) or value.strip() if section is None or section == cur_section:
return self.get_string(value) or value.strip()
return None return None
def cargo(self): def cargo(self):
@ -589,7 +606,17 @@ class RustBuild(object):
env["LIBRARY_PATH"] = os.path.join(self.bin_root(), "lib") + \ env["LIBRARY_PATH"] = os.path.join(self.bin_root(), "lib") + \
(os.pathsep + env["LIBRARY_PATH"]) \ (os.pathsep + env["LIBRARY_PATH"]) \
if "LIBRARY_PATH" in env else "" if "LIBRARY_PATH" in env else ""
env["RUSTFLAGS"] = "-Cdebuginfo=2" env["RUSTFLAGS"] = "-Cdebuginfo=2 "
build_section = "target.{}".format(self.build_triple())
target_features = []
if self.get_toml("crt-static", build_section) == "true":
target_features += ["+crt-static"]
elif self.get_toml("crt-static", build_section) == "false":
target_features += ["-crt-static"]
if target_features:
env["RUSTFLAGS"] += "-C target-feature=" + (",".join(target_features)) + " "
env["PATH"] = os.path.join(self.bin_root(), "bin") + \ env["PATH"] = os.path.join(self.bin_root(), "bin") + \
os.pathsep + env["PATH"] os.pathsep + env["PATH"]
if not os.path.isfile(self.cargo()): if not os.path.isfile(self.cargo()):