2 #![feature(static_nobundle)]
3 #![doc(html_root_url = "https://doc.rust-lang.org/nightly/")]
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>>,
16 /// Appending to a Rust string -- used by RawRustStringOstream.
18 #[cfg_attr(not(bootstrap), allow(improper_ctypes_definitions))]
19 pub unsafe extern "C" fn LLVMRustStringWriteImpl(
24 let slice = slice::from_raw_parts(ptr as *const u8, size as usize);
26 sr.bytes.borrow_mut().extend_from_slice(slice);
29 /// Initialize targets enabled by the build script via `cfg(llvm_component = "...")`.
30 /// N.B., this function can't be moved to `rustc_codegen_llvm` because of the `cfg`s.
31 pub fn initialize_available_targets() {
32 macro_rules! init_target(
33 ($cfg:meta, $($method:ident),*) => { {
49 llvm_component = "x86",
50 LLVMInitializeX86TargetInfo,
51 LLVMInitializeX86Target,
52 LLVMInitializeX86TargetMC,
53 LLVMInitializeX86AsmPrinter,
54 LLVMInitializeX86AsmParser
57 llvm_component = "arm",
58 LLVMInitializeARMTargetInfo,
59 LLVMInitializeARMTarget,
60 LLVMInitializeARMTargetMC,
61 LLVMInitializeARMAsmPrinter,
62 LLVMInitializeARMAsmParser
65 llvm_component = "aarch64",
66 LLVMInitializeAArch64TargetInfo,
67 LLVMInitializeAArch64Target,
68 LLVMInitializeAArch64TargetMC,
69 LLVMInitializeAArch64AsmPrinter,
70 LLVMInitializeAArch64AsmParser
73 llvm_component = "amdgpu",
74 LLVMInitializeAMDGPUTargetInfo,
75 LLVMInitializeAMDGPUTarget,
76 LLVMInitializeAMDGPUTargetMC,
77 LLVMInitializeAMDGPUAsmPrinter,
78 LLVMInitializeAMDGPUAsmParser
81 llvm_component = "avr",
82 LLVMInitializeAVRTargetInfo,
83 LLVMInitializeAVRTarget,
84 LLVMInitializeAVRTargetMC,
85 LLVMInitializeAVRAsmPrinter,
86 LLVMInitializeAVRAsmParser
89 llvm_component = "mips",
90 LLVMInitializeMipsTargetInfo,
91 LLVMInitializeMipsTarget,
92 LLVMInitializeMipsTargetMC,
93 LLVMInitializeMipsAsmPrinter,
94 LLVMInitializeMipsAsmParser
97 llvm_component = "powerpc",
98 LLVMInitializePowerPCTargetInfo,
99 LLVMInitializePowerPCTarget,
100 LLVMInitializePowerPCTargetMC,
101 LLVMInitializePowerPCAsmPrinter,
102 LLVMInitializePowerPCAsmParser
105 llvm_component = "systemz",
106 LLVMInitializeSystemZTargetInfo,
107 LLVMInitializeSystemZTarget,
108 LLVMInitializeSystemZTargetMC,
109 LLVMInitializeSystemZAsmPrinter,
110 LLVMInitializeSystemZAsmParser
113 llvm_component = "jsbackend",
114 LLVMInitializeJSBackendTargetInfo,
115 LLVMInitializeJSBackendTarget,
116 LLVMInitializeJSBackendTargetMC
119 llvm_component = "msp430",
120 LLVMInitializeMSP430TargetInfo,
121 LLVMInitializeMSP430Target,
122 LLVMInitializeMSP430TargetMC,
123 LLVMInitializeMSP430AsmPrinter
126 all(llvm_component = "msp430", llvm_has_msp430_asm_parser),
127 LLVMInitializeMSP430AsmParser
130 llvm_component = "riscv",
131 LLVMInitializeRISCVTargetInfo,
132 LLVMInitializeRISCVTarget,
133 LLVMInitializeRISCVTargetMC,
134 LLVMInitializeRISCVAsmPrinter,
135 LLVMInitializeRISCVAsmParser
138 llvm_component = "sparc",
139 LLVMInitializeSparcTargetInfo,
140 LLVMInitializeSparcTarget,
141 LLVMInitializeSparcTargetMC,
142 LLVMInitializeSparcAsmPrinter,
143 LLVMInitializeSparcAsmParser
146 llvm_component = "nvptx",
147 LLVMInitializeNVPTXTargetInfo,
148 LLVMInitializeNVPTXTarget,
149 LLVMInitializeNVPTXTargetMC,
150 LLVMInitializeNVPTXAsmPrinter
153 llvm_component = "hexagon",
154 LLVMInitializeHexagonTargetInfo,
155 LLVMInitializeHexagonTarget,
156 LLVMInitializeHexagonTargetMC,
157 LLVMInitializeHexagonAsmPrinter,
158 LLVMInitializeHexagonAsmParser
161 llvm_component = "webassembly",
162 LLVMInitializeWebAssemblyTargetInfo,
163 LLVMInitializeWebAssemblyTarget,
164 LLVMInitializeWebAssemblyTargetMC,
165 LLVMInitializeWebAssemblyAsmPrinter