1 #![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")]
3 // NOTE: This crate only exists to allow linking on mingw targets.
5 use libc::{c_char, size_t};
6 use std::cell::RefCell;
10 pub struct RustString {
11 pub bytes: RefCell<Vec<u8>>,
15 pub fn len(&self) -> usize {
16 self.bytes.borrow().len()
19 pub fn is_empty(&self) -> bool {
20 self.bytes.borrow().is_empty()
24 /// Appending to a Rust string -- used by RawRustStringOstream.
26 pub unsafe extern "C" fn LLVMRustStringWriteImpl(
31 let slice = slice::from_raw_parts(ptr as *const u8, size as usize);
33 sr.bytes.borrow_mut().extend_from_slice(slice);
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),*) => { {
56 llvm_component = "x86",
57 LLVMInitializeX86TargetInfo,
58 LLVMInitializeX86Target,
59 LLVMInitializeX86TargetMC,
60 LLVMInitializeX86AsmPrinter,
61 LLVMInitializeX86AsmParser
64 llvm_component = "arm",
65 LLVMInitializeARMTargetInfo,
66 LLVMInitializeARMTarget,
67 LLVMInitializeARMTargetMC,
68 LLVMInitializeARMAsmPrinter,
69 LLVMInitializeARMAsmParser
72 llvm_component = "aarch64",
73 LLVMInitializeAArch64TargetInfo,
74 LLVMInitializeAArch64Target,
75 LLVMInitializeAArch64TargetMC,
76 LLVMInitializeAArch64AsmPrinter,
77 LLVMInitializeAArch64AsmParser
80 llvm_component = "amdgpu",
81 LLVMInitializeAMDGPUTargetInfo,
82 LLVMInitializeAMDGPUTarget,
83 LLVMInitializeAMDGPUTargetMC,
84 LLVMInitializeAMDGPUAsmPrinter,
85 LLVMInitializeAMDGPUAsmParser
88 llvm_component = "avr",
89 LLVMInitializeAVRTargetInfo,
90 LLVMInitializeAVRTarget,
91 LLVMInitializeAVRTargetMC,
92 LLVMInitializeAVRAsmPrinter,
93 LLVMInitializeAVRAsmParser
96 llvm_component = "m68k",
97 LLVMInitializeM68kTargetInfo,
98 LLVMInitializeM68kTarget,
99 LLVMInitializeM68kTargetMC,
100 LLVMInitializeM68kAsmPrinter,
101 LLVMInitializeM68kAsmParser
104 llvm_component = "mips",
105 LLVMInitializeMipsTargetInfo,
106 LLVMInitializeMipsTarget,
107 LLVMInitializeMipsTargetMC,
108 LLVMInitializeMipsAsmPrinter,
109 LLVMInitializeMipsAsmParser
112 llvm_component = "powerpc",
113 LLVMInitializePowerPCTargetInfo,
114 LLVMInitializePowerPCTarget,
115 LLVMInitializePowerPCTargetMC,
116 LLVMInitializePowerPCAsmPrinter,
117 LLVMInitializePowerPCAsmParser
120 llvm_component = "systemz",
121 LLVMInitializeSystemZTargetInfo,
122 LLVMInitializeSystemZTarget,
123 LLVMInitializeSystemZTargetMC,
124 LLVMInitializeSystemZAsmPrinter,
125 LLVMInitializeSystemZAsmParser
128 llvm_component = "jsbackend",
129 LLVMInitializeJSBackendTargetInfo,
130 LLVMInitializeJSBackendTarget,
131 LLVMInitializeJSBackendTargetMC
134 llvm_component = "msp430",
135 LLVMInitializeMSP430TargetInfo,
136 LLVMInitializeMSP430Target,
137 LLVMInitializeMSP430TargetMC,
138 LLVMInitializeMSP430AsmPrinter,
139 LLVMInitializeMSP430AsmParser
142 llvm_component = "riscv",
143 LLVMInitializeRISCVTargetInfo,
144 LLVMInitializeRISCVTarget,
145 LLVMInitializeRISCVTargetMC,
146 LLVMInitializeRISCVAsmPrinter,
147 LLVMInitializeRISCVAsmParser
150 llvm_component = "sparc",
151 LLVMInitializeSparcTargetInfo,
152 LLVMInitializeSparcTarget,
153 LLVMInitializeSparcTargetMC,
154 LLVMInitializeSparcAsmPrinter,
155 LLVMInitializeSparcAsmParser
158 llvm_component = "nvptx",
159 LLVMInitializeNVPTXTargetInfo,
160 LLVMInitializeNVPTXTarget,
161 LLVMInitializeNVPTXTargetMC,
162 LLVMInitializeNVPTXAsmPrinter
165 llvm_component = "hexagon",
166 LLVMInitializeHexagonTargetInfo,
167 LLVMInitializeHexagonTarget,
168 LLVMInitializeHexagonTargetMC,
169 LLVMInitializeHexagonAsmPrinter,
170 LLVMInitializeHexagonAsmParser
173 llvm_component = "webassembly",
174 LLVMInitializeWebAssemblyTargetInfo,
175 LLVMInitializeWebAssemblyTarget,
176 LLVMInitializeWebAssemblyTargetMC,
177 LLVMInitializeWebAssemblyAsmPrinter,
178 LLVMInitializeWebAssemblyAsmParser
181 llvm_component = "bpf",
182 LLVMInitializeBPFTargetInfo,
183 LLVMInitializeBPFTarget,
184 LLVMInitializeBPFTargetMC,
185 LLVMInitializeBPFAsmPrinter,
186 LLVMInitializeBPFAsmParser