diff --git a/Cargo.toml b/Cargo.toml index c9fd18a2f76..6f9314b7bea 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -64,6 +64,7 @@ target-bpf = [] target-lanai = [] target-webassembly = [] target-riscv = [] +target-loongarch = [] target-syncvm = [] target-all = [ "target-x86", @@ -82,6 +83,7 @@ target-all = [ "target-lanai", "target-webassembly", "target-riscv", + "target-loongarch", ] experimental = ["static-alloc"] nightly = ["inkwell_internals/nightly"] @@ -102,7 +104,7 @@ llvm-sys-120 = { package = "llvm-sys", version = "120.2.4", optional = true } llvm-sys-130 = { package = "llvm-sys", version = "130.0.4", optional = true } llvm-sys-140 = { package = "llvm-sys", version = "140.0.2", optional = true } llvm-sys-150 = { package = "llvm-sys", version = "150.0.3", optional = true } -llvm-sys-160 = { package = "llvm-sys", version = "160.0.2", optional = true } +llvm-sys-160 = { package = "llvm-sys", version = "160.1.0", optional = true } once_cell = "1.16" parking_lot = "0.12" static-alloc = { version = "0.2", optional = true } diff --git a/src/targets.rs b/src/targets.rs index cb0a9d35631..0e4f45e5e26 100644 --- a/src/targets.rs +++ b/src/targets.rs @@ -715,6 +715,45 @@ impl Target { } } + #[cfg(feature = "target-loongarch")] + #[llvm_versions(16.0..=latest)] + pub fn initialize_loongarch(config: &InitializationConfig) { + use llvm_sys::target::{ + LLVMInitializeLoongArchAsmParser, LLVMInitializeLoongArchAsmPrinter, LLVMInitializeLoongArchDisassembler, + LLVMInitializeLoongArchTarget, LLVMInitializeLoongArchTargetInfo, LLVMInitializeLoongArchTargetMC, + }; + + if config.base { + let _guard = TARGET_LOCK.write(); + unsafe { LLVMInitializeLoongArchTarget() }; + } + + if config.info { + let _guard = TARGET_LOCK.write(); + unsafe { LLVMInitializeLoongArchTargetInfo() }; + } + + if config.asm_printer { + let _guard = TARGET_LOCK.write(); + unsafe { LLVMInitializeLoongArchAsmPrinter() }; + } + + if config.asm_parser { + let _guard = TARGET_LOCK.write(); + unsafe { LLVMInitializeLoongArchAsmParser() }; + } + + if config.disassembler { + let _guard = TARGET_LOCK.write(); + unsafe { LLVMInitializeLoongArchDisassembler() }; + } + + if config.machine_code { + let _guard = TARGET_LOCK.write(); + unsafe { LLVMInitializeLoongArchTargetMC() }; + } + } + #[cfg(feature = "target-webassembly")] #[llvm_versions(8.0..=latest)] pub fn initialize_webassembly(config: &InitializationConfig) {