MODULE = LLVM				PACKAGE = LLVM::Target

AV *
targets(class)
	SV *class

	CODE:
		Target t; SV *curr;
		AV *targets = newAV();

		LLVMInitializeAllTargets();
		LLVMInitializeAllTargetInfos();
		LLVMInitializeAllTargetMCs();
		LLVMInitializeAllAsmPrinters();

		t = LLVMGetFirstTarget();

		do {
			curr = sv_setref_pv(
				newSV(0), "LLVM::Target", (void *) t
			);

			av_push(targets, curr);

			t = LLVMGetNextTarget(t);
		} while (t);

		RETVAL = targets;

	OUTPUT: RETVAL

SV *
name(self)
	Target self

	CODE:
		const char *name = LLVMGetTargetName(self);
		RETVAL = newSVpv(name, 0);

	OUTPUT: RETVAL

SV *
description(self)
	Target self

	CODE:
		const char *name = LLVMGetTargetDescription(self);
		RETVAL = newSVpv(name, 0);

	OUTPUT: RETVAL