294 lines
12 KiB
Zig
294 lines
12 KiB
Zig
const c = @import("c.zig");
|
|
const assert = @import("std").debug.assert;
|
|
|
|
// we wrap the c module for 3 reasons:
|
|
// 1. to avoid accidentally calling the non-thread-safe functions
|
|
// 2. patch up some of the types to remove nullability
|
|
// 3. some functions have been augmented by zig_llvm.cpp to be more powerful,
|
|
// such as ZigLLVMTargetMachineEmitToFile
|
|
|
|
pub const AttributeIndex = c_uint;
|
|
pub const Bool = c_int;
|
|
|
|
pub const Builder = c.LLVMBuilderRef.Child.Child;
|
|
pub const Context = c.LLVMContextRef.Child.Child;
|
|
pub const Module = c.LLVMModuleRef.Child.Child;
|
|
pub const Value = c.LLVMValueRef.Child.Child;
|
|
pub const Type = c.LLVMTypeRef.Child.Child;
|
|
pub const BasicBlock = c.LLVMBasicBlockRef.Child.Child;
|
|
pub const Attribute = c.LLVMAttributeRef.Child.Child;
|
|
pub const Target = c.LLVMTargetRef.Child.Child;
|
|
pub const TargetMachine = c.LLVMTargetMachineRef.Child.Child;
|
|
pub const TargetData = c.LLVMTargetDataRef.Child.Child;
|
|
pub const DIBuilder = c.ZigLLVMDIBuilder;
|
|
pub const DIFile = c.ZigLLVMDIFile;
|
|
pub const DICompileUnit = c.ZigLLVMDICompileUnit;
|
|
|
|
pub const ABIAlignmentOfType = c.LLVMABIAlignmentOfType;
|
|
pub const AddAttributeAtIndex = c.LLVMAddAttributeAtIndex;
|
|
pub const AddModuleCodeViewFlag = c.ZigLLVMAddModuleCodeViewFlag;
|
|
pub const AddModuleDebugInfoFlag = c.ZigLLVMAddModuleDebugInfoFlag;
|
|
pub const ClearCurrentDebugLocation = c.ZigLLVMClearCurrentDebugLocation;
|
|
pub const ConstAllOnes = c.LLVMConstAllOnes;
|
|
pub const ConstArray = c.LLVMConstArray;
|
|
pub const ConstBitCast = c.LLVMConstBitCast;
|
|
pub const ConstIntOfArbitraryPrecision = c.LLVMConstIntOfArbitraryPrecision;
|
|
pub const ConstNeg = c.LLVMConstNeg;
|
|
pub const ConstStructInContext = c.LLVMConstStructInContext;
|
|
pub const DIBuilderFinalize = c.ZigLLVMDIBuilderFinalize;
|
|
pub const DisposeBuilder = c.LLVMDisposeBuilder;
|
|
pub const DisposeDIBuilder = c.ZigLLVMDisposeDIBuilder;
|
|
pub const DisposeMessage = c.LLVMDisposeMessage;
|
|
pub const DisposeModule = c.LLVMDisposeModule;
|
|
pub const DisposeTargetData = c.LLVMDisposeTargetData;
|
|
pub const DisposeTargetMachine = c.LLVMDisposeTargetMachine;
|
|
pub const DoubleTypeInContext = c.LLVMDoubleTypeInContext;
|
|
pub const DumpModule = c.LLVMDumpModule;
|
|
pub const FP128TypeInContext = c.LLVMFP128TypeInContext;
|
|
pub const FloatTypeInContext = c.LLVMFloatTypeInContext;
|
|
pub const GetEnumAttributeKindForName = c.LLVMGetEnumAttributeKindForName;
|
|
pub const GetMDKindIDInContext = c.LLVMGetMDKindIDInContext;
|
|
pub const GetUndef = c.LLVMGetUndef;
|
|
pub const HalfTypeInContext = c.LLVMHalfTypeInContext;
|
|
pub const InitializeAllAsmParsers = c.LLVMInitializeAllAsmParsers;
|
|
pub const InitializeAllAsmPrinters = c.LLVMInitializeAllAsmPrinters;
|
|
pub const InitializeAllTargetInfos = c.LLVMInitializeAllTargetInfos;
|
|
pub const InitializeAllTargetMCs = c.LLVMInitializeAllTargetMCs;
|
|
pub const InitializeAllTargets = c.LLVMInitializeAllTargets;
|
|
pub const InsertBasicBlockInContext = c.LLVMInsertBasicBlockInContext;
|
|
pub const Int128TypeInContext = c.LLVMInt128TypeInContext;
|
|
pub const Int16TypeInContext = c.LLVMInt16TypeInContext;
|
|
pub const Int1TypeInContext = c.LLVMInt1TypeInContext;
|
|
pub const Int32TypeInContext = c.LLVMInt32TypeInContext;
|
|
pub const Int64TypeInContext = c.LLVMInt64TypeInContext;
|
|
pub const Int8TypeInContext = c.LLVMInt8TypeInContext;
|
|
pub const IntPtrTypeForASInContext = c.LLVMIntPtrTypeForASInContext;
|
|
pub const IntPtrTypeInContext = c.LLVMIntPtrTypeInContext;
|
|
pub const LabelTypeInContext = c.LLVMLabelTypeInContext;
|
|
pub const MDNodeInContext = c.LLVMMDNodeInContext;
|
|
pub const MDStringInContext = c.LLVMMDStringInContext;
|
|
pub const MetadataTypeInContext = c.LLVMMetadataTypeInContext;
|
|
pub const PPCFP128TypeInContext = c.LLVMPPCFP128TypeInContext;
|
|
pub const SetAlignment = c.LLVMSetAlignment;
|
|
pub const SetDataLayout = c.LLVMSetDataLayout;
|
|
pub const SetGlobalConstant = c.LLVMSetGlobalConstant;
|
|
pub const SetInitializer = c.LLVMSetInitializer;
|
|
pub const SetLinkage = c.LLVMSetLinkage;
|
|
pub const SetTarget = c.LLVMSetTarget;
|
|
pub const SetUnnamedAddr = c.LLVMSetUnnamedAddr;
|
|
pub const SetVolatile = c.LLVMSetVolatile;
|
|
pub const StructTypeInContext = c.LLVMStructTypeInContext;
|
|
pub const TokenTypeInContext = c.LLVMTokenTypeInContext;
|
|
pub const X86FP80TypeInContext = c.LLVMX86FP80TypeInContext;
|
|
pub const X86MMXTypeInContext = c.LLVMX86MMXTypeInContext;
|
|
|
|
pub const AddGlobal = LLVMAddGlobal;
|
|
extern fn LLVMAddGlobal(M: *Module, Ty: *Type, Name: [*:0]const u8) ?*Value;
|
|
|
|
pub const ConstStringInContext = LLVMConstStringInContext;
|
|
extern fn LLVMConstStringInContext(C: *Context, Str: [*]const u8, Length: c_uint, DontNullTerminate: Bool) ?*Value;
|
|
|
|
pub const ConstInt = LLVMConstInt;
|
|
extern fn LLVMConstInt(IntTy: *Type, N: c_ulonglong, SignExtend: Bool) ?*Value;
|
|
|
|
pub const BuildLoad = LLVMBuildLoad;
|
|
extern fn LLVMBuildLoad(arg0: *Builder, PointerVal: *Value, Name: [*:0]const u8) ?*Value;
|
|
|
|
pub const ConstNull = LLVMConstNull;
|
|
extern fn LLVMConstNull(Ty: *Type) ?*Value;
|
|
|
|
pub const CreateStringAttribute = LLVMCreateStringAttribute;
|
|
extern fn LLVMCreateStringAttribute(
|
|
C: *Context,
|
|
K: [*]const u8,
|
|
KLength: c_uint,
|
|
V: [*]const u8,
|
|
VLength: c_uint,
|
|
) ?*Attribute;
|
|
|
|
pub const CreateEnumAttribute = LLVMCreateEnumAttribute;
|
|
extern fn LLVMCreateEnumAttribute(C: *Context, KindID: c_uint, Val: u64) ?*Attribute;
|
|
|
|
pub const AddFunction = LLVMAddFunction;
|
|
extern fn LLVMAddFunction(M: *Module, Name: [*:0]const u8, FunctionTy: *Type) ?*Value;
|
|
|
|
pub const CreateCompileUnit = ZigLLVMCreateCompileUnit;
|
|
extern fn ZigLLVMCreateCompileUnit(
|
|
dibuilder: *DIBuilder,
|
|
lang: c_uint,
|
|
difile: *DIFile,
|
|
producer: [*:0]const u8,
|
|
is_optimized: bool,
|
|
flags: [*:0]const u8,
|
|
runtime_version: c_uint,
|
|
split_name: [*:0]const u8,
|
|
dwo_id: u64,
|
|
emit_debug_info: bool,
|
|
) ?*DICompileUnit;
|
|
|
|
pub const CreateFile = ZigLLVMCreateFile;
|
|
extern fn ZigLLVMCreateFile(dibuilder: *DIBuilder, filename: [*:0]const u8, directory: [*:0]const u8) ?*DIFile;
|
|
|
|
pub const ArrayType = LLVMArrayType;
|
|
extern fn LLVMArrayType(ElementType: *Type, ElementCount: c_uint) ?*Type;
|
|
|
|
pub const CreateDIBuilder = ZigLLVMCreateDIBuilder;
|
|
extern fn ZigLLVMCreateDIBuilder(module: *Module, allow_unresolved: bool) ?*DIBuilder;
|
|
|
|
pub const PointerType = LLVMPointerType;
|
|
extern fn LLVMPointerType(ElementType: *Type, AddressSpace: c_uint) ?*Type;
|
|
|
|
pub const CreateBuilderInContext = LLVMCreateBuilderInContext;
|
|
extern fn LLVMCreateBuilderInContext(C: *Context) ?*Builder;
|
|
|
|
pub const IntTypeInContext = LLVMIntTypeInContext;
|
|
extern fn LLVMIntTypeInContext(C: *Context, NumBits: c_uint) ?*Type;
|
|
|
|
pub const ModuleCreateWithNameInContext = LLVMModuleCreateWithNameInContext;
|
|
extern fn LLVMModuleCreateWithNameInContext(ModuleID: [*:0]const u8, C: *Context) ?*Module;
|
|
|
|
pub const VoidTypeInContext = LLVMVoidTypeInContext;
|
|
extern fn LLVMVoidTypeInContext(C: *Context) ?*Type;
|
|
|
|
pub const ContextCreate = LLVMContextCreate;
|
|
extern fn LLVMContextCreate() ?*Context;
|
|
|
|
pub const ContextDispose = LLVMContextDispose;
|
|
extern fn LLVMContextDispose(C: *Context) void;
|
|
|
|
pub const CopyStringRepOfTargetData = LLVMCopyStringRepOfTargetData;
|
|
extern fn LLVMCopyStringRepOfTargetData(TD: *TargetData) ?[*:0]u8;
|
|
|
|
pub const CreateTargetDataLayout = LLVMCreateTargetDataLayout;
|
|
extern fn LLVMCreateTargetDataLayout(T: *TargetMachine) ?*TargetData;
|
|
|
|
pub const CreateTargetMachine = 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,
|
|
) ?*TargetMachine;
|
|
|
|
pub const GetHostCPUName = LLVMGetHostCPUName;
|
|
extern fn LLVMGetHostCPUName() ?[*:0]u8;
|
|
|
|
pub const GetNativeFeatures = ZigLLVMGetNativeFeatures;
|
|
extern fn ZigLLVMGetNativeFeatures() ?[*:0]u8;
|
|
|
|
pub const GetElementType = LLVMGetElementType;
|
|
extern fn LLVMGetElementType(Ty: *Type) *Type;
|
|
|
|
pub const TypeOf = LLVMTypeOf;
|
|
extern fn LLVMTypeOf(Val: *Value) *Type;
|
|
|
|
pub const BuildStore = LLVMBuildStore;
|
|
extern fn LLVMBuildStore(arg0: *Builder, Val: *Value, Ptr: *Value) ?*Value;
|
|
|
|
pub const BuildAlloca = LLVMBuildAlloca;
|
|
extern fn LLVMBuildAlloca(arg0: *Builder, Ty: *Type, Name: ?[*:0]const u8) ?*Value;
|
|
|
|
pub const ConstInBoundsGEP = LLVMConstInBoundsGEP;
|
|
pub extern fn LLVMConstInBoundsGEP(ConstantVal: *Value, ConstantIndices: [*]*Value, NumIndices: c_uint) ?*Value;
|
|
|
|
pub const GetTargetFromTriple = LLVMGetTargetFromTriple;
|
|
extern fn LLVMGetTargetFromTriple(Triple: [*:0]const u8, T: **Target, ErrorMessage: ?*[*:0]u8) Bool;
|
|
|
|
pub const VerifyModule = LLVMVerifyModule;
|
|
extern fn LLVMVerifyModule(M: *Module, Action: VerifierFailureAction, OutMessage: *?[*:0]u8) Bool;
|
|
|
|
pub const GetInsertBlock = LLVMGetInsertBlock;
|
|
extern fn LLVMGetInsertBlock(Builder: *Builder) *BasicBlock;
|
|
|
|
pub const FunctionType = LLVMFunctionType;
|
|
extern fn LLVMFunctionType(
|
|
ReturnType: *Type,
|
|
ParamTypes: [*]*Type,
|
|
ParamCount: c_uint,
|
|
IsVarArg: Bool,
|
|
) ?*Type;
|
|
|
|
pub const GetParam = LLVMGetParam;
|
|
extern fn LLVMGetParam(Fn: *Value, Index: c_uint) *Value;
|
|
|
|
pub const AppendBasicBlockInContext = LLVMAppendBasicBlockInContext;
|
|
extern fn LLVMAppendBasicBlockInContext(C: *Context, Fn: *Value, Name: [*:0]const u8) ?*BasicBlock;
|
|
|
|
pub const PositionBuilderAtEnd = LLVMPositionBuilderAtEnd;
|
|
extern fn LLVMPositionBuilderAtEnd(Builder: *Builder, Block: *BasicBlock) void;
|
|
|
|
pub const AbortProcessAction = VerifierFailureAction.LLVMAbortProcessAction;
|
|
pub const PrintMessageAction = VerifierFailureAction.LLVMPrintMessageAction;
|
|
pub const ReturnStatusAction = VerifierFailureAction.LLVMReturnStatusAction;
|
|
pub const VerifierFailureAction = c.LLVMVerifierFailureAction;
|
|
|
|
pub const CodeGenLevelNone = CodeGenOptLevel.LLVMCodeGenLevelNone;
|
|
pub const CodeGenLevelLess = CodeGenOptLevel.LLVMCodeGenLevelLess;
|
|
pub const CodeGenLevelDefault = CodeGenOptLevel.LLVMCodeGenLevelDefault;
|
|
pub const CodeGenLevelAggressive = CodeGenOptLevel.LLVMCodeGenLevelAggressive;
|
|
pub const CodeGenOptLevel = c.LLVMCodeGenOptLevel;
|
|
|
|
pub const RelocDefault = RelocMode.LLVMRelocDefault;
|
|
pub const RelocStatic = RelocMode.LLVMRelocStatic;
|
|
pub const RelocPIC = RelocMode.LLVMRelocPIC;
|
|
pub const RelocDynamicNoPic = RelocMode.LLVMRelocDynamicNoPic;
|
|
pub const RelocMode = c.LLVMRelocMode;
|
|
|
|
pub const CodeModelDefault = CodeModel.LLVMCodeModelDefault;
|
|
pub const CodeModelJITDefault = CodeModel.LLVMCodeModelJITDefault;
|
|
pub const CodeModelSmall = CodeModel.LLVMCodeModelSmall;
|
|
pub const CodeModelKernel = CodeModel.LLVMCodeModelKernel;
|
|
pub const CodeModelMedium = CodeModel.LLVMCodeModelMedium;
|
|
pub const CodeModelLarge = CodeModel.LLVMCodeModelLarge;
|
|
pub const CodeModel = c.LLVMCodeModel;
|
|
|
|
pub const EmitAssembly = EmitOutputType.ZigLLVM_EmitAssembly;
|
|
pub const EmitBinary = EmitOutputType.ZigLLVM_EmitBinary;
|
|
pub const EmitLLVMIr = EmitOutputType.ZigLLVM_EmitLLVMIr;
|
|
pub const EmitOutputType = c.ZigLLVM_EmitOutputType;
|
|
|
|
pub const CCallConv = CallConv.LLVMCCallConv;
|
|
pub const FastCallConv = CallConv.LLVMFastCallConv;
|
|
pub const ColdCallConv = CallConv.LLVMColdCallConv;
|
|
pub const WebKitJSCallConv = CallConv.LLVMWebKitJSCallConv;
|
|
pub const AnyRegCallConv = CallConv.LLVMAnyRegCallConv;
|
|
pub const X86StdcallCallConv = CallConv.LLVMX86StdcallCallConv;
|
|
pub const X86FastcallCallConv = CallConv.LLVMX86FastcallCallConv;
|
|
pub const CallConv = c.LLVMCallConv;
|
|
|
|
pub const CallAttr = extern enum {
|
|
Auto,
|
|
NeverTail,
|
|
NeverInline,
|
|
AlwaysTail,
|
|
AlwaysInline,
|
|
};
|
|
|
|
fn removeNullability(comptime T: type) type {
|
|
comptime assert(@typeInfo(T).Pointer.size == .C);
|
|
return *T.Child;
|
|
}
|
|
|
|
pub const BuildRet = LLVMBuildRet;
|
|
extern fn LLVMBuildRet(arg0: *Builder, V: ?*Value) ?*Value;
|
|
|
|
pub const TargetMachineEmitToFile = ZigLLVMTargetMachineEmitToFile;
|
|
extern fn ZigLLVMTargetMachineEmitToFile(
|
|
targ_machine_ref: *TargetMachine,
|
|
module_ref: *Module,
|
|
filename: [*:0]const u8,
|
|
output_type: EmitOutputType,
|
|
error_message: *[*:0]u8,
|
|
is_debug: bool,
|
|
is_small: bool,
|
|
) bool;
|
|
|
|
pub const BuildCall = ZigLLVMBuildCall;
|
|
extern fn ZigLLVMBuildCall(B: *Builder, Fn: *Value, Args: [*]*Value, NumArgs: c_uint, CC: CallConv, fn_inline: CallAttr, Name: [*:0]const u8) ?*Value;
|
|
|
|
pub const PrivateLinkage = c.LLVMLinkage.LLVMPrivateLinkage;
|