2019-02-10 16:13:30 +09:00
|
|
|
#![feature(nll)]
|
2018-07-31 15:36:38 +03:00
|
|
|
#![feature(static_nobundle)]
|
2020-09-23 21:51:56 +02:00
|
|
|
#![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")]
|
2014-07-05 13:24:57 -07:00
|
|
|
|
2018-05-29 20:41:36 +03:00
|
|
|
// NOTE: This crate only exists to allow linking on mingw targets.
|
2014-09-12 08:17:58 -07:00
|
|
|
|
2019-12-22 17:42:04 -05:00
|
|
|
use libc::{c_char, size_t};
|
2019-12-12 10:51:19 -05:00
|
|
|
use std::cell::RefCell;
|
|
|
|
use std::slice;
|
|
|
|
|
|
|
|
#[repr(C)]
|
|
|
|
pub struct RustString {
|
|
|
|
pub bytes: RefCell<Vec<u8>>,
|
|
|
|
}
|
|
|
|
|
2020-07-02 11:27:15 -07:00
|
|
|
impl RustString {
|
|
|
|
pub fn len(&self) -> usize {
|
|
|
|
self.bytes.borrow().len()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-12-12 10:51:19 -05:00
|
|
|
/// Appending to a Rust string -- used by RawRustStringOstream.
|
|
|
|
#[no_mangle]
|
2019-12-22 17:42:04 -05:00
|
|
|
pub unsafe extern "C" fn LLVMRustStringWriteImpl(
|
|
|
|
sr: &RustString,
|
|
|
|
ptr: *const c_char,
|
|
|
|
size: size_t,
|
|
|
|
) {
|
2019-12-12 10:51:19 -05:00
|
|
|
let slice = slice::from_raw_parts(ptr as *const u8, size as usize);
|
|
|
|
|
|
|
|
sr.bytes.borrow_mut().extend_from_slice(slice);
|
|
|
|
}
|
|
|
|
|
2018-05-29 20:41:36 +03:00
|
|
|
/// Initialize targets enabled by the build script via `cfg(llvm_component = "...")`.
|
2018-11-27 02:59:49 +00:00
|
|
|
/// N.B., this function can't be moved to `rustc_codegen_llvm` because of the `cfg`s.
|
2015-08-21 23:43:56 -05:00
|
|
|
pub fn initialize_available_targets() {
|
|
|
|
macro_rules! init_target(
|
2016-01-21 15:39:22 -08:00
|
|
|
($cfg:meta, $($method:ident),*) => { {
|
2015-08-21 23:43:56 -05:00
|
|
|
#[cfg($cfg)]
|
|
|
|
fn init() {
|
2020-09-01 17:12:52 -04:00
|
|
|
extern "C" {
|
2016-01-21 15:39:22 -08:00
|
|
|
$(fn $method();)*
|
|
|
|
}
|
2015-08-21 23:43:56 -05:00
|
|
|
unsafe {
|
2016-01-21 15:39:22 -08:00
|
|
|
$($method();)*
|
2015-08-21 23:43:56 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
#[cfg(not($cfg))]
|
|
|
|
fn init() { }
|
|
|
|
init();
|
|
|
|
} }
|
|
|
|
);
|
2019-12-22 17:42:04 -05:00
|
|
|
init_target!(
|
|
|
|
llvm_component = "x86",
|
|
|
|
LLVMInitializeX86TargetInfo,
|
|
|
|
LLVMInitializeX86Target,
|
|
|
|
LLVMInitializeX86TargetMC,
|
|
|
|
LLVMInitializeX86AsmPrinter,
|
|
|
|
LLVMInitializeX86AsmParser
|
|
|
|
);
|
|
|
|
init_target!(
|
|
|
|
llvm_component = "arm",
|
|
|
|
LLVMInitializeARMTargetInfo,
|
|
|
|
LLVMInitializeARMTarget,
|
|
|
|
LLVMInitializeARMTargetMC,
|
|
|
|
LLVMInitializeARMAsmPrinter,
|
|
|
|
LLVMInitializeARMAsmParser
|
|
|
|
);
|
|
|
|
init_target!(
|
|
|
|
llvm_component = "aarch64",
|
|
|
|
LLVMInitializeAArch64TargetInfo,
|
|
|
|
LLVMInitializeAArch64Target,
|
|
|
|
LLVMInitializeAArch64TargetMC,
|
|
|
|
LLVMInitializeAArch64AsmPrinter,
|
|
|
|
LLVMInitializeAArch64AsmParser
|
|
|
|
);
|
|
|
|
init_target!(
|
|
|
|
llvm_component = "amdgpu",
|
|
|
|
LLVMInitializeAMDGPUTargetInfo,
|
|
|
|
LLVMInitializeAMDGPUTarget,
|
|
|
|
LLVMInitializeAMDGPUTargetMC,
|
|
|
|
LLVMInitializeAMDGPUAsmPrinter,
|
|
|
|
LLVMInitializeAMDGPUAsmParser
|
|
|
|
);
|
2016-05-06 09:32:10 -04:00
|
|
|
init_target!(
|
|
|
|
llvm_component = "avr",
|
|
|
|
LLVMInitializeAVRTargetInfo,
|
|
|
|
LLVMInitializeAVRTarget,
|
|
|
|
LLVMInitializeAVRTargetMC,
|
|
|
|
LLVMInitializeAVRAsmPrinter,
|
|
|
|
LLVMInitializeAVRAsmParser
|
|
|
|
);
|
2019-12-22 17:42:04 -05:00
|
|
|
init_target!(
|
|
|
|
llvm_component = "mips",
|
|
|
|
LLVMInitializeMipsTargetInfo,
|
|
|
|
LLVMInitializeMipsTarget,
|
|
|
|
LLVMInitializeMipsTargetMC,
|
|
|
|
LLVMInitializeMipsAsmPrinter,
|
|
|
|
LLVMInitializeMipsAsmParser
|
|
|
|
);
|
|
|
|
init_target!(
|
|
|
|
llvm_component = "powerpc",
|
|
|
|
LLVMInitializePowerPCTargetInfo,
|
|
|
|
LLVMInitializePowerPCTarget,
|
|
|
|
LLVMInitializePowerPCTargetMC,
|
|
|
|
LLVMInitializePowerPCAsmPrinter,
|
|
|
|
LLVMInitializePowerPCAsmParser
|
|
|
|
);
|
|
|
|
init_target!(
|
|
|
|
llvm_component = "systemz",
|
|
|
|
LLVMInitializeSystemZTargetInfo,
|
|
|
|
LLVMInitializeSystemZTarget,
|
|
|
|
LLVMInitializeSystemZTargetMC,
|
|
|
|
LLVMInitializeSystemZAsmPrinter,
|
|
|
|
LLVMInitializeSystemZAsmParser
|
|
|
|
);
|
|
|
|
init_target!(
|
|
|
|
llvm_component = "jsbackend",
|
|
|
|
LLVMInitializeJSBackendTargetInfo,
|
|
|
|
LLVMInitializeJSBackendTarget,
|
|
|
|
LLVMInitializeJSBackendTargetMC
|
|
|
|
);
|
|
|
|
init_target!(
|
|
|
|
llvm_component = "msp430",
|
|
|
|
LLVMInitializeMSP430TargetInfo,
|
|
|
|
LLVMInitializeMSP430Target,
|
|
|
|
LLVMInitializeMSP430TargetMC,
|
2021-03-22 12:44:48 -07:00
|
|
|
LLVMInitializeMSP430AsmPrinter,
|
2019-12-22 17:42:04 -05:00
|
|
|
LLVMInitializeMSP430AsmParser
|
|
|
|
);
|
|
|
|
init_target!(
|
|
|
|
llvm_component = "riscv",
|
|
|
|
LLVMInitializeRISCVTargetInfo,
|
|
|
|
LLVMInitializeRISCVTarget,
|
|
|
|
LLVMInitializeRISCVTargetMC,
|
|
|
|
LLVMInitializeRISCVAsmPrinter,
|
|
|
|
LLVMInitializeRISCVAsmParser
|
|
|
|
);
|
|
|
|
init_target!(
|
|
|
|
llvm_component = "sparc",
|
|
|
|
LLVMInitializeSparcTargetInfo,
|
|
|
|
LLVMInitializeSparcTarget,
|
|
|
|
LLVMInitializeSparcTargetMC,
|
|
|
|
LLVMInitializeSparcAsmPrinter,
|
|
|
|
LLVMInitializeSparcAsmParser
|
|
|
|
);
|
|
|
|
init_target!(
|
|
|
|
llvm_component = "nvptx",
|
|
|
|
LLVMInitializeNVPTXTargetInfo,
|
|
|
|
LLVMInitializeNVPTXTarget,
|
|
|
|
LLVMInitializeNVPTXTargetMC,
|
|
|
|
LLVMInitializeNVPTXAsmPrinter
|
|
|
|
);
|
|
|
|
init_target!(
|
|
|
|
llvm_component = "hexagon",
|
|
|
|
LLVMInitializeHexagonTargetInfo,
|
|
|
|
LLVMInitializeHexagonTarget,
|
|
|
|
LLVMInitializeHexagonTargetMC,
|
|
|
|
LLVMInitializeHexagonAsmPrinter,
|
|
|
|
LLVMInitializeHexagonAsmParser
|
|
|
|
);
|
|
|
|
init_target!(
|
|
|
|
llvm_component = "webassembly",
|
|
|
|
LLVMInitializeWebAssemblyTargetInfo,
|
|
|
|
LLVMInitializeWebAssemblyTarget,
|
|
|
|
LLVMInitializeWebAssemblyTargetMC,
|
2020-11-02 14:59:45 -06:00
|
|
|
LLVMInitializeWebAssemblyAsmPrinter,
|
|
|
|
LLVMInitializeWebAssemblyAsmParser
|
2019-12-22 17:42:04 -05:00
|
|
|
);
|
2020-11-30 19:41:57 +00:00
|
|
|
init_target!(
|
|
|
|
llvm_component = "bpf",
|
|
|
|
LLVMInitializeBPFTargetInfo,
|
|
|
|
LLVMInitializeBPFTarget,
|
|
|
|
LLVMInitializeBPFTargetMC,
|
|
|
|
LLVMInitializeBPFAsmPrinter,
|
|
|
|
LLVMInitializeBPFAsmParser
|
|
|
|
);
|
2015-08-21 23:43:56 -05:00
|
|
|
}
|