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:
anthony cantor 2013-08-11 17:27:23 -06:00 • committed by Siu Kwan Lam
commit 8f2c27ba41
4 changed files with 45 additions and 2 deletions

View file

@ -946,7 +946,6 @@ PyObject* TargetRegistry_lookupTarget(const std::string &Arch,
}
}
static
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
PyObject* llvm_sys_getHostCPUFeatures(PyObject* Features)
{

View file

@ -67,4 +67,5 @@ class TargetRegistry:
PyObjectPtr, # std::string &Error
)
targetsList = CustomStaticMethod('TargetRegistry_targets_list', PyObjectPtr)

View file

@ -18,6 +18,9 @@ InitializeAllTargets = llvm.Function('InitializeAllTargets')
InitializeAllTargetInfos = llvm.Function('InitializeAllTargetInfos')
InitializeAllTargetMCs = llvm.Function('InitializeAllTargetMCs')
InitializeAllAsmPrinters = llvm.Function('InitializeAllAsmPrinters')
InitializeAllDisassemblers = llvm.Function('InitializeAllDisassemblers')
InitializeAllAsmParsers = llvm.Function('InitializeAllAsmParsers')
for target in TARGETS_BUILT:
decls = 'Target', 'TargetInfo', 'TargetMC', 'AsmPrinter'

30
test/target_info.py Normal file
View 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("")