added TargetRegistry_targets_list
this allows all targets to be enumerated. this is generally useful, but i specifically wanted to be able to see which targets report having a disassembler. it is necessary to init the various target components in order for them to report that they have one, thus i added InitializeAllDisassemblers and InitializeAllAsmParsers to TargetSelect.py
This commit is contained in:
parent
ef59848d18
commit
8f2c27ba41
4 changed files with 45 additions and 2 deletions
|
|
@ -946,7 +946,6 @@ PyObject* TargetRegistry_lookupTarget(const std::string &Arch,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static
|
static
|
||||||
PyObject* TargetRegistry_getClosestTargetForJIT(PyObject* Error)
|
PyObject* TargetRegistry_getClosestTargetForJIT(PyObject* Error)
|
||||||
{
|
{
|
||||||
|
|
@ -967,6 +966,16 @@ PyObject* TargetRegistry_getClosestTargetForJIT(PyObject* Error)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
PyObject* TargetRegistry_targets_list()
|
||||||
|
{
|
||||||
|
using namespace llvm;
|
||||||
|
|
||||||
|
return iterator_to_pylist_deref<TargetRegistry::iterator>(
|
||||||
|
TargetRegistry::begin(), TargetRegistry::end(),
|
||||||
|
"llvm::Target", "llvm::Target");
|
||||||
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
PyObject* llvm_sys_getHostCPUFeatures(PyObject* Features)
|
PyObject* llvm_sys_getHostCPUFeatures(PyObject* Features)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -67,4 +67,5 @@ class TargetRegistry:
|
||||||
PyObjectPtr, # std::string &Error
|
PyObjectPtr, # std::string &Error
|
||||||
)
|
)
|
||||||
|
|
||||||
|
targetsList = CustomStaticMethod('TargetRegistry_targets_list', PyObjectPtr)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,9 @@ InitializeAllTargets = llvm.Function('InitializeAllTargets')
|
||||||
InitializeAllTargetInfos = llvm.Function('InitializeAllTargetInfos')
|
InitializeAllTargetInfos = llvm.Function('InitializeAllTargetInfos')
|
||||||
InitializeAllTargetMCs = llvm.Function('InitializeAllTargetMCs')
|
InitializeAllTargetMCs = llvm.Function('InitializeAllTargetMCs')
|
||||||
InitializeAllAsmPrinters = llvm.Function('InitializeAllAsmPrinters')
|
InitializeAllAsmPrinters = llvm.Function('InitializeAllAsmPrinters')
|
||||||
|
InitializeAllDisassemblers = llvm.Function('InitializeAllDisassemblers')
|
||||||
|
InitializeAllAsmParsers = llvm.Function('InitializeAllAsmParsers')
|
||||||
|
|
||||||
|
|
||||||
for target in TARGETS_BUILT:
|
for target in TARGETS_BUILT:
|
||||||
decls = 'Target', 'TargetInfo', 'TargetMC', 'AsmPrinter'
|
decls = 'Target', 'TargetInfo', 'TargetMC', 'AsmPrinter'
|
||||||
|
|
|
||||||
30
test/target_info.py
Normal file
30
test/target_info.py
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
from llvmpy.api import llvm;
|
||||||
|
llvm.InitializeAllTargets()
|
||||||
|
llvm.InitializeAllTargetInfos()
|
||||||
|
llvm.InitializeAllTargetMCs()
|
||||||
|
llvm.InitializeAllAsmPrinters()
|
||||||
|
llvm.InitializeAllDisassemblers()
|
||||||
|
llvm.InitializeAllAsmParsers()
|
||||||
|
|
||||||
|
mthds = (
|
||||||
|
("description:", "getShortDescription"),
|
||||||
|
("has JIT:", "hasJIT" ),
|
||||||
|
("has target machine:", "hasTargetMachine" ),
|
||||||
|
("has asm backend:", "hasMCAsmBackend" ),
|
||||||
|
("has asm parser:", "hasMCAsmParser" ),
|
||||||
|
("has asm printer:", "hasAsmPrinter" ),
|
||||||
|
("has disassembler:", "hasMCDisassembler" ),
|
||||||
|
("has inst printer:", "hasMCInstPrinter" ),
|
||||||
|
("has code emitter:", "hasMCCodeEmitter" ),
|
||||||
|
("has object streamer:", "hasMCObjectStreamer"),
|
||||||
|
("has asm streamer:", "hasAsmStreamer" )
|
||||||
|
)
|
||||||
|
|
||||||
|
for target in llvm.TargetRegistry.targetsList():
|
||||||
|
print("target %s" % target.getName())
|
||||||
|
fmt = "%3s%-25s%r"
|
||||||
|
for (desc, mthd) in mthds:
|
||||||
|
print(fmt % ("", desc, getattr(target, mthd)()))
|
||||||
|
|
||||||
|
print("")
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue