1.0Kпросмотров
23 марта 2025 г.
Score: 1.1K
butt plugin Следующим шагом преисполнения в познании стоит разработка плагина для clang. Почти всё взято отсюда, поэтому проще сказать об отличиях. Начинаем начинать! Для плагинов есть свой список (вероятно, так стоит переводить registry), добавим в него наш плагин.
static clang::FrontendPluginRegistry::Add<FistingAction> FistingPlugin("fisting", "Find fisting for 300$ in code."); При этом FistingAction почти не отличается от оригинала, разве что наследуется от другого базового класса и должен уметь (или делать вид, что умеет) обрабатывать опции.
class FistingAction final : public clang::PluginASTAction {
public: bool ParseArgs(const clang::CompilerInstance &compiler, const std::vector<std::string> &arg) override { for (auto it = arg.begin(); it != arg.end(); ++it) { if (*it == "fisting") { llvm::outs() << "You needn't enable fisting manually, just send me 300$!\n"; } } return true; }
}; И всё? И всё! Точнее, осталось собрать это дело в fisting.so и запустить его.
clang++ example.cpp -fsyntax-only -fplugin=./fisting.so -Xclang -plugin -Xclang fisting -fplugin-arg-fisting-fisting
И радуемся своим 300$! #compiler #llvm