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