]>
Commit | Line | Data |
---|---|---|
cdc7bbd5 XL |
1 | //! A "bare wasm" target representing a WebAssembly output that makes zero |
2 | //! assumptions about its environment. | |
3 | //! | |
4 | //! The `wasm64-unknown-unknown` target is intended to encapsulate use cases | |
5 | //! that do not rely on any imported functionality. The binaries generated are | |
6 | //! entirely self-contained by default when using the standard library. Although | |
7 | //! the standard library is available, most of it returns an error immediately | |
8 | //! (e.g. trying to create a TCP stream or something like that). | |
9 | ||
10 | use super::wasm_base; | |
11 | use super::{LinkerFlavor, LldFlavor, Target}; | |
12 | ||
13 | pub fn target() -> Target { | |
14 | let mut options = wasm_base::options(); | |
15 | options.os = "unknown".to_string(); | |
16 | options.linker_flavor = LinkerFlavor::Lld(LldFlavor::Wasm); | |
17 | let clang_args = options.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap(); | |
18 | ||
19 | // Make sure clang uses LLD as its linker and is configured appropriately | |
20 | // otherwise | |
21 | clang_args.push("--target=wasm64-unknown-unknown".to_string()); | |
22 | ||
23 | // For now this target just never has an entry symbol no matter the output | |
24 | // type, so unconditionally pass this. | |
25 | clang_args.push("-Wl,--no-entry".to_string()); | |
3c0e092e XL |
26 | |
27 | let lld_args = options.pre_link_args.get_mut(&LinkerFlavor::Lld(LldFlavor::Wasm)).unwrap(); | |
28 | lld_args.push("--no-entry".to_string()); | |
29 | lld_args.push("-mwasm64".to_string()); | |
30 | ||
31 | // Any engine that implements wasm64 will surely implement the rest of these | |
32 | // features since they were all merged into the official spec by the time | |
33 | // wasm64 was designed. | |
34 | options.features = "+bulk-memory,+mutable-globals,+sign-ext,+nontrapping-fptoint".to_string(); | |
cdc7bbd5 XL |
35 | |
36 | Target { | |
37 | llvm_target: "wasm64-unknown-unknown".to_string(), | |
38 | pointer_width: 64, | |
94222f64 | 39 | data_layout: "e-m:e-p:64:64-i64:64-n32:64-S128-ni:1:10:20".to_string(), |
cdc7bbd5 XL |
40 | arch: "wasm64".to_string(), |
41 | options, | |
42 | } | |
43 | } |