llvm_sys_featured/
target_machine.rs

1//! Target machine information, to generate assembly or object files.
2
3use super::prelude::*;
4use super::target::LLVMTargetDataRef;
5
6#[derive(Debug)]
7pub enum LLVMOpaqueTargetMachine {}
8
9pub type LLVMTargetMachineRef = *mut LLVMOpaqueTargetMachine;
10
11#[derive(Debug)]
12pub enum LLVMTarget {}
13
14pub type LLVMTargetRef = *mut LLVMTarget;
15
16#[repr(C)]
17#[derive(Clone, Copy, Debug, PartialEq)]
18pub enum LLVMCodeGenOptLevel {
19    LLVMCodeGenLevelNone = 0,
20    LLVMCodeGenLevelLess = 1,
21    LLVMCodeGenLevelDefault = 2,
22    LLVMCodeGenLevelAggressive = 3,
23}
24
25#[repr(C)]
26#[derive(Clone, Copy, Debug, PartialEq)]
27pub enum LLVMRelocMode {
28    LLVMRelocDefault = 0,
29    LLVMRelocStatic = 1,
30    LLVMRelocPIC = 2,
31    LLVMRelocDynamicNoPic = 3,
32    LLVMRelocROPI = 4,
33    LLVMRelocRWPI = 5,
34    LLVMRelocROPI_RWPI = 6,
35}
36
37#[repr(C)]
38#[derive(Clone, Copy, Debug, PartialEq)]
39pub enum LLVMCodeModel {
40    LLVMCodeModelDefault = 0,
41    LLVMCodeModelJITDefault = 1,
42    LLVMCodeModelTiny = 2,
43    LLVMCodeModelSmall = 3,
44    LLVMCodeModelKernel = 4,
45    LLVMCodeModelMedium = 5,
46    LLVMCodeModelLarge = 6,
47}
48
49#[repr(C)]
50#[derive(Clone, Copy, Debug, PartialEq)]
51pub enum LLVMCodeGenFileType {
52    LLVMAssemblyFile = 0,
53    LLVMObjectFile = 1,
54}
55
56extern "C" {
57    pub fn LLVMGetFirstTarget() -> LLVMTargetRef;
58    pub fn LLVMGetNextTarget(T: LLVMTargetRef) -> LLVMTargetRef;
59    pub fn LLVMGetTargetFromName(Name: *const ::libc::c_char) -> LLVMTargetRef;
60    pub fn LLVMGetTargetFromTriple(
61        Triple: *const ::libc::c_char,
62        T: *mut LLVMTargetRef,
63        ErrorMessage: *mut *mut ::libc::c_char,
64    ) -> LLVMBool;
65    pub fn LLVMGetTargetName(T: LLVMTargetRef) -> *const ::libc::c_char;
66    pub fn LLVMGetTargetDescription(T: LLVMTargetRef) -> *const ::libc::c_char;
67    pub fn LLVMTargetHasJIT(T: LLVMTargetRef) -> LLVMBool;
68    pub fn LLVMTargetHasTargetMachine(T: LLVMTargetRef) -> LLVMBool;
69    pub fn LLVMTargetHasAsmBackend(T: LLVMTargetRef) -> LLVMBool;
70    pub fn LLVMCreateTargetMachine(
71        T: LLVMTargetRef,
72        Triple: *const ::libc::c_char,
73        CPU: *const ::libc::c_char,
74        Features: *const ::libc::c_char,
75        Level: LLVMCodeGenOptLevel,
76        Reloc: LLVMRelocMode,
77        CodeModel: LLVMCodeModel,
78    ) -> LLVMTargetMachineRef;
79    pub fn LLVMDisposeTargetMachine(T: LLVMTargetMachineRef);
80    pub fn LLVMGetTargetMachineTarget(T: LLVMTargetMachineRef) -> LLVMTargetRef;
81    pub fn LLVMGetTargetMachineTriple(T: LLVMTargetMachineRef) -> *mut ::libc::c_char;
82    pub fn LLVMGetTargetMachineCPU(T: LLVMTargetMachineRef) -> *mut ::libc::c_char;
83    pub fn LLVMGetTargetMachineFeatureString(T: LLVMTargetMachineRef) -> *mut ::libc::c_char;
84    /// Create a DataLayout based on the target machine.
85    pub fn LLVMCreateTargetDataLayout(T: LLVMTargetMachineRef) -> LLVMTargetDataRef;
86    pub fn LLVMSetTargetMachineAsmVerbosity(T: LLVMTargetMachineRef, VerboseAsm: LLVMBool);
87    pub fn LLVMTargetMachineEmitToFile(
88        T: LLVMTargetMachineRef,
89        M: LLVMModuleRef,
90        Filename: *mut ::libc::c_char,
91        codegen: LLVMCodeGenFileType,
92        ErrorMessage: *mut *mut ::libc::c_char,
93    ) -> LLVMBool;
94    pub fn LLVMTargetMachineEmitToMemoryBuffer(
95        T: LLVMTargetMachineRef,
96        M: LLVMModuleRef,
97        codegen: LLVMCodeGenFileType,
98        ErrorMessage: *mut *mut ::libc::c_char,
99        OutMemBuf: *mut LLVMMemoryBufferRef,
100    ) -> LLVMBool;
101
102    pub fn LLVMGetDefaultTargetTriple() -> *mut ::libc::c_char;
103    /// Normalize a target triple. The result needs to be disposed with LLVMDisposeMessage.
104    pub fn LLVMNormalizeTargetTriple(triple: *const ::libc::c_char) -> *mut ::libc::c_char;
105    /// Get the host CPU as a string. The result needs to be disposed with LLVMDisposeMessage.
106    pub fn LLVMGetHostCPUName() -> *mut ::libc::c_char;
107    /// Get the host CPU's features as a string. The result needs to be disposed with LLVMDisposeMessage.
108    pub fn LLVMGetHostCPUFeatures() -> *mut ::libc::c_char;
109
110    pub fn LLVMAddAnalysisPasses(T: LLVMTargetMachineRef, PM: LLVMPassManagerRef);
111}