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/")]
5 // NOTE: This crate only exists to allow linking on mingw targets.
7 use libc::{c_char, size_t};
8 use std::cell::RefCell;
12 pub struct RustString {
13 pub bytes: RefCell<Vec<u8>>,
17 pub fn len(&self) -> usize {
18 self.bytes.borrow().len()
21 pub fn is_empty(&self) -> bool {
22 self.bytes.borrow().is_empty()
26 /// Appending to a Rust string -- used by RawRustStringOstream.
28 pub unsafe extern "C" fn LLVMRustStringWriteImpl(
33 let slice = slice::from_raw_parts(ptr as *const u8, size as usize);
35 sr.bytes.borrow_mut().extend_from_slice(slice);
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.
40 pub fn initialize_available_targets() {
41 macro_rules! init_target(
42 ($cfg:meta, $($method:ident),*) => { {
58 llvm_component = "x86",
59 LLVMInitializeX86TargetInfo,
60 LLVMInitializeX86Target,
61 LLVMInitializeX86TargetMC,
62 LLVMInitializeX86AsmPrinter,
63 LLVMInitializeX86AsmParser
66 llvm_component = "arm",
67 LLVMInitializeARMTargetInfo,
68 LLVMInitializeARMTarget,
69 LLVMInitializeARMTargetMC,
70 LLVMInitializeARMAsmPrinter,
71 LLVMInitializeARMAsmParser
74 llvm_component = "aarch64",
75 LLVMInitializeAArch64TargetInfo,
76 LLVMInitializeAArch64Target,
77 LLVMInitializeAArch64TargetMC,
78 LLVMInitializeAArch64AsmPrinter,
79 LLVMInitializeAArch64AsmParser
82 llvm_component = "amdgpu",
83 LLVMInitializeAMDGPUTargetInfo,
84 LLVMInitializeAMDGPUTarget,
85 LLVMInitializeAMDGPUTargetMC,
86 LLVMInitializeAMDGPUAsmPrinter,
87 LLVMInitializeAMDGPUAsmParser
90 llvm_component = "avr",
91 LLVMInitializeAVRTargetInfo,
92 LLVMInitializeAVRTarget,
93 LLVMInitializeAVRTargetMC,
94 LLVMInitializeAVRAsmPrinter,
95 LLVMInitializeAVRAsmParser
98 llvm_component = "m68k",
99 LLVMInitializeM68kTargetInfo,
100 LLVMInitializeM68kTarget,
101 LLVMInitializeM68kTargetMC,
102 LLVMInitializeM68kAsmPrinter,
103 LLVMInitializeM68kAsmParser
106 llvm_component = "mips",
107 LLVMInitializeMipsTargetInfo,
108 LLVMInitializeMipsTarget,
109 LLVMInitializeMipsTargetMC,
110 LLVMInitializeMipsAsmPrinter,
111 LLVMInitializeMipsAsmParser
114 llvm_component = "powerpc",
115 LLVMInitializePowerPCTargetInfo,
116 LLVMInitializePowerPCTarget,
117 LLVMInitializePowerPCTargetMC,
118 LLVMInitializePowerPCAsmPrinter,
119 LLVMInitializePowerPCAsmParser
122 llvm_component = "systemz",
123 LLVMInitializeSystemZTargetInfo,
124 LLVMInitializeSystemZTarget,
125 LLVMInitializeSystemZTargetMC,
126 LLVMInitializeSystemZAsmPrinter,
127 LLVMInitializeSystemZAsmParser
130 llvm_component = "jsbackend",
131 LLVMInitializeJSBackendTargetInfo,
132 LLVMInitializeJSBackendTarget,
133 LLVMInitializeJSBackendTargetMC
136 llvm_component = "msp430",
137 LLVMInitializeMSP430TargetInfo,
138 LLVMInitializeMSP430Target,
139 LLVMInitializeMSP430TargetMC,
140 LLVMInitializeMSP430AsmPrinter,
141 LLVMInitializeMSP430AsmParser
144 llvm_component = "riscv",
145 LLVMInitializeRISCVTargetInfo,
146 LLVMInitializeRISCVTarget,
147 LLVMInitializeRISCVTargetMC,
148 LLVMInitializeRISCVAsmPrinter,
149 LLVMInitializeRISCVAsmParser
152 llvm_component = "sparc",
153 LLVMInitializeSparcTargetInfo,
154 LLVMInitializeSparcTarget,
155 LLVMInitializeSparcTargetMC,
156 LLVMInitializeSparcAsmPrinter,
157 LLVMInitializeSparcAsmParser
160 llvm_component = "nvptx",
161 LLVMInitializeNVPTXTargetInfo,
162 LLVMInitializeNVPTXTarget,
163 LLVMInitializeNVPTXTargetMC,
164 LLVMInitializeNVPTXAsmPrinter
167 llvm_component = "hexagon",
168 LLVMInitializeHexagonTargetInfo,
169 LLVMInitializeHexagonTarget,
170 LLVMInitializeHexagonTargetMC,
171 LLVMInitializeHexagonAsmPrinter,
172 LLVMInitializeHexagonAsmParser
175 llvm_component = "webassembly",
176 LLVMInitializeWebAssemblyTargetInfo,
177 LLVMInitializeWebAssemblyTarget,
178 LLVMInitializeWebAssemblyTargetMC,
179 LLVMInitializeWebAssemblyAsmPrinter,
180 LLVMInitializeWebAssemblyAsmParser
183 llvm_component = "bpf",
184 LLVMInitializeBPFTargetInfo,
185 LLVMInitializeBPFTarget,
186 LLVMInitializeBPFTargetMC,
187 LLVMInitializeBPFAsmPrinter,
188 LLVMInitializeBPFAsmParser