//! We do this instead of @cImport because the self-hosted compiler is easier //! to bootstrap if it does not depend on translate-c. /// Do not compare directly to .True, use toBool() instead. pub const Bool = enum(c_int) { False, True, _, pub fn fromBool(b: bool) Bool { return @as(Bool, @enumFromInt(@intFromBool(b))); } pub fn toBool(b: Bool) bool { return b != .False; } }; pub const MemoryBuffer = opaque { pub const createMemoryBufferWithMemoryRange = LLVMCreateMemoryBufferWithMemoryRange; pub const dispose = LLVMDisposeMemoryBuffer; extern fn LLVMCreateMemoryBufferWithMemoryRange(InputData: [*]const u8, InputDataLength: usize, BufferName: ?[*:0]const u8, RequiresNullTerminator: Bool) *MemoryBuffer; extern fn LLVMDisposeMemoryBuffer(MemBuf: *MemoryBuffer) void; }; /// Make sure to use the *InContext functions instead of the global ones. pub const Context = opaque { pub const create = LLVMContextCreate; extern fn LLVMContextCreate() *Context; pub const dispose = LLVMContextDispose; extern fn LLVMContextDispose(C: *Context) void; pub const parseBitcodeInContext2 = LLVMParseBitcodeInContext2; extern fn LLVMParseBitcodeInContext2(C: *Context, MemBuf: *MemoryBuffer, OutModule: **Module) Bool; pub const setOptBisectLimit = ZigLLVMSetOptBisectLimit; extern fn ZigLLVMSetOptBisectLimit(C: *Context, limit: c_int) void; }; pub const Module = opaque { pub const dispose = LLVMDisposeModule; extern fn LLVMDisposeModule(*Module) void; pub const setModulePICLevel = ZigLLVMSetModulePICLevel; extern fn ZigLLVMSetModulePICLevel(module: *Module) void; pub const setModulePIELevel = ZigLLVMSetModulePIELevel; extern fn ZigLLVMSetModulePIELevel(module: *Module) void; pub const setModuleCodeModel = ZigLLVMSetModuleCodeModel; extern fn ZigLLVMSetModuleCodeModel(module: *Module, code_model: CodeModel) void; }; pub const disposeMessage = LLVMDisposeMessage; extern fn LLVMDisposeMessage(Message: [*:0]const u8) void; pub const TargetMachine = opaque { pub const create = ZigLLVMCreateTargetMachine; extern fn ZigLLVMCreateTargetMachine( T: *Target, Triple: [*:0]const u8, CPU: ?[*:0]const u8, Features: ?[*:0]const u8, Level: CodeGenOptLevel, Reloc: RelocMode, CodeModel: CodeModel, function_sections: bool, data_sections: bool, float_abi: ABIType, abi_name: ?[*:0]const u8, ) *TargetMachine; pub const dispose = LLVMDisposeTargetMachine; extern fn LLVMDisposeTargetMachine(T: *TargetMachine) void; pub const emitToFile = ZigLLVMTargetMachineEmitToFile; extern fn ZigLLVMTargetMachineEmitToFile( T: *TargetMachine, M: *Module, ErrorMessage: *[*:0]const u8, is_debug: bool, is_small: bool, time_report: bool, tsan: bool, lto: bool, asm_filename: ?[*:0]const u8, bin_filename: ?[*:0]const u8, llvm_ir_filename: ?[*:0]const u8, bitcode_filename: ?[*:0]const u8, ) bool; }; pub const TargetData = opaque { pub const dispose = LLVMDisposeTargetData; extern fn LLVMDisposeTargetData(*TargetData) void; }; pub const CodeModel = enum(c_int) { Default, JITDefault, Tiny, Small, Kernel, Medium, Large, }; pub const CodeGenOptLevel = enum(c_int) { None, Less, Default, Aggressive, }; pub const RelocMode = enum(c_int) { Default, Static, PIC, DynamicNoPIC, ROPI, RWPI, ROPI_RWPI, }; pub const ABIType = enum(c_int) { /// Target-specific (either soft or hard depending on triple, etc). Default, /// Soft float. Soft, // Hard float. Hard, }; pub const Target = opaque { pub const getFromTriple = LLVMGetTargetFromTriple; extern fn LLVMGetTargetFromTriple(Triple: [*:0]const u8, T: **Target, ErrorMessage: *[*:0]const u8) Bool; }; pub extern fn LLVMInitializeAArch64TargetInfo() void; pub extern fn LLVMInitializeAMDGPUTargetInfo() void; pub extern fn LLVMInitializeARMTargetInfo() void; pub extern fn LLVMInitializeAVRTargetInfo() void; pub extern fn LLVMInitializeBPFTargetInfo() void; pub extern fn LLVMInitializeHexagonTargetInfo() void; pub extern fn LLVMInitializeLanaiTargetInfo() void; pub extern fn LLVMInitializeMipsTargetInfo() void; pub extern fn LLVMInitializeMSP430TargetInfo() void; pub extern fn LLVMInitializeNVPTXTargetInfo() void; pub extern fn LLVMInitializePowerPCTargetInfo() void; pub extern fn LLVMInitializeRISCVTargetInfo() void; pub extern fn LLVMInitializeSparcTargetInfo() void; pub extern fn LLVMInitializeSystemZTargetInfo() void; pub extern fn LLVMInitializeWebAssemblyTargetInfo() void; pub extern fn LLVMInitializeX86TargetInfo() void; pub extern fn LLVMInitializeXCoreTargetInfo() void; pub extern fn LLVMInitializeXtensaTargetInfo() void; pub extern fn LLVMInitializeM68kTargetInfo() void; pub extern fn LLVMInitializeCSKYTargetInfo() void; pub extern fn LLVMInitializeVETargetInfo() void; pub extern fn LLVMInitializeARCTargetInfo() void; pub extern fn LLVMInitializeAArch64Target() void; pub extern fn LLVMInitializeAMDGPUTarget() void; pub extern fn LLVMInitializeARMTarget() void; pub extern fn LLVMInitializeAVRTarget() void; pub extern fn LLVMInitializeBPFTarget() void; pub extern fn LLVMInitializeHexagonTarget() void; pub extern fn LLVMInitializeLanaiTarget() void; pub extern fn LLVMInitializeMipsTarget() void; pub extern fn LLVMInitializeMSP430Target() void; pub extern fn LLVMInitializeNVPTXTarget() void; pub extern fn LLVMInitializePowerPCTarget() void; pub extern fn LLVMInitializeRISCVTarget() void; pub extern fn LLVMInitializeSparcTarget() void; pub extern fn LLVMInitializeSystemZTarget() void; pub extern fn LLVMInitializeWebAssemblyTarget() void; pub extern fn LLVMInitializeX86Target() void; pub extern fn LLVMInitializeXCoreTarget() void; pub extern fn LLVMInitializeXtensaTarget() void; pub extern fn LLVMInitializeM68kTarget() void; pub extern fn LLVMInitializeVETarget() void; pub extern fn LLVMInitializeCSKYTarget() void; pub extern fn LLVMInitializeARCTarget() void; pub extern fn LLVMInitializeAArch64TargetMC() void; pub extern fn LLVMInitializeAMDGPUTargetMC() void; pub extern fn LLVMInitializeARMTargetMC() void; pub extern fn LLVMInitializeAVRTargetMC() void; pub extern fn LLVMInitializeBPFTargetMC() void; pub extern fn LLVMInitializeHexagonTargetMC() void; pub extern fn LLVMInitializeLanaiTargetMC() void; pub extern fn LLVMInitializeMipsTargetMC() void; pub extern fn LLVMInitializeMSP430TargetMC() void; pub extern fn LLVMInitializeNVPTXTargetMC() void; pub extern fn LLVMInitializePowerPCTargetMC() void; pub extern fn LLVMInitializeRISCVTargetMC() void; pub extern fn LLVMInitializeSparcTargetMC() void; pub extern fn LLVMInitializeSystemZTargetMC() void; pub extern fn LLVMInitializeWebAssemblyTargetMC() void; pub extern fn LLVMInitializeX86TargetMC() void; pub extern fn LLVMInitializeXCoreTargetMC() void; pub extern fn LLVMInitializeXtensaTargetMC() void; pub extern fn LLVMInitializeM68kTargetMC() void; pub extern fn LLVMInitializeCSKYTargetMC() void; pub extern fn LLVMInitializeVETargetMC() void; pub extern fn LLVMInitializeARCTargetMC() void; pub extern fn LLVMInitializeAArch64AsmPrinter() void; pub extern fn LLVMInitializeAMDGPUAsmPrinter() void; pub extern fn LLVMInitializeARMAsmPrinter() void; pub extern fn LLVMInitializeAVRAsmPrinter() void; pub extern fn LLVMInitializeBPFAsmPrinter() void; pub extern fn LLVMInitializeHexagonAsmPrinter() void; pub extern fn LLVMInitializeLanaiAsmPrinter() void; pub extern fn LLVMInitializeMipsAsmPrinter() void; pub extern fn LLVMInitializeMSP430AsmPrinter() void; pub extern fn LLVMInitializeNVPTXAsmPrinter() void; pub extern fn LLVMInitializePowerPCAsmPrinter() void; pub extern fn LLVMInitializeRISCVAsmPrinter() void; pub extern fn LLVMInitializeSparcAsmPrinter() void; pub extern fn LLVMInitializeSystemZAsmPrinter() void; pub extern fn LLVMInitializeWebAssemblyAsmPrinter() void; pub extern fn LLVMInitializeX86AsmPrinter() void; pub extern fn LLVMInitializeXCoreAsmPrinter() void; pub extern fn LLVMInitializeM68kAsmPrinter() void; pub extern fn LLVMInitializeVEAsmPrinter() void; pub extern fn LLVMInitializeARCAsmPrinter() void; pub extern fn LLVMInitializeAArch64AsmParser() void; pub extern fn LLVMInitializeAMDGPUAsmParser() void; pub extern fn LLVMInitializeARMAsmParser() void; pub extern fn LLVMInitializeAVRAsmParser() void; pub extern fn LLVMInitializeBPFAsmParser() void; pub extern fn LLVMInitializeHexagonAsmParser() void; pub extern fn LLVMInitializeLanaiAsmParser() void; pub extern fn LLVMInitializeMipsAsmParser() void; pub extern fn LLVMInitializeMSP430AsmParser() void; pub extern fn LLVMInitializePowerPCAsmParser() void; pub extern fn LLVMInitializeRISCVAsmParser() void; pub extern fn LLVMInitializeSparcAsmParser() void; pub extern fn LLVMInitializeSystemZAsmParser() void; pub extern fn LLVMInitializeWebAssemblyAsmParser() void; pub extern fn LLVMInitializeX86AsmParser() void; pub extern fn LLVMInitializeXtensaAsmParser() void; pub extern fn LLVMInitializeM68kAsmParser() void; pub extern fn LLVMInitializeCSKYAsmParser() void; pub extern fn LLVMInitializeVEAsmParser() void; extern fn ZigLLDLinkCOFF(argc: c_int, argv: [*:null]const ?[*:0]const u8, can_exit_early: bool, disable_output: bool) bool; extern fn ZigLLDLinkELF(argc: c_int, argv: [*:null]const ?[*:0]const u8, can_exit_early: bool, disable_output: bool) bool; extern fn ZigLLDLinkWasm(argc: c_int, argv: [*:null]const ?[*:0]const u8, can_exit_early: bool, disable_output: bool) bool; pub const LinkCOFF = ZigLLDLinkCOFF; pub const LinkELF = ZigLLDLinkELF; pub const LinkWasm = ZigLLDLinkWasm; pub const ObjectFormatType = enum(c_int) { Unknown, COFF, DXContainer, ELF, GOFF, MachO, SPIRV, Wasm, XCOFF, }; pub const WriteArchive = ZigLLVMWriteArchive; extern fn ZigLLVMWriteArchive( archive_name: [*:0]const u8, file_names_ptr: [*]const [*:0]const u8, file_names_len: usize, os_type: OSType, ) bool; pub const OSType = enum(c_int) { UnknownOS, Ananas, CloudABI, Darwin, DragonFly, FreeBSD, Fuchsia, IOS, KFreeBSD, Linux, Lv2, MacOSX, NetBSD, OpenBSD, Solaris, UEFI, Win32, ZOS, Haiku, Minix, RTEMS, NaCl, AIX, CUDA, NVCL, AMDHSA, PS4, PS5, ELFIAMCU, TvOS, WatchOS, DriverKit, Mesa3D, Contiki, AMDPAL, HermitCore, Hurd, WASI, Emscripten, ShaderModel, LiteOS, }; pub const ArchType = enum(c_int) { UnknownArch, arm, armeb, aarch64, aarch64_be, aarch64_32, arc, avr, bpfel, bpfeb, csky, dxil, hexagon, loongarch32, loongarch64, m68k, mips, mipsel, mips64, mips64el, msp430, ppc, ppcle, ppc64, ppc64le, r600, amdgcn, riscv32, riscv64, sparc, sparcv9, sparcel, systemz, tce, tcele, thumb, thumbeb, x86, x86_64, xcore, xtensa, nvptx, nvptx64, le32, le64, amdil, amdil64, hsail, hsail64, spir, spir64, spirv32, spirv64, kalimba, shave, lanai, wasm32, wasm64, renderscript32, renderscript64, ve, }; pub const ParseCommandLineOptions = ZigLLVMParseCommandLineOptions; extern fn ZigLLVMParseCommandLineOptions(argc: usize, argv: [*]const [*:0]const u8) void; pub const WriteImportLibrary = ZigLLVMWriteImportLibrary; extern fn ZigLLVMWriteImportLibrary( def_path: [*:0]const u8, arch: ArchType, output_lib_path: [*:0]const u8, kill_at: bool, ) bool;