]> git.proxmox.com Git - rustc.git/blob - src/librustc_llvm/lib.rs
New upstream version 1.30.0~beta.7+dfsg1
[rustc.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 #![cfg_attr(not(stage0), 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 }