2 #![feature(static_nobundle)]
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()
22 /// Appending to a Rust string -- used by RawRustStringOstream.
24 pub unsafe extern "C" fn LLVMRustStringWriteImpl(
29 let slice = slice::from_raw_parts(ptr as *const u8, size as usize);
31 sr.bytes.borrow_mut().extend_from_slice(slice);
34 /// Initialize targets enabled by the build script via `cfg(llvm_component = "...")`.
35 /// N.B., this function can't be moved to `rustc_codegen_llvm` because of the `cfg`s.
36 pub fn initialize_available_targets() {
37 macro_rules! init_target(
38 ($cfg:meta, $($method:ident),*) => { {
54 llvm_component = "x86",
55 LLVMInitializeX86TargetInfo,
56 LLVMInitializeX86Target,
57 LLVMInitializeX86TargetMC,
58 LLVMInitializeX86AsmPrinter,
59 LLVMInitializeX86AsmParser
62 llvm_component = "arm",
63 LLVMInitializeARMTargetInfo,
64 LLVMInitializeARMTarget,
65 LLVMInitializeARMTargetMC,
66 LLVMInitializeARMAsmPrinter,
67 LLVMInitializeARMAsmParser
70 llvm_component = "aarch64",
71 LLVMInitializeAArch64TargetInfo,
72 LLVMInitializeAArch64Target,
73 LLVMInitializeAArch64TargetMC,
74 LLVMInitializeAArch64AsmPrinter,
75 LLVMInitializeAArch64AsmParser
78 llvm_component = "amdgpu",
79 LLVMInitializeAMDGPUTargetInfo,
80 LLVMInitializeAMDGPUTarget,
81 LLVMInitializeAMDGPUTargetMC,
82 LLVMInitializeAMDGPUAsmPrinter,
83 LLVMInitializeAMDGPUAsmParser
86 llvm_component = "avr",
87 LLVMInitializeAVRTargetInfo,
88 LLVMInitializeAVRTarget,
89 LLVMInitializeAVRTargetMC,
90 LLVMInitializeAVRAsmPrinter,
91 LLVMInitializeAVRAsmParser
94 llvm_component = "mips",
95 LLVMInitializeMipsTargetInfo,
96 LLVMInitializeMipsTarget,
97 LLVMInitializeMipsTargetMC,
98 LLVMInitializeMipsAsmPrinter,
99 LLVMInitializeMipsAsmParser
102 llvm_component = "powerpc",
103 LLVMInitializePowerPCTargetInfo,
104 LLVMInitializePowerPCTarget,
105 LLVMInitializePowerPCTargetMC,
106 LLVMInitializePowerPCAsmPrinter,
107 LLVMInitializePowerPCAsmParser
110 llvm_component = "systemz",
111 LLVMInitializeSystemZTargetInfo,
112 LLVMInitializeSystemZTarget,
113 LLVMInitializeSystemZTargetMC,
114 LLVMInitializeSystemZAsmPrinter,
115 LLVMInitializeSystemZAsmParser
118 llvm_component = "jsbackend",
119 LLVMInitializeJSBackendTargetInfo,
120 LLVMInitializeJSBackendTarget,
121 LLVMInitializeJSBackendTargetMC
124 llvm_component = "msp430",
125 LLVMInitializeMSP430TargetInfo,
126 LLVMInitializeMSP430Target,
127 LLVMInitializeMSP430TargetMC,
128 LLVMInitializeMSP430AsmPrinter,
129 LLVMInitializeMSP430AsmParser
132 llvm_component = "riscv",
133 LLVMInitializeRISCVTargetInfo,
134 LLVMInitializeRISCVTarget,
135 LLVMInitializeRISCVTargetMC,
136 LLVMInitializeRISCVAsmPrinter,
137 LLVMInitializeRISCVAsmParser
140 llvm_component = "sparc",
141 LLVMInitializeSparcTargetInfo,
142 LLVMInitializeSparcTarget,
143 LLVMInitializeSparcTargetMC,
144 LLVMInitializeSparcAsmPrinter,
145 LLVMInitializeSparcAsmParser
148 llvm_component = "nvptx",
149 LLVMInitializeNVPTXTargetInfo,
150 LLVMInitializeNVPTXTarget,
151 LLVMInitializeNVPTXTargetMC,
152 LLVMInitializeNVPTXAsmPrinter
155 llvm_component = "hexagon",
156 LLVMInitializeHexagonTargetInfo,
157 LLVMInitializeHexagonTarget,
158 LLVMInitializeHexagonTargetMC,
159 LLVMInitializeHexagonAsmPrinter,
160 LLVMInitializeHexagonAsmParser
163 llvm_component = "webassembly",
164 LLVMInitializeWebAssemblyTargetInfo,
165 LLVMInitializeWebAssemblyTarget,
166 LLVMInitializeWebAssemblyTargetMC,
167 LLVMInitializeWebAssemblyAsmPrinter,
168 LLVMInitializeWebAssemblyAsmParser