mirror of
https://github.com/servo/servo.git
synced 2025-08-04 21:20:23 +01:00
Read bindgen flags from a generated file.
Bindgen needs some build-specific flags, like the -isysroot passed to clang for the C++ compilation. Try to read these from $objdir/layout/style/bindgen.toml which is created by the Firefox build system, and merge them into the config. See also [Gecko bug 1368083](https://bugzilla.mozilla.org/show_bug.cgi?id=1368083).
This commit is contained in:
parent
1425ad1bab
commit
8db2775ba6
1 changed files with 36 additions and 21 deletions
|
@ -61,31 +61,44 @@ mod bindings {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn read_config(path: &PathBuf) -> toml::Table {
|
||||||
|
println!("cargo:rerun-if-changed={}", path.to_str().unwrap());
|
||||||
|
update_last_modified(&path);
|
||||||
|
|
||||||
|
let mut contents = String::new();
|
||||||
|
File::open(path).expect("Failed to open config file")
|
||||||
|
.read_to_string(&mut contents).expect("Failed to read config file");
|
||||||
|
let mut parser = toml::Parser::new(&contents);
|
||||||
|
if let Some(result) = parser.parse() {
|
||||||
|
result
|
||||||
|
} else {
|
||||||
|
use std::fmt::Write;
|
||||||
|
let mut reason = String::from("Failed to parse config file:");
|
||||||
|
for err in parser.errors.iter() {
|
||||||
|
let parsed = &contents[..err.lo];
|
||||||
|
write!(&mut reason, "\n* line {} column {}: {}",
|
||||||
|
parsed.lines().count(),
|
||||||
|
parsed.lines().last().map_or(0, |l| l.len()),
|
||||||
|
err).unwrap();
|
||||||
|
}
|
||||||
|
panic!(reason)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
static ref CONFIG: toml::Table = {
|
static ref CONFIG: toml::Table = {
|
||||||
|
// Load Gecko's binding generator config from the source tree.
|
||||||
let path = PathBuf::from(env::var("MOZ_SRC").unwrap())
|
let path = PathBuf::from(env::var("MOZ_SRC").unwrap())
|
||||||
.join("layout/style/ServoBindings.toml");
|
.join("layout/style/ServoBindings.toml");
|
||||||
println!("cargo:rerun-if-changed={}", path.to_str().unwrap());
|
read_config(&path)
|
||||||
update_last_modified(&path);
|
};
|
||||||
|
static ref BUILD_CONFIG: toml::Table = {
|
||||||
let mut contents = String::new();
|
// Load build-specific config overrides.
|
||||||
File::open(path).expect("Failed to open config file")
|
// FIXME: We should merge with CONFIG above instead of
|
||||||
.read_to_string(&mut contents).expect("Failed to read config file");
|
// forcing callers to do it.
|
||||||
let mut parser = toml::Parser::new(&contents);
|
let path = PathBuf::from(env::var("MOZ_TOPOBJDIR").unwrap())
|
||||||
if let Some(result) = parser.parse() {
|
.join("layout/style/bindgen.toml");
|
||||||
result
|
read_config(&path)
|
||||||
} else {
|
|
||||||
use std::fmt::Write;
|
|
||||||
let mut reason = String::from("Failed to parse config file:");
|
|
||||||
for err in parser.errors.iter() {
|
|
||||||
let parsed = &contents[..err.lo];
|
|
||||||
write!(&mut reason, "\n* line {} column {}: {}",
|
|
||||||
parsed.lines().count(),
|
|
||||||
parsed.lines().last().map_or(0, |l| l.len()),
|
|
||||||
err).unwrap();
|
|
||||||
}
|
|
||||||
panic!(reason)
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
static ref TARGET_INFO: HashMap<String, String> = {
|
static ref TARGET_INFO: HashMap<String, String> = {
|
||||||
const TARGET_PREFIX: &'static str = "CARGO_CFG_TARGET_";
|
const TARGET_PREFIX: &'static str = "CARGO_CFG_TARGET_";
|
||||||
|
@ -213,6 +226,8 @@ mod bindings {
|
||||||
let mut matched_os = false;
|
let mut matched_os = false;
|
||||||
let build_config = CONFIG["build"].as_table().expect("Malformed config file");
|
let build_config = CONFIG["build"].as_table().expect("Malformed config file");
|
||||||
builder = add_clang_args(builder, build_config, &mut matched_os);
|
builder = add_clang_args(builder, build_config, &mut matched_os);
|
||||||
|
let build_config = BUILD_CONFIG["build"].as_table().expect("Malformed config file");
|
||||||
|
builder = add_clang_args(builder, build_config, &mut matched_os);
|
||||||
if !matched_os {
|
if !matched_os {
|
||||||
panic!("Unknown platform");
|
panic!("Unknown platform");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue