diff --git a/llvmpy/include/llvm_binding/extra.h b/llvmpy/include/llvm_binding/extra.h index d4578af..6d8b863 100644 --- a/llvmpy/include/llvm_binding/extra.h +++ b/llvmpy/include/llvm_binding/extra.h @@ -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::begin(), TargetRegistry::end(), + "llvm::Target", "llvm::Target"); +} + static PyObject* llvm_sys_getHostCPUFeatures(PyObject* Features) { diff --git a/llvmpy/src/Support/TargetRegistry.py b/llvmpy/src/Support/TargetRegistry.py index c7bd766..c9bef0e 100644 --- a/llvmpy/src/Support/TargetRegistry.py +++ b/llvmpy/src/Support/TargetRegistry.py @@ -67,4 +67,5 @@ class TargetRegistry: PyObjectPtr, # std::string &Error ) - + targetsList = CustomStaticMethod('TargetRegistry_targets_list', PyObjectPtr) + diff --git a/llvmpy/src/Support/TargetSelect.py b/llvmpy/src/Support/TargetSelect.py index ef0290d..a5fb776 100644 --- a/llvmpy/src/Support/TargetSelect.py +++ b/llvmpy/src/Support/TargetSelect.py @@ -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' diff --git a/test/target_info.py b/test/target_info.py new file mode 100644 index 0000000..ce0c9a8 --- /dev/null +++ b/test/target_info.py @@ -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("") +