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 pub unsafe extern "C" fn LLVMRustStringWriteImpl(
23 let slice = slice::from_raw_parts(ptr as *const u8, size as usize);
25 sr.bytes.borrow_mut().extend_from_slice(slice);
28 /// Initialize targets enabled by the build script via `cfg(llvm_component = "...")`.
29 /// N.B., this function can't be moved to `rustc_codegen_llvm` because of the `cfg`s.
30 pub fn initialize_available_targets() {
31 macro_rules! init_target(
32 ($cfg:meta, $($method:ident),*) => { {
48 llvm_component = "x86",
49 LLVMInitializeX86TargetInfo,
50 LLVMInitializeX86Target,
51 LLVMInitializeX86TargetMC,
52 LLVMInitializeX86AsmPrinter,
53 LLVMInitializeX86AsmParser
56 llvm_component = "arm",
57 LLVMInitializeARMTargetInfo,
58 LLVMInitializeARMTarget,
59 LLVMInitializeARMTargetMC,
60 LLVMInitializeARMAsmPrinter,
61 LLVMInitializeARMAsmParser
64 llvm_component = "aarch64",
65 LLVMInitializeAArch64TargetInfo,
66 LLVMInitializeAArch64Target,
67 LLVMInitializeAArch64TargetMC,
68 LLVMInitializeAArch64AsmPrinter,
69 LLVMInitializeAArch64AsmParser
72 llvm_component = "amdgpu",
73 LLVMInitializeAMDGPUTargetInfo,
74 LLVMInitializeAMDGPUTarget,
75 LLVMInitializeAMDGPUTargetMC,
76 LLVMInitializeAMDGPUAsmPrinter,
77 LLVMInitializeAMDGPUAsmParser
80 llvm_component = "mips",
81 LLVMInitializeMipsTargetInfo,
82 LLVMInitializeMipsTarget,
83 LLVMInitializeMipsTargetMC,
84 LLVMInitializeMipsAsmPrinter,
85 LLVMInitializeMipsAsmParser
88 llvm_component = "powerpc",
89 LLVMInitializePowerPCTargetInfo,
90 LLVMInitializePowerPCTarget,
91 LLVMInitializePowerPCTargetMC,
92 LLVMInitializePowerPCAsmPrinter,
93 LLVMInitializePowerPCAsmParser
96 llvm_component = "systemz",
97 LLVMInitializeSystemZTargetInfo,
98 LLVMInitializeSystemZTarget,
99 LLVMInitializeSystemZTargetMC,
100 LLVMInitializeSystemZAsmPrinter,
101 LLVMInitializeSystemZAsmParser
104 llvm_component = "jsbackend",
105 LLVMInitializeJSBackendTargetInfo,
106 LLVMInitializeJSBackendTarget,
107 LLVMInitializeJSBackendTargetMC
110 llvm_component = "msp430",
111 LLVMInitializeMSP430TargetInfo,
112 LLVMInitializeMSP430Target,
113 LLVMInitializeMSP430TargetMC,
114 LLVMInitializeMSP430AsmPrinter
117 all(llvm_component = "msp430", llvm_has_msp430_asm_parser),
118 LLVMInitializeMSP430AsmParser
121 llvm_component = "riscv",
122 LLVMInitializeRISCVTargetInfo,
123 LLVMInitializeRISCVTarget,
124 LLVMInitializeRISCVTargetMC,
125 LLVMInitializeRISCVAsmPrinter,
126 LLVMInitializeRISCVAsmParser
129 llvm_component = "sparc",
130 LLVMInitializeSparcTargetInfo,
131 LLVMInitializeSparcTarget,
132 LLVMInitializeSparcTargetMC,
133 LLVMInitializeSparcAsmPrinter,
134 LLVMInitializeSparcAsmParser
137 llvm_component = "nvptx",
138 LLVMInitializeNVPTXTargetInfo,
139 LLVMInitializeNVPTXTarget,
140 LLVMInitializeNVPTXTargetMC,
141 LLVMInitializeNVPTXAsmPrinter
144 llvm_component = "hexagon",
145 LLVMInitializeHexagonTargetInfo,
146 LLVMInitializeHexagonTarget,
147 LLVMInitializeHexagonTargetMC,
148 LLVMInitializeHexagonAsmPrinter,
149 LLVMInitializeHexagonAsmParser
152 llvm_component = "webassembly",
153 LLVMInitializeWebAssemblyTargetInfo,
154 LLVMInitializeWebAssemblyTarget,
155 LLVMInitializeWebAssemblyTargetMC,
156 LLVMInitializeWebAssemblyAsmPrinter