Add override_export_symbols
option to Rust target specification
This commit is contained in:
parent
7e82eda000
commit
a44e446551
@ -1050,6 +1050,10 @@ impl<'a> Linker for WasmLd<'a> {
|
||||
}
|
||||
|
||||
fn exported_symbols(tcx: TyCtxt, crate_type: CrateType) -> Vec<String> {
|
||||
if let Some(ref exports) = tcx.sess.target.target.options.override_export_symbols {
|
||||
return exports.clone()
|
||||
}
|
||||
|
||||
let mut symbols = Vec::new();
|
||||
|
||||
let export_threshold = symbol_export::crates_export_threshold(&[crate_type]);
|
||||
|
@ -683,6 +683,10 @@ pub struct TargetOptions {
|
||||
/// target features. This is `true` by default, and `false` for targets like
|
||||
/// wasm32 where the whole program either has simd or not.
|
||||
pub simd_types_indirect: bool,
|
||||
|
||||
/// If set, have the linker export exactly these symbols, instead of using
|
||||
/// the usual logic to figure this out from the crate itself.
|
||||
pub override_export_symbols: Option<Vec<String>>
|
||||
}
|
||||
|
||||
impl Default for TargetOptions {
|
||||
@ -763,6 +767,7 @@ impl Default for TargetOptions {
|
||||
emit_debug_gdb_scripts: true,
|
||||
requires_uwtable: false,
|
||||
simd_types_indirect: true,
|
||||
override_export_symbols: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -898,6 +903,14 @@ impl Target {
|
||||
)
|
||||
);
|
||||
} );
|
||||
($key_name:ident, opt_list) => ( {
|
||||
let name = (stringify!($key_name)).replace("_", "-");
|
||||
obj.find(&name[..]).map(|o| o.as_array()
|
||||
.map(|v| base.options.$key_name = Some(v.iter()
|
||||
.map(|a| a.as_string().unwrap().to_string()).collect())
|
||||
)
|
||||
);
|
||||
} );
|
||||
($key_name:ident, optional) => ( {
|
||||
let name = (stringify!($key_name)).replace("_", "-");
|
||||
if let Some(o) = obj.find(&name[..]) {
|
||||
@ -1044,6 +1057,7 @@ impl Target {
|
||||
key!(emit_debug_gdb_scripts, bool);
|
||||
key!(requires_uwtable, bool);
|
||||
key!(simd_types_indirect, bool);
|
||||
key!(override_export_symbols, opt_list);
|
||||
|
||||
if let Some(array) = obj.find("abi-blacklist").and_then(Json::as_array) {
|
||||
for name in array.iter().filter_map(|abi| abi.as_string()) {
|
||||
@ -1253,6 +1267,7 @@ impl ToJson for Target {
|
||||
target_option_val!(emit_debug_gdb_scripts);
|
||||
target_option_val!(requires_uwtable);
|
||||
target_option_val!(simd_types_indirect);
|
||||
target_option_val!(override_export_symbols);
|
||||
|
||||
if default.abi_blacklist != self.options.abi_blacklist {
|
||||
d.insert("abi-blacklist".to_string(), self.options.abi_blacklist.iter()
|
||||
|
Loading…
x
Reference in New Issue
Block a user