#include #include #include struct OutputFilenames { // Host std::string function_unpacks; std::string tab_function_unpacks; std::string ldr; std::string ldr_ptrs; // Guest std::string thunks; std::string function_packs; std::string function_packs_public; std::string callback_unpacks_header_init; // Guest + Host std::string callback_structs; std::string callback_typedefs; std::string callback_unpacks_header; std::string callback_unpacks; std::string symbol_list; }; class FrontendAction : public clang::ASTFrontendAction { public: FrontendAction(const std::string& libname, const OutputFilenames&); void EndSourceFileAction() override; std::unique_ptr CreateASTConsumer(clang::CompilerInstance&, clang::StringRef /*file*/) override; private: const std::string& libfilename; std::string libname; // sanitized filename, usable as part of emitted function names const OutputFilenames& output_filenames; };