]> git.lizzy.rs Git - rust.git/blob - src/librustc_llvm/lib.rs
1c48d84473921b79c98689c83b73b524e171688b
[rust.git] / src / librustc_llvm / lib.rs
1 // Copyright 2012-2015 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 #![feature(nll)]
12 #![feature(static_nobundle)]
13
14 #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
15        html_favicon_url = "https://doc.rust-lang.org/favicon.ico",
16        html_root_url = "https://doc.rust-lang.org/nightly/")]
17
18 // See librustc_cratesio_shim/Cargo.toml for a comment explaining this.
19 #[allow(unused_extern_crates)]
20 extern crate rustc_cratesio_shim;
21
22 // NOTE: This crate only exists to allow linking on mingw targets.
23
24 /// Initialize targets enabled by the build script via `cfg(llvm_component = "...")`.
25 /// NB: this function can't be moved to `rustc_codegen_llvm` because of the `cfg`s.
26 pub fn initialize_available_targets() {
27     macro_rules! init_target(
28         ($cfg:meta, $($method:ident),*) => { {
29             #[cfg($cfg)]
30             fn init() {
31                 extern {
32                     $(fn $method();)*
33                 }
34                 unsafe {
35                     $($method();)*
36                 }
37             }
38             #[cfg(not($cfg))]
39             fn init() { }
40             init();
41         } }
42     );
43     init_target!(llvm_component = "x86",
44                  LLVMInitializeX86TargetInfo,
45                  LLVMInitializeX86Target,
46                  LLVMInitializeX86TargetMC,
47                  LLVMInitializeX86AsmPrinter,
48                  LLVMInitializeX86AsmParser);
49     init_target!(llvm_component = "arm",
50                  LLVMInitializeARMTargetInfo,
51                  LLVMInitializeARMTarget,
52                  LLVMInitializeARMTargetMC,
53                  LLVMInitializeARMAsmPrinter,
54                  LLVMInitializeARMAsmParser);
55     init_target!(llvm_component = "aarch64",
56                  LLVMInitializeAArch64TargetInfo,
57                  LLVMInitializeAArch64Target,
58                  LLVMInitializeAArch64TargetMC,
59                  LLVMInitializeAArch64AsmPrinter,
60                  LLVMInitializeAArch64AsmParser);
61     init_target!(llvm_component = "amdgpu",
62                  LLVMInitializeAMDGPUTargetInfo,
63                  LLVMInitializeAMDGPUTarget,
64                  LLVMInitializeAMDGPUTargetMC,
65                  LLVMInitializeAMDGPUAsmPrinter,
66                  LLVMInitializeAMDGPUAsmParser);
67     init_target!(llvm_component = "mips",
68                  LLVMInitializeMipsTargetInfo,
69                  LLVMInitializeMipsTarget,
70                  LLVMInitializeMipsTargetMC,
71                  LLVMInitializeMipsAsmPrinter,
72                  LLVMInitializeMipsAsmParser);
73     init_target!(llvm_component = "powerpc",
74                  LLVMInitializePowerPCTargetInfo,
75                  LLVMInitializePowerPCTarget,
76                  LLVMInitializePowerPCTargetMC,
77                  LLVMInitializePowerPCAsmPrinter,
78                  LLVMInitializePowerPCAsmParser);
79     init_target!(llvm_component = "systemz",
80                  LLVMInitializeSystemZTargetInfo,
81                  LLVMInitializeSystemZTarget,
82                  LLVMInitializeSystemZTargetMC,
83                  LLVMInitializeSystemZAsmPrinter,
84                  LLVMInitializeSystemZAsmParser);
85     init_target!(llvm_component = "jsbackend",
86                  LLVMInitializeJSBackendTargetInfo,
87                  LLVMInitializeJSBackendTarget,
88                  LLVMInitializeJSBackendTargetMC);
89     init_target!(llvm_component = "msp430",
90                  LLVMInitializeMSP430TargetInfo,
91                  LLVMInitializeMSP430Target,
92                  LLVMInitializeMSP430TargetMC,
93                  LLVMInitializeMSP430AsmPrinter);
94     init_target!(llvm_component = "riscv",
95                  LLVMInitializeRISCVTargetInfo,
96                  LLVMInitializeRISCVTarget,
97                  LLVMInitializeRISCVTargetMC,
98                  LLVMInitializeRISCVAsmPrinter,
99                  LLVMInitializeRISCVAsmParser);
100     init_target!(llvm_component = "sparc",
101                  LLVMInitializeSparcTargetInfo,
102                  LLVMInitializeSparcTarget,
103                  LLVMInitializeSparcTargetMC,
104                  LLVMInitializeSparcAsmPrinter,
105                  LLVMInitializeSparcAsmParser);
106     init_target!(llvm_component = "nvptx",
107                  LLVMInitializeNVPTXTargetInfo,
108                  LLVMInitializeNVPTXTarget,
109                  LLVMInitializeNVPTXTargetMC,
110                  LLVMInitializeNVPTXAsmPrinter);
111     init_target!(llvm_component = "hexagon",
112                  LLVMInitializeHexagonTargetInfo,
113                  LLVMInitializeHexagonTarget,
114                  LLVMInitializeHexagonTargetMC,
115                  LLVMInitializeHexagonAsmPrinter,
116                  LLVMInitializeHexagonAsmParser);
117     init_target!(llvm_component = "webassembly",
118                  LLVMInitializeWebAssemblyTargetInfo,
119                  LLVMInitializeWebAssemblyTarget,
120                  LLVMInitializeWebAssemblyTargetMC,
121                  LLVMInitializeWebAssemblyAsmPrinter);
122 }