2 #![feature(static_nobundle)]
4 #![doc(html_root_url = "https://doc.rust-lang.org/nightly/")]
6 // NOTE: This crate only exists to allow linking on mingw targets.
8 use std
::cell
::RefCell
;
10 use libc
::{c_char, size_t}
;
14 pub struct RustString
{
15 pub bytes
: RefCell
<Vec
<u8>>,
18 /// Appending to a Rust string -- used by RawRustStringOstream.
20 pub unsafe extern "C" fn LLVMRustStringWriteImpl(sr
: &RustString
,
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
),*) => { {
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
);