]> git.lizzy.rs Git - rust.git/blob - compiler/rustc_target/src/spec/wasm32_unknown_emscripten.rs
Remove ERROR_ON_UNDEFINED_SYMBOLS according to sbc100's comments
[rust.git] / compiler / rustc_target / src / spec / wasm32_unknown_emscripten.rs
1 use super::{cvs, wasm_base};
2 use super::{LinkArgs, LinkerFlavor, PanicStrategy, Target, TargetOptions};
3
4 pub fn target() -> Target {
5     let mut options = wasm_base::options();
6
7     let clang_args = options.pre_link_args.entry(LinkerFlavor::Gcc).or_default();
8
9     // Rust really needs a way for users to specify exports and imports in
10     // the source code. --export-dynamic isn't the right tool for this job,
11     // however it does have the side effect of automatically exporting a lot
12     // of symbols, which approximates what people want when compiling for
13     // wasm32-unknown-unknown expect, so use it for now.
14     clang_args.push("--export-dynamic".into());
15
16     let mut post_link_args = LinkArgs::new();
17     post_link_args.insert(
18         LinkerFlavor::Em,
19         vec![
20             "-s".into(),
21             "ABORTING_MALLOC=0".into(),
22             "-Wl,--fatal-warnings".into(),
23         ],
24     );
25
26     let opts = TargetOptions {
27         os: "emscripten".into(),
28         linker_flavor: LinkerFlavor::Em,
29         // emcc emits two files - a .js file to instantiate the wasm and supply platform
30         // functionality, and a .wasm file.
31         exe_suffix: ".js".into(),
32         linker: None,
33         is_like_emscripten: true,
34         panic_strategy: PanicStrategy::Unwind,
35         post_link_args,
36         families: cvs!["unix", "wasm"],
37         ..options
38     };
39     Target {
40         llvm_target: "wasm32-unknown-emscripten".into(),
41         pointer_width: 32,
42         data_layout: "e-m:e-p:32:32-p10:8:8-p20:8:8-i64:64-f128:64-n32:64-S128-ni:1:10:20".into(),
43         arch: "wasm32".into(),
44         options: opts,
45     }
46 }