diff --git a/include/revng/CliftPipes/Headers.h b/include/revng/CliftPipes/Headers.h index c6bfbe748..d4055a7c2 100644 --- a/include/revng/CliftPipes/Headers.h +++ b/include/revng/CliftPipes/Headers.h @@ -42,4 +42,31 @@ public: void run(); }; +class EmitHelperHeader { +private: + const model::Binary &Binary; + const CliftFunctionContainer &Input; + PTMLCBytesContainer &Output; + +public: + static constexpr llvm::StringRef Name = "emit-helper-header"; + using Arguments = TypeList, + PipeRunArgument>; + + EmitHelperHeader(const class Model &Model, + llvm::StringRef Config, + llvm::StringRef DynamicConfig, + const CliftFunctionContainer &Input, + PTMLCBytesContainer &Output) : + Binary(*Model.get().get()), Input(Input), Output(Output){}; + + void run(); +}; + } // namespace revng::pypeline::piperuns diff --git a/lib/CliftPipes/Headers.cpp b/lib/CliftPipes/Headers.cpp index b81304107..54ce5081e 100644 --- a/lib/CliftPipes/Headers.cpp +++ b/lib/CliftPipes/Headers.cpp @@ -176,4 +176,14 @@ void EmitTypeAndGlobalHeader::run() { emitTypeAndGlobalHeaderImpl(*Out, Input.getModule()); } +void EmitHelperHeader::run() { + std::unique_ptr Out = Output.getOStream(ObjectID()); + + std::vector FunctionModules; + for (const auto &Object : Input.objects()) + FunctionModules.emplace_back(Input.getModule(Object)); + + emitHelperHeaderImpl(*Out, FunctionModules); +} + } // namespace revng::pypeline::piperuns diff --git a/lib/Pipebox/Pipebox.cpp b/lib/Pipebox/Pipebox.cpp index 3fa49663e..70189fca8 100644 --- a/lib/Pipebox/Pipebox.cpp +++ b/lib/Pipebox/Pipebox.cpp @@ -135,6 +135,7 @@ static RegisterSingleOutputPipeRun P42; static RegisterSingleOutputPipeRun P43; static RegisterSingleOutputPipeRun P44; static RegisterSingleOutputPipeRun P45; +static RegisterSingleOutputPipeRun P46; // // Analyses