]> git.lizzy.rs Git - rust.git/blob - src/librustc_llvm/lib.rs
Auto merge of #62359 - euclio:remove-serialize, r=Dylan-DPC
[rust.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 }