Files
revng-revng/include/revng/Recompile/LinkForTranslationPipe.h
Massimo Fioravanti ce4934f48d Introduce revng-link-for-translation
`revng-link-for-translation` provides a standalone tool needed to
perform the final linking stage of the recompilation.
2022-03-28 12:17:05 +02:00

53 lines
1.6 KiB
C++

#pragma once
//
// This file is distributed under the MIT License. See LICENSE.md for details.
//
#include <string>
#include "llvm/ADT/ArrayRef.h"
#include "revng/Pipeline/ContainerSet.h"
#include "revng/Pipeline/Context.h"
#include "revng/Pipeline/Contract.h"
#include "revng/Pipeline/GenericLLVMPipe.h"
#include "revng/Pipeline/LLVMGlobalKindBase.h"
#include "revng/Pipeline/Target.h"
#include "revng/Pipes/FileContainer.h"
#include "revng/Pipes/Kinds.h"
namespace revng::pipes {
class LinkForTranslationPipe {
public:
static constexpr auto Name = "LinkForTranslation";
std::array<pipeline::ContractGroup, 1> getContract() const {
pipeline::Contract BinaryPart(Binary,
pipeline::Exactness::Exact,
0,
Translated,
2,
pipeline::InputPreservation::Preserve);
pipeline::Contract ObjectPart(Object,
pipeline::Exactness::Exact,
1,
Translated,
2,
pipeline::InputPreservation::Preserve);
return { pipeline::ContractGroup({ BinaryPart, ObjectPart }) };
}
void run(const pipeline::Context &Ctx,
FileContainer &InputBinary,
FileContainer &ObjectFile,
FileContainer &OutputBinary);
void print(const pipeline::Context &Ctx,
llvm::raw_ostream &OS,
llvm::ArrayRef<std::string> ContainerNames) const;
};
} // namespace revng::pipes