我正在研究AVR的Clang fork: https://github.com/4ntoine/clang/tree/avr-support
AVR子目标在LLVM后端分支中描述AVR AVR.td,LLVM TableGen在lib/Target/AVR/
中生成AVRSubtarget.h
我想在生成AVRSubTypeKV
的{{3}} AVRTargetInfo.hasFeature()
中使用AVRGenSubtargetInfo.inc
来检查CPU(MCU)是否支持该功能:
// Sorted (by key) array of values for CPU subtype.
extern const llvm::SubtargetFeatureKV AVRSubTypeKV[] = {
{ "at43usb320", "Select the at43usb320 processor", AVR::FeatureAVR31, 0ULL },
{ "at43usb355", "Select the at43usb355 processor", AVR::FeatureAVR3, 0ULL },
{ "at76c711", "Select the at76c711 processor", AVR::FeatureAVR3, 0ULL },
{ "at86rf401", "Select the at86rf401 processor", AVR::FeatureRF401, 0ULL },
{ "at90c8534", "Select the at90c8534 processor", AVR::FeatureAVR2, 0ULL },
{ "at90can128", "Select the at90can128 processor", AVR::FeatureAVR51, 0ULL },
{ "at90can32", "Select the at90can32 processor", AVR::FeatureAVR5, 0ULL },
...
我已尝试Targets.cpp LLVM Targets.cpp #include <AVRSubtarget.h>
但无法找到。{/ p>
那么我如何在Clang中使用LLVM TableGen生成的文件?
答案 0 :(得分:0)
LLVM构建结构需要include/llvm/Target
中的头文件,然后您可以将生成的头包含在#include "llvm/Target/AVRSubtarget.h"
中。如何在clang中使用llvm-tblgen文件的最佳示例是Intrinsics.h
中的include/llvm/IR/
标题。
答案 1 :(得分:0)
您不应以这种方式使用后端tablegen生成的标头。看一下clang中的其他目标(Targets.cpp和其他类似文件)如何抽象出标题/内在用法。
这背后的基本原理是可以使用前端的各个方面而不包括后端。 (好吧,由于我们使用后端解析MS样式的内联汇编,这有点下降,但在这里与我合作)
此外,没有特定的方法将子目标特定值传递给TargetMachine的创建。您将要传递创建TargetMachine的目标,cpu和功能字符串,并且将完全初始化后端。特定的前端选项可用于打开将打开的各种功能。