]> git.lizzy.rs Git - rust.git/blob - compiler/rustc_llvm/src/lib.rs
Rollup merge of #97249 - GuillaumeGomez:details-summary-fixes, r=notriddle
[rust.git] / compiler / rustc_llvm / src / lib.rs
1 #![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")]
2
3 // NOTE: This crate only exists to allow linking on mingw targets.
4
5 use libc::{c_char, size_t};
6 use std::cell::RefCell;
7 use std::slice;
8
9 #[repr(C)]
10 pub struct RustString {
11     pub bytes: RefCell<Vec<u8>>,
12 }
13
14 impl RustString {
15     pub fn len(&self) -> usize {
16         self.bytes.borrow().len()
17     }
18
19     pub fn is_empty(&self) -> bool {
20         self.bytes.borrow().is_empty()
21     }
22 }
23
24 /// Appending to a Rust string -- used by RawRustStringOstream.
25 #[no_mangle]
26 pub unsafe extern "C" fn LLVMRustStringWriteImpl(
27     sr: &RustString,
28     ptr: *const c_char,
29     size: size_t,
30 ) {
31     let slice = slice::from_raw_parts(ptr as *const u8, size as usize);
32
33     sr.bytes.borrow_mut().extend_from_slice(slice);
34 }
35
36 /// Initialize targets enabled by the build script via `cfg(llvm_component = "...")`.
37 /// N.B., this function can't be moved to `rustc_codegen_llvm` because of the `cfg`s.
38 pub fn initialize_available_targets() {
39     macro_rules! init_target(
40         ($cfg:meta, $($method:ident),*) => { {
41             #[cfg($cfg)]
42             fn init() {
43                 extern "C" {
44                     $(fn $method();)*
45                 }
46                 unsafe {
47                     $($method();)*
48                 }
49             }
50             #[cfg(not($cfg))]
51             fn init() { }
52             init();
53         } }
54     );
55     init_target!(
56         llvm_component = "x86",
57         LLVMInitializeX86TargetInfo,
58         LLVMInitializeX86Target,
59         LLVMInitializeX86TargetMC,
60         LLVMInitializeX86AsmPrinter,
61         LLVMInitializeX86AsmParser
62     );
63     init_target!(
64         llvm_component = "arm",
65         LLVMInitializeARMTargetInfo,
66         LLVMInitializeARMTarget,
67         LLVMInitializeARMTargetMC,
68         LLVMInitializeARMAsmPrinter,
69         LLVMInitializeARMAsmParser
70     );
71     init_target!(
72         llvm_component = "aarch64",
73         LLVMInitializeAArch64TargetInfo,
74         LLVMInitializeAArch64Target,
75         LLVMInitializeAArch64TargetMC,
76         LLVMInitializeAArch64AsmPrinter,
77         LLVMInitializeAArch64AsmParser
78     );
79     init_target!(
80         llvm_component = "amdgpu",
81         LLVMInitializeAMDGPUTargetInfo,
82         LLVMInitializeAMDGPUTarget,
83         LLVMInitializeAMDGPUTargetMC,
84         LLVMInitializeAMDGPUAsmPrinter,
85         LLVMInitializeAMDGPUAsmParser
86     );
87     init_target!(
88         llvm_component = "avr",
89         LLVMInitializeAVRTargetInfo,
90         LLVMInitializeAVRTarget,
91         LLVMInitializeAVRTargetMC,
92         LLVMInitializeAVRAsmPrinter,
93         LLVMInitializeAVRAsmParser
94     );
95     init_target!(
96         llvm_component = "m68k",
97         LLVMInitializeM68kTargetInfo,
98         LLVMInitializeM68kTarget,
99         LLVMInitializeM68kTargetMC,
100         LLVMInitializeM68kAsmPrinter,
101         LLVMInitializeM68kAsmParser
102     );
103     init_target!(
104         llvm_component = "mips",
105         LLVMInitializeMipsTargetInfo,
106         LLVMInitializeMipsTarget,
107         LLVMInitializeMipsTargetMC,
108         LLVMInitializeMipsAsmPrinter,
109         LLVMInitializeMipsAsmParser
110     );
111     init_target!(
112         llvm_component = "powerpc",
113         LLVMInitializePowerPCTargetInfo,
114         LLVMInitializePowerPCTarget,
115         LLVMInitializePowerPCTargetMC,
116         LLVMInitializePowerPCAsmPrinter,
117         LLVMInitializePowerPCAsmParser
118     );
119     init_target!(
120         llvm_component = "systemz",
121         LLVMInitializeSystemZTargetInfo,
122         LLVMInitializeSystemZTarget,
123         LLVMInitializeSystemZTargetMC,
124         LLVMInitializeSystemZAsmPrinter,
125         LLVMInitializeSystemZAsmParser
126     );
127     init_target!(
128         llvm_component = "jsbackend",
129         LLVMInitializeJSBackendTargetInfo,
130         LLVMInitializeJSBackendTarget,
131         LLVMInitializeJSBackendTargetMC
132     );
133     init_target!(
134         llvm_component = "msp430",
135         LLVMInitializeMSP430TargetInfo,
136         LLVMInitializeMSP430Target,
137         LLVMInitializeMSP430TargetMC,
138         LLVMInitializeMSP430AsmPrinter,
139         LLVMInitializeMSP430AsmParser
140     );
141     init_target!(
142         llvm_component = "riscv",
143         LLVMInitializeRISCVTargetInfo,
144         LLVMInitializeRISCVTarget,
145         LLVMInitializeRISCVTargetMC,
146         LLVMInitializeRISCVAsmPrinter,
147         LLVMInitializeRISCVAsmParser
148     );
149     init_target!(
150         llvm_component = "sparc",
151         LLVMInitializeSparcTargetInfo,
152         LLVMInitializeSparcTarget,
153         LLVMInitializeSparcTargetMC,
154         LLVMInitializeSparcAsmPrinter,
155         LLVMInitializeSparcAsmParser
156     );
157     init_target!(
158         llvm_component = "nvptx",
159         LLVMInitializeNVPTXTargetInfo,
160         LLVMInitializeNVPTXTarget,
161         LLVMInitializeNVPTXTargetMC,
162         LLVMInitializeNVPTXAsmPrinter
163     );
164     init_target!(
165         llvm_component = "hexagon",
166         LLVMInitializeHexagonTargetInfo,
167         LLVMInitializeHexagonTarget,
168         LLVMInitializeHexagonTargetMC,
169         LLVMInitializeHexagonAsmPrinter,
170         LLVMInitializeHexagonAsmParser
171     );
172     init_target!(
173         llvm_component = "webassembly",
174         LLVMInitializeWebAssemblyTargetInfo,
175         LLVMInitializeWebAssemblyTarget,
176         LLVMInitializeWebAssemblyTargetMC,
177         LLVMInitializeWebAssemblyAsmPrinter,
178         LLVMInitializeWebAssemblyAsmParser
179     );
180     init_target!(
181         llvm_component = "bpf",
182         LLVMInitializeBPFTargetInfo,
183         LLVMInitializeBPFTarget,
184         LLVMInitializeBPFTargetMC,
185         LLVMInitializeBPFAsmPrinter,
186         LLVMInitializeBPFAsmParser
187     );
188 }