2 #![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")]
4 // NOTE: This crate only exists to allow linking on mingw targets.
6 use libc::{c_char, size_t};
7 use std::cell::RefCell;
11 pub struct RustString {
12 pub bytes: RefCell<Vec<u8>>,
16 pub fn len(&self) -> usize {
17 self.bytes.borrow().len()
20 pub fn is_empty(&self) -> bool {
21 self.bytes.borrow().is_empty()
25 /// Appending to a Rust string -- used by RawRustStringOstream.
27 pub unsafe extern "C" fn LLVMRustStringWriteImpl(
32 let slice = slice::from_raw_parts(ptr as *const u8, size as usize);
34 sr.bytes.borrow_mut().extend_from_slice(slice);
37 /// Initialize targets enabled by the build script via `cfg(llvm_component = "...")`.
38 /// N.B., this function can't be moved to `rustc_codegen_llvm` because of the `cfg`s.
39 pub fn initialize_available_targets() {
40 macro_rules! init_target(
41 ($cfg:meta, $($method:ident),*) => { {
57 llvm_component = "x86",
58 LLVMInitializeX86TargetInfo,
59 LLVMInitializeX86Target,
60 LLVMInitializeX86TargetMC,
61 LLVMInitializeX86AsmPrinter,
62 LLVMInitializeX86AsmParser
65 llvm_component = "arm",
66 LLVMInitializeARMTargetInfo,
67 LLVMInitializeARMTarget,
68 LLVMInitializeARMTargetMC,
69 LLVMInitializeARMAsmPrinter,
70 LLVMInitializeARMAsmParser
73 llvm_component = "aarch64",
74 LLVMInitializeAArch64TargetInfo,
75 LLVMInitializeAArch64Target,
76 LLVMInitializeAArch64TargetMC,
77 LLVMInitializeAArch64AsmPrinter,
78 LLVMInitializeAArch64AsmParser
81 llvm_component = "amdgpu",
82 LLVMInitializeAMDGPUTargetInfo,
83 LLVMInitializeAMDGPUTarget,
84 LLVMInitializeAMDGPUTargetMC,
85 LLVMInitializeAMDGPUAsmPrinter,
86 LLVMInitializeAMDGPUAsmParser
89 llvm_component = "avr",
90 LLVMInitializeAVRTargetInfo,
91 LLVMInitializeAVRTarget,
92 LLVMInitializeAVRTargetMC,
93 LLVMInitializeAVRAsmPrinter,
94 LLVMInitializeAVRAsmParser
97 llvm_component = "m68k",
98 LLVMInitializeM68kTargetInfo,
99 LLVMInitializeM68kTarget,
100 LLVMInitializeM68kTargetMC,
101 LLVMInitializeM68kAsmPrinter,
102 LLVMInitializeM68kAsmParser
105 llvm_component = "mips",
106 LLVMInitializeMipsTargetInfo,
107 LLVMInitializeMipsTarget,
108 LLVMInitializeMipsTargetMC,
109 LLVMInitializeMipsAsmPrinter,
110 LLVMInitializeMipsAsmParser
113 llvm_component = "powerpc",
114 LLVMInitializePowerPCTargetInfo,
115 LLVMInitializePowerPCTarget,
116 LLVMInitializePowerPCTargetMC,
117 LLVMInitializePowerPCAsmPrinter,
118 LLVMInitializePowerPCAsmParser
121 llvm_component = "systemz",
122 LLVMInitializeSystemZTargetInfo,
123 LLVMInitializeSystemZTarget,
124 LLVMInitializeSystemZTargetMC,
125 LLVMInitializeSystemZAsmPrinter,
126 LLVMInitializeSystemZAsmParser
129 llvm_component = "jsbackend",
130 LLVMInitializeJSBackendTargetInfo,
131 LLVMInitializeJSBackendTarget,
132 LLVMInitializeJSBackendTargetMC
135 llvm_component = "msp430",
136 LLVMInitializeMSP430TargetInfo,
137 LLVMInitializeMSP430Target,
138 LLVMInitializeMSP430TargetMC,
139 LLVMInitializeMSP430AsmPrinter,
140 LLVMInitializeMSP430AsmParser
143 llvm_component = "riscv",
144 LLVMInitializeRISCVTargetInfo,
145 LLVMInitializeRISCVTarget,
146 LLVMInitializeRISCVTargetMC,
147 LLVMInitializeRISCVAsmPrinter,
148 LLVMInitializeRISCVAsmParser
151 llvm_component = "sparc",
152 LLVMInitializeSparcTargetInfo,
153 LLVMInitializeSparcTarget,
154 LLVMInitializeSparcTargetMC,
155 LLVMInitializeSparcAsmPrinter,
156 LLVMInitializeSparcAsmParser
159 llvm_component = "nvptx",
160 LLVMInitializeNVPTXTargetInfo,
161 LLVMInitializeNVPTXTarget,
162 LLVMInitializeNVPTXTargetMC,
163 LLVMInitializeNVPTXAsmPrinter
166 llvm_component = "hexagon",
167 LLVMInitializeHexagonTargetInfo,
168 LLVMInitializeHexagonTarget,
169 LLVMInitializeHexagonTargetMC,
170 LLVMInitializeHexagonAsmPrinter,
171 LLVMInitializeHexagonAsmParser
174 llvm_component = "webassembly",
175 LLVMInitializeWebAssemblyTargetInfo,
176 LLVMInitializeWebAssemblyTarget,
177 LLVMInitializeWebAssemblyTargetMC,
178 LLVMInitializeWebAssemblyAsmPrinter,
179 LLVMInitializeWebAssemblyAsmParser
182 llvm_component = "bpf",
183 LLVMInitializeBPFTargetInfo,
184 LLVMInitializeBPFTarget,
185 LLVMInitializeBPFTargetMC,
186 LLVMInitializeBPFAsmPrinter,
187 LLVMInitializeBPFAsmParser