AddinganewLLVMtargettollvmlite
创始人
2024-07-26 16:31:36
0次
- 首先,在llvmlite源代码中创建一个名为“TARGET”的目录,并在其中创建以下文件:
- targetmachine.py:定义了新目标的TargetMachine类,并为其提供初始化器和get_module_builder方法。
- subtarget.py:描述了新目标的Subtarget类。
- register.py:包含一个新目标的注册器类,用于在运行时添加目标。
- 在“Makefile.targets.in”的末尾添加以下内容,以使LLVMLite在编译时包含新目标:
ifeq ($(TARGET),new_target)
LIBRARYNAME := llvmlite_new_target
include $(LEVEL)/Makefile.common
LLVMLIBS += $(LIBRARYNAME)
endif
- 在llvmlite项目中运行“make”命令以编译并安装新目标。
- 在Python代码中,使用以下代码段实例化新目标的TargetMachine类,并使用生成的ModuleBuilder API构建新模块:
from llvmlite import binding
from llvmlite.ir import Module
TARGET_ARCH = "new_target_arch"
MACHINE_FLAGS = "-march=new_target_arch -mcpu=new_target_cpu"
binding.initialize()
target = binding.Target.from_default_triple().create_target_machine(
cpu="new_target_cpu",
features=MACHINE_FLAGS,
target=TARGET_ARCH)
module = Module(name="", context=binding.get_global_context())
module_triple = binding.get_default_triple()
builder = target.create_mcjit_compiler(module_triple)
add code to the module using the ModuleBuilder API
builder.finalize_object()
binding.shutdown()
相关内容