]> git.proxmox.com Git - rustc.git/blob - src/librustc_llvm/lib.rs
New upstream version 1.41.1+dfsg1
[rustc.git] / src / librustc_llvm / lib.rs
1 #![feature(nll)]
2 #![feature(static_nobundle)]
3
4 #![doc(html_root_url = "https://doc.rust-lang.org/nightly/")]
5
6 // NOTE: This crate only exists to allow linking on mingw targets.
7
8 use std::cell::RefCell;
9 use std::slice;
10 use libc::{c_char, size_t};
11
12
13 #[repr(C)]
14 pub struct RustString {
15 pub bytes: RefCell<Vec<u8>>,
16 }
17
18 /// Appending to a Rust string -- used by RawRustStringOstream.
19 #[no_mangle]
20 pub unsafe extern "C" fn LLVMRustStringWriteImpl(sr: &RustString,
21 ptr: *const c_char,
22 size: size_t) {
23 let slice = slice::from_raw_parts(ptr as *const u8, size as usize);
24
25 sr.bytes.borrow_mut().extend_from_slice(slice);
26 }
27
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),*) => { {
33 #[cfg($cfg)]
34 fn init() {
35 extern {
36 $(fn $method();)*
37 }
38 unsafe {
39 $($method();)*
40 }
41 }
42 #[cfg(not($cfg))]
43 fn init() { }
44 init();
45 } }
46 );
47 init_target!(llvm_component = "x86",
48 LLVMInitializeX86TargetInfo,
49 LLVMInitializeX86Target,
50 LLVMInitializeX86TargetMC,
51 LLVMInitializeX86AsmPrinter,
52 LLVMInitializeX86AsmParser);
53 init_target!(llvm_component = "arm",
54 LLVMInitializeARMTargetInfo,
55 LLVMInitializeARMTarget,
56 LLVMInitializeARMTargetMC,
57 LLVMInitializeARMAsmPrinter,
58 LLVMInitializeARMAsmParser);
59 init_target!(llvm_component = "aarch64",
60 LLVMInitializeAArch64TargetInfo,
61 LLVMInitializeAArch64Target,
62 LLVMInitializeAArch64TargetMC,
63 LLVMInitializeAArch64AsmPrinter,
64 LLVMInitializeAArch64AsmParser);
65 init_target!(llvm_component = "amdgpu",
66 LLVMInitializeAMDGPUTargetInfo,
67 LLVMInitializeAMDGPUTarget,
68 LLVMInitializeAMDGPUTargetMC,
69 LLVMInitializeAMDGPUAsmPrinter,
70 LLVMInitializeAMDGPUAsmParser);
71 init_target!(llvm_component = "mips",
72 LLVMInitializeMipsTargetInfo,
73 LLVMInitializeMipsTarget,
74 LLVMInitializeMipsTargetMC,
75 LLVMInitializeMipsAsmPrinter,
76 LLVMInitializeMipsAsmParser);
77 init_target!(llvm_component = "powerpc",
78 LLVMInitializePowerPCTargetInfo,
79 LLVMInitializePowerPCTarget,
80 LLVMInitializePowerPCTargetMC,
81 LLVMInitializePowerPCAsmPrinter,
82 LLVMInitializePowerPCAsmParser);
83 init_target!(llvm_component = "systemz",
84 LLVMInitializeSystemZTargetInfo,
85 LLVMInitializeSystemZTarget,
86 LLVMInitializeSystemZTargetMC,
87 LLVMInitializeSystemZAsmPrinter,
88 LLVMInitializeSystemZAsmParser);
89 init_target!(llvm_component = "jsbackend",
90 LLVMInitializeJSBackendTargetInfo,
91 LLVMInitializeJSBackendTarget,
92 LLVMInitializeJSBackendTargetMC);
93 init_target!(llvm_component = "msp430",
94 LLVMInitializeMSP430TargetInfo,
95 LLVMInitializeMSP430Target,
96 LLVMInitializeMSP430TargetMC,
97 LLVMInitializeMSP430AsmPrinter);
98 init_target!(all(llvm_component = "msp430", llvm_has_msp430_asm_parser),
99 LLVMInitializeMSP430AsmParser);
100 init_target!(llvm_component = "riscv",
101 LLVMInitializeRISCVTargetInfo,
102 LLVMInitializeRISCVTarget,
103 LLVMInitializeRISCVTargetMC,
104 LLVMInitializeRISCVAsmPrinter,
105 LLVMInitializeRISCVAsmParser);
106 init_target!(llvm_component = "sparc",
107 LLVMInitializeSparcTargetInfo,
108 LLVMInitializeSparcTarget,
109 LLVMInitializeSparcTargetMC,
110 LLVMInitializeSparcAsmPrinter,
111 LLVMInitializeSparcAsmParser);
112 init_target!(llvm_component = "nvptx",
113 LLVMInitializeNVPTXTargetInfo,
114 LLVMInitializeNVPTXTarget,
115 LLVMInitializeNVPTXTargetMC,
116 LLVMInitializeNVPTXAsmPrinter);
117 init_target!(llvm_component = "hexagon",
118 LLVMInitializeHexagonTargetInfo,
119 LLVMInitializeHexagonTarget,
120 LLVMInitializeHexagonTargetMC,
121 LLVMInitializeHexagonAsmPrinter,
122 LLVMInitializeHexagonAsmParser);
123 init_target!(llvm_component = "webassembly",
124 LLVMInitializeWebAssemblyTargetInfo,
125 LLVMInitializeWebAssemblyTarget,
126 LLVMInitializeWebAssemblyTargetMC,
127 LLVMInitializeWebAssemblyAsmPrinter);
128 }