private void makeObjectFile() { LLVM.InitializeX86TargetMC(); LLVM.InitializeX86Target(); LLVM.InitializeX86TargetInfo(); LLVM.InitializeX86AsmParser(); LLVM.InitializeX86AsmPrinter(); LLVMTargetRef target = LLVM.GetFirstTarget(); if (target.Pointer == IntPtr.Zero) { return; } string triple = getTargetTriple(); LLVMTargetMachineRef targetMachine = LLVM.CreateTargetMachine(target, triple, "generic", "", LLVMCodeGenOptLevel.LLVMCodeGenLevelDefault, LLVMRelocMode.LLVMRelocDefault, LLVMCodeModel.LLVMCodeModelDefault); #if EMIT_TO_FILE string message; unsafe { fixed(char *fileName = options.OutPath) { LLVM.TargetMachineEmitToFile(targetMachine, module, new IntPtr(fileName), LLVMCodeGenFileType.LLVMObjectFile, out message); LLVM.DisposeTargetMachine(targetMachine); } } if (!String.IsNullOrEmpty(message)) { log.globalError("Failed to emit object file. LLVM Error: {0}", message); } #else LLVM.TargetMachineEmitToMemoryBuffer(targetMachine, module, LLVMCodeGenFileType.LLVMObjectFile, out var _, out var memoryBuffer); size_t bufferSize = LLVM.GetBufferSize(memoryBuffer); IntPtr bufferStart = LLVM.GetBufferStart(memoryBuffer); unsafe { Stream s = new UnmanagedMemoryStream((byte *)bufferStart.ToPointer(), bufferSize); FileInfo file = new FileInfo(options.OutPath); if (file.Exists) { file.Delete(); } using (FileStream fs = file.Open(FileMode.Create, FileAccess.Write)) using (DisposableBuffer unused = new DisposableBuffer(memoryBuffer)) { s.CopyTo(fs); } } #endif }
private LLVMTargetDataRef TargetDataFromTriple(string triple) { LLVMTargetRef target = LLVMTargetRef.GetTargetFromTriple(triple); LLVMTargetMachineRef targetMachine = target.CreateTargetMachine(triple, "", "", LLVMCodeGenOptLevel.LLVMCodeGenLevelDefault, LLVMRelocMode.LLVMRelocDefault, LLVMCodeModel.LLVMCodeModelDefault); return(targetMachine.CreateTargetDataLayout()); }
internal static Target FromHandle(LLVMTargetRef targetHandle) { lock ( TargetMap ) { if (TargetMap.TryGetValue(targetHandle.Pointer, out Target retVal)) { return(retVal); } retVal = new Target(targetHandle); TargetMap.Add(targetHandle.Pointer, retVal); return(retVal); } }
internal static Target FromHandle(LLVMTargetRef targetHandle) { targetHandle.ValidateNotDefault(nameof(targetHandle)); lock ( TargetMap ) { if (TargetMap.TryGetValue(targetHandle, out Target retVal)) { return(retVal); } retVal = new Target(targetHandle); TargetMap.Add(targetHandle, retVal); return(retVal); } }
public static extern LLVMTargetMachineRef* CreateTargetMachine(LLVMTargetRef* T, [In][MarshalAs(UnmanagedType.LPStr)] string Triple, [In][MarshalAs(UnmanagedType.LPStr)] string CPU, [In][MarshalAs(UnmanagedType.LPStr)] string Features, LLVMCodeGenOptLevel Level, LLVMRelocMode Reloc, LLVMCodeModel CodeModel);
public static extern int TargetHasAsmBackend(LLVMTargetRef* T);
public static extern int TargetHasTargetMachine(LLVMTargetRef* T);
public static extern int TargetHasJIT(LLVMTargetRef* T);
public static extern System.IntPtr GetTargetDescription(LLVMTargetRef* T);
public static extern System.IntPtr GetTargetName(LLVMTargetRef* T);
public static extern LLVMTargetRef* GetNextTarget(LLVMTargetRef* T);
internal Target(LLVMTargetRef targetHandle) { targetHandle.ValidateNotDefault(nameof(targetHandle)); TargetHandle = targetHandle; }
private Target(LLVMTargetRef target) => _target = target;
internal Target(LLVMTargetRef targetHandle) { TargetHandle = targetHandle; }