зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1490948: Add support for extra bindgen flags when compiling Cranelift; r=froydnj
Some build flags are being passed by the build system: they're passed in a text file called extra-bindgen-flags.in that's filled at configure time. Other flags have to be inferred from the current target/host combination, in Cranelift's build script directly. This is mostly cargo-culted from the ServoBindings.toml file, and should probably be merged in the build system at some point. Some Windows-specific adjustments were needed to provide access to libclang for bindgen support, by adding clang-cl to the plain Spidermonkey Windows builds. --HG-- extra : rebase_source : 0bda40b1d1eb38c2657593f094c951013711d00a extra : histedit_source : aad930a5f9099e299d385ae4de2deb81aed9b6d5
This commit is contained in:
Родитель
be8a563409
Коммит
2ab4b1419f
|
@ -1116,10 +1116,10 @@ def check_have_64_bit(have_64_bit, compiler_have_64_bit):
|
|||
'about the target bitness.')
|
||||
|
||||
|
||||
option(env='BINDGEN_CFLAGS',
|
||||
nargs=1,
|
||||
default=bindgen_cflags_defaults,
|
||||
help='Options bindgen should pass to the C/C++ parser')
|
||||
js_option(env='BINDGEN_CFLAGS',
|
||||
nargs=1,
|
||||
default=bindgen_cflags_defaults,
|
||||
help='Options bindgen should pass to the C/C++ parser')
|
||||
|
||||
|
||||
@depends('BINDGEN_CFLAGS')
|
||||
|
|
|
@ -1820,6 +1820,9 @@ elif test "$EARLY_BETA_OR_EARLIER"; then
|
|||
fi
|
||||
AC_SUBST(EARLY_BETA_OR_EARLIER)
|
||||
|
||||
BINDGEN_SYSTEM_FLAGS="$_BINDGEN_CFLAGS $NSPR_CFLAGS"
|
||||
AC_SUBST(BINDGEN_SYSTEM_FLAGS)
|
||||
|
||||
dnl ========================================================
|
||||
dnl JavaScript shell
|
||||
dnl ========================================================
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
@BINDGEN_SYSTEM_FLAGS@
|
|
@ -6,6 +6,8 @@
|
|||
|
||||
RustLibrary('jsrust')
|
||||
|
||||
CONFIGURE_SUBST_FILES += ['extra-bindgen-flags']
|
||||
|
||||
if CONFIG['JS_SHARED_LIBRARY']:
|
||||
FINAL_LIBRARY = 'js'
|
||||
|
||||
|
|
|
@ -22,13 +22,22 @@
|
|||
extern crate bindgen;
|
||||
|
||||
use std::env;
|
||||
use std::fs::File;
|
||||
use std::io::prelude::*;
|
||||
use std::path::PathBuf;
|
||||
|
||||
enum Arch {
|
||||
X86,
|
||||
X64,
|
||||
Arm,
|
||||
Aarch64
|
||||
}
|
||||
|
||||
fn main() {
|
||||
// Tell Cargo to regenerate the bindings if the header file changes.
|
||||
println!("cargo:rerun-if-changed=baldrapi.h");
|
||||
|
||||
let bindings = bindgen::builder()
|
||||
let mut bindings = bindgen::builder()
|
||||
.disable_name_namespacing()
|
||||
// We whitelist the Baldr C functions and get the associated types for free.
|
||||
.whitelist_function("env_.*")
|
||||
|
@ -40,8 +49,79 @@ fn main() {
|
|||
.rustified_enum("BD_.*|Trap|TypeCode|FuncTypeIdDescKind")
|
||||
.whitelist_type("BD_.*|Trap|TypeCode|FuncTypeIdDescKind")
|
||||
.header("baldrapi.h")
|
||||
.clang_args(&["-x", "c++", "-std=c++14"])
|
||||
.clang_arg("-I../..")
|
||||
.clang_args(&["-x", "c++", "-std=gnu++14", "-fno-sized-deallocation", "-DRUST_BINDGEN"])
|
||||
.clang_arg("-I../..");
|
||||
|
||||
let arch = {
|
||||
let target_arch = env::var("CARGO_CFG_TARGET_ARCH");
|
||||
match target_arch.as_ref().map(|x| x.as_str()) {
|
||||
Ok("aarch64") => Arch::Aarch64,
|
||||
Ok("arm") => Arch::Arm,
|
||||
Ok("x86") => Arch::X86,
|
||||
Ok("x86_64") => Arch::X64,
|
||||
_ => panic!("unknown arch")
|
||||
}
|
||||
};
|
||||
|
||||
match env::var("CARGO_CFG_TARGET_OS").as_ref().map(|x| x.as_str()) {
|
||||
Ok("android") => {
|
||||
bindings = bindings.clang_arg("-DOS_ANDROID=1");
|
||||
bindings = match arch {
|
||||
Arch::Aarch64 => { bindings.clang_arg("--target=aarch64-linux-android") }
|
||||
Arch::Arm => { bindings.clang_arg("--target=armv7-linux-androideabi") }
|
||||
Arch::X86 => { bindings.clang_arg("--target=i686-linux-android") }
|
||||
Arch::X64 => { bindings.clang_arg("--target=x86_64-linux-android") }
|
||||
};
|
||||
}
|
||||
Ok("linux") | Ok("freebsd") | Ok("dragonfly") | Ok("openbsd") | Ok("bitrig") | Ok("netbsd")
|
||||
| Ok("macos") | Ok("ios") => {
|
||||
// Nothing to do in particular for these OSes, until proven the contrary.
|
||||
}
|
||||
Ok("windows") => {
|
||||
bindings = bindings.clang_arg("-DOS_WIN=1")
|
||||
.clang_arg("-DWIN32=1");
|
||||
bindings = match env::var("CARGO_CFG_TARGET_ENV").as_ref().map(|x| x.as_str()) {
|
||||
Ok("msvc") => {
|
||||
bindings = bindings.clang_arg("-fms-compatibility-version=19");
|
||||
bindings = bindings.clang_arg("-D_CRT_USE_BUILTIN_OFFSETOF");
|
||||
bindings = bindings.clang_arg("-DHAVE_VISIBILITY_HIDDEN_ATTRIBUTE=1");
|
||||
match arch {
|
||||
Arch::X86 => { bindings.clang_arg("--target=i686-pc-win32") },
|
||||
Arch::X64 => { bindings.clang_arg("--target=x86_64-pc-win32") },
|
||||
Arch::Aarch64 => { bindings.clang_arg("--target=aarch64-pc-windows-msvc") }
|
||||
_ => panic!("unknown Windows architecture for msvc build")
|
||||
}
|
||||
}
|
||||
Ok("gnu") => {
|
||||
match arch {
|
||||
Arch::X86 => { bindings.clang_arg("--target=i686-pc-mingw32") },
|
||||
Arch::X64 => { bindings.clang_arg("--target=x86_64-w64-mingw32") },
|
||||
_ => panic!("unknown Windows architecture for gnu build")
|
||||
}
|
||||
}
|
||||
_ => panic!("unknown Windows build environment")
|
||||
};
|
||||
}
|
||||
os => panic!("unknown target os {:?}!", os)
|
||||
}
|
||||
|
||||
let path = PathBuf::from(env::var_os("MOZ_TOPOBJDIR").unwrap()).join("js/src/rust/extra-bindgen-flags");
|
||||
|
||||
let mut extra_flags = String::new();
|
||||
File::open(&path)
|
||||
.expect("Failed to open extra-bindgen-flags file")
|
||||
.read_to_string(&mut extra_flags)
|
||||
.expect("Failed to read extra-bindgen-flags file");
|
||||
|
||||
let display_path = path.to_str().expect("path is utf8 encoded");
|
||||
println!("cargo:rerun-if-changed={}", display_path);
|
||||
|
||||
let extra_flags: Vec<String> = extra_flags.split_whitespace().map(|s| s.to_owned()).collect();
|
||||
for flag in extra_flags {
|
||||
bindings = bindings.clang_arg(flag);
|
||||
}
|
||||
|
||||
let bindings = bindings
|
||||
.generate()
|
||||
.expect("Unable to generate baldrapi.h bindings");
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[build]
|
||||
args = [
|
||||
@BINDGEN_SYSTEM_FLAGS@
|
||||
@BINDGEN_SYSTEM_TOML_FLAGS@
|
||||
]
|
||||
|
|
|
@ -3946,7 +3946,9 @@ AC_SUBST_LIST(MOZ_CAIRO_OSLIBS)
|
|||
AC_SUBST(MOZ_TREE_PIXMAN)
|
||||
|
||||
BINDGEN_SYSTEM_FLAGS="$_BINDGEN_CFLAGS $NSPR_CFLAGS $NSS_CFLAGS $MOZ_PIXMAN_CFLAGS $MOZ_CAIRO_CFLAGS"
|
||||
AC_SUBST_TOML_LIST(BINDGEN_SYSTEM_FLAGS)
|
||||
AC_SUBST(BINDGEN_SYSTEM_FLAGS)
|
||||
BINDGEN_SYSTEM_TOML_FLAGS="$BINDGEN_SYSTEM_FLAGS"
|
||||
AC_SUBST_TOML_LIST(BINDGEN_SYSTEM_TOML_FLAGS)
|
||||
|
||||
dnl ========================================================
|
||||
dnl disable xul
|
||||
|
|
|
@ -19,6 +19,7 @@ sm-plain-win32/debug:
|
|||
run:
|
||||
spidermonkey-variant: plaindebug
|
||||
toolchains:
|
||||
- win64-clang-cl
|
||||
- win64-rust
|
||||
|
||||
sm-plain-win32/opt:
|
||||
|
@ -31,6 +32,7 @@ sm-plain-win32/opt:
|
|||
run:
|
||||
spidermonkey-variant: plain
|
||||
toolchains:
|
||||
- win64-clang-cl
|
||||
- win64-rust
|
||||
|
||||
sm-compacting-win32/debug:
|
||||
|
@ -43,4 +45,5 @@ sm-compacting-win32/debug:
|
|||
run:
|
||||
spidermonkey-variant: compacting
|
||||
toolchains:
|
||||
- win64-clang-cl
|
||||
- win64-rust
|
||||
|
|
Загрузка…
Ссылка в новой задаче