Example #1
0
        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
        }
Example #2
0
        private LLVMTargetDataRef TargetDataFromTriple(string triple)
        {
            LLVMTargetRef        target        = LLVMTargetRef.GetTargetFromTriple(triple);
            LLVMTargetMachineRef targetMachine = target.CreateTargetMachine(triple, "", "",
                                                                            LLVMCodeGenOptLevel.LLVMCodeGenLevelDefault, LLVMRelocMode.LLVMRelocDefault,
                                                                            LLVMCodeModel.LLVMCodeModelDefault);

            return(targetMachine.CreateTargetDataLayout());
        }
Example #3
0
        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);
            }
        }
Example #4
0
        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);
Example #12
0
        internal Target(LLVMTargetRef targetHandle)
        {
            targetHandle.ValidateNotDefault(nameof(targetHandle));

            TargetHandle = targetHandle;
        }
Example #13
0
 private Target(LLVMTargetRef target) => _target = target;
Example #14
0
 internal Target(LLVMTargetRef targetHandle)
 {
     TargetHandle = targetHandle;
 }