From e81d714a702469999d016a25b0129950a2ca35a8 Mon Sep 17 00:00:00 2001 From: Alessandro Di Federico Date: Thu, 20 Apr 2023 16:22:12 +0200 Subject: [PATCH] Push ParseCommandLineOptions into InitRevng --- include/revng/Support/InitRevng.h | 23 +++++++++++++------ lib/PipelineC/PipelineC.cpp | 7 +++--- .../Main.cpp | 7 ++---- .../revng-ensure-rft-equivalence/Main.cpp | 5 +--- tools/efa/extractcfg/Main.cpp | 7 ++---- tools/lddtree/Main.cpp | 7 ++---- tools/link-for-translation/Main.cpp | 7 ++---- tools/model/apply/Main.cpp | 5 +--- tools/model/diff/Main.cpp | 5 +--- tools/model/dump/Main.cpp | 5 +--- tools/model/export/type-graph/Main.cpp | 5 +--- tools/model/import/binary/Main.cpp | 5 +--- tools/model/import/debug-info/Main.cpp | 5 +--- tools/model/inject/Main.cpp | 5 +--- tools/model/opt/Main.cpp | 6 ++--- tools/pipeline/Main.cpp | 7 ++---- tools/pipeline/analyze/Main.cpp | 7 ++---- tools/pipeline/artifact/Main.cpp | 7 ++---- tools/pipeline/invalidate/Main.cpp | 7 ++---- tools/trace/inspect/Main.cpp | 7 ++---- 20 files changed, 48 insertions(+), 91 deletions(-) diff --git a/include/revng/Support/InitRevng.h b/include/revng/Support/InitRevng.h index 38b9b1302..b3d2f5203 100644 --- a/include/revng/Support/InitRevng.h +++ b/include/revng/Support/InitRevng.h @@ -4,6 +4,7 @@ // This file is distributed under the MIT License. See LICENSE.md for details. // +#include "llvm/Support/CommandLine.h" #include "llvm/Support/InitLLVM.h" #include "llvm/Support/PrettyStackTrace.h" @@ -16,15 +17,23 @@ namespace revng { class InitRevng : public llvm::InitLLVM { public: InitRevng(int &Argc, - const char **&Argv, - bool InstallPipeSignalExitHandler = true) : - InitLLVM(Argc, Argv, InstallPipeSignalExitHandler) { - init(); - } + auto **&Argv, + const char *Overview, + llvm::ArrayRef CategoriesToHide) : + InitLLVM(Argc, Argv, true) { - InitRevng(int &Argc, char **&Argv, bool InstallPipeSignalExitHandler = true) : - InitLLVM(Argc, Argv, InstallPipeSignalExitHandler) { init(); + + llvm::cl::HideUnrelatedOptions(CategoriesToHide); + bool Result = llvm::cl::ParseCommandLineOptions(Argc, + Argv, + Overview, + nullptr, + "REVNG_OPTIONS"); + + if (not Result) + std::exit(EXIT_FAILURE); + } private: diff --git a/lib/PipelineC/PipelineC.cpp b/lib/PipelineC/PipelineC.cpp index 0ae3fc182..475c43169 100644 --- a/lib/PipelineC/PipelineC.cpp +++ b/lib/PipelineC/PipelineC.cpp @@ -115,9 +115,10 @@ static bool _rp_initialize(int argc, } revng_check(not InitRevngInstance.has_value()); - InitRevngInstance.emplace(argc, argv); - - llvm::cl::ParseCommandLineOptions(argc, argv); + InitRevngInstance.emplace(argc, + argv, + "", + llvm::ArrayRef()); for (const auto &[SigNumber, Handler] : Signals) { // All of LLVM's initialization is complete, restore the original signals to diff --git a/tests/abi/tools/revng-check-compatibility-with-abi/Main.cpp b/tests/abi/tools/revng-check-compatibility-with-abi/Main.cpp index a86bf7e31..22c4f2172 100644 --- a/tests/abi/tools/revng-check-compatibility-with-abi/Main.cpp +++ b/tests/abi/tools/revng-check-compatibility-with-abi/Main.cpp @@ -67,11 +67,8 @@ static opt Artifact(Positional, } // namespace Options -int main(int argc, const char *argv[]) { - revng::InitRevng X(argc, argv); - - llvm::cl::HideUnrelatedOptions(Options::ThisToolCategory); - llvm::cl::ParseCommandLineOptions(argc, argv); +int main(int argc, char *argv[]) { + revng::InitRevng X(argc, argv, "", { &Options::ThisToolCategory }); auto InputOrError = llvm::MemoryBuffer::getFileOrSTDIN(Options::Filename); if (!InputOrError) { diff --git a/tests/abi/tools/revng-ensure-rft-equivalence/Main.cpp b/tests/abi/tools/revng-ensure-rft-equivalence/Main.cpp index 09fb509df..aef3988ab 100644 --- a/tests/abi/tools/revng-ensure-rft-equivalence/Main.cpp +++ b/tests/abi/tools/revng-ensure-rft-equivalence/Main.cpp @@ -85,10 +85,7 @@ ensureMatchingIDs(const model::Type::Key &Left, } int main(int Argc, char *Argv[]) { - revng::InitRevng X(Argc, Argv); - - cl::HideUnrelatedOptions({ &ThisToolCategory }); - cl::ParseCommandLineOptions(Argc, Argv); + revng::InitRevng X(Argc, Argv, "", { &ThisToolCategory }); ExitOnError ExitOnError; diff --git a/tools/efa/extractcfg/Main.cpp b/tools/efa/extractcfg/Main.cpp index cc14121be..6b0318dd7 100644 --- a/tools/efa/extractcfg/Main.cpp +++ b/tools/efa/extractcfg/Main.cpp @@ -30,11 +30,8 @@ static cl::opt OutputFilename("o", llvm::cl::desc(""), cl::value_desc("filename")); -int main(int argc, const char **argv) { - revng::InitRevng X(argc, argv); - - cl::HideUnrelatedOptions({ &MainCategory }); - cl::ParseCommandLineOptions(argc, argv); +int main(int argc, char *argv[]) { + revng::InitRevng X(argc, argv, "", { &MainCategory }); auto BufOrError = MemoryBuffer::getFileOrSTDIN(InputModule); if (std::error_code EC = BufOrError.getError()) diff --git a/tools/lddtree/Main.cpp b/tools/lddtree/Main.cpp index 90e26e756..c38147d9a 100644 --- a/tools/lddtree/Main.cpp +++ b/tools/lddtree/Main.cpp @@ -33,11 +33,8 @@ static opt DependencyLevel("dependency-level", StringPositionalArgument Input("Input binary"); -int main(int argc, const char *argv[]) { - revng::InitRevng X(argc, argv); - - HideUnrelatedOptions({ &MainCategory }); - ParseCommandLineOptions(argc, argv); +int main(int argc, char *argv[]) { + revng::InitRevng X(argc, argv, "", { &MainCategory }); LDDTree Dependencies; lddtree(Dependencies, Input, DependencyLevel); diff --git a/tools/link-for-translation/Main.cpp b/tools/link-for-translation/Main.cpp index de0e2eb38..0a49ffd1a 100644 --- a/tools/link-for-translation/Main.cpp +++ b/tools/link-for-translation/Main.cpp @@ -44,11 +44,8 @@ static opt DryRun("dry-run", static ExitOnError AbortOnError; -int main(int argc, const char *argv[]) { - revng::InitRevng X(argc, argv); - - HideUnrelatedOptions({ &MainCategory }); - ParseCommandLineOptions(argc, argv); +int main(int argc, char *argv[]) { + revng::InitRevng X(argc, argv, "", { &MainCategory }); auto MaybeModel = TupleTree::fromFile(ModelFile); auto ExpectedModel = llvm::errorOrToExpected(std::move(MaybeModel)); diff --git a/tools/model/apply/Main.cpp b/tools/model/apply/Main.cpp index c6e60c687..9c1e4876e 100644 --- a/tools/model/apply/Main.cpp +++ b/tools/model/apply/Main.cpp @@ -36,10 +36,7 @@ static cl::opt DiffPath(cl::Positional, static ModelOutputOptions Options(ThisToolCategory); int main(int Argc, char *Argv[]) { - revng::InitRevng X(Argc, Argv); - - cl::HideUnrelatedOptions({ &ThisToolCategory }); - cl::ParseCommandLineOptions(Argc, Argv); + revng::InitRevng X(Argc, Argv, "", { &ThisToolCategory }); ExitOnError ExitOnError; diff --git a/tools/model/diff/Main.cpp b/tools/model/diff/Main.cpp index 9f16ed740..9e5966312 100644 --- a/tools/model/diff/Main.cpp +++ b/tools/model/diff/Main.cpp @@ -42,10 +42,7 @@ static cl::opt OutputFilename("o", llvm::cl::value_desc("filename")); int main(int Argc, char *Argv[]) { - revng::InitRevng X(Argc, Argv); - - cl::HideUnrelatedOptions({ &ThisToolCategory }); - cl::ParseCommandLineOptions(Argc, Argv); + revng::InitRevng X(Argc, Argv, "", { &ThisToolCategory }); ExitOnError ExitOnError; diff --git a/tools/model/dump/Main.cpp b/tools/model/dump/Main.cpp index 48452839c..c257a1a09 100644 --- a/tools/model/dump/Main.cpp +++ b/tools/model/dump/Main.cpp @@ -29,10 +29,7 @@ static cl::opt InputModulePath(cl::Positional, cl::value_desc("module")); int main(int Argc, char *Argv[]) { - revng::InitRevng X(Argc, Argv); - - cl::HideUnrelatedOptions({ &ThisToolCategory }); - cl::ParseCommandLineOptions(Argc, Argv); + revng::InitRevng X(Argc, Argv, "", { &ThisToolCategory }); ExitOnError ExitOnError; diff --git a/tools/model/export/type-graph/Main.cpp b/tools/model/export/type-graph/Main.cpp index 0ca0f5a7c..0a25b12f0 100644 --- a/tools/model/export/type-graph/Main.cpp +++ b/tools/model/export/type-graph/Main.cpp @@ -26,10 +26,7 @@ static cl::opt InputModulePath(cl::Positional, cl::value_desc("module")); int main(int Argc, char *Argv[]) { - revng::InitRevng X(Argc, Argv); - - cl::HideUnrelatedOptions({ &ThisToolCategory }); - cl::ParseCommandLineOptions(Argc, Argv); + revng::InitRevng X(Argc, Argv, "", { &ThisToolCategory }); ExitOnError ExitOnError; diff --git a/tools/model/import/binary/Main.cpp b/tools/model/import/binary/Main.cpp index fac345102..f9fe7b557 100644 --- a/tools/model/import/binary/Main.cpp +++ b/tools/model/import/binary/Main.cpp @@ -33,10 +33,7 @@ static opt OutputFilename("o", value_desc("filename")); int main(int Argc, char *Argv[]) { - revng::InitRevng X(Argc, Argv); - - HideUnrelatedOptions({ &MainCategory }); - ParseCommandLineOptions(Argc, Argv); + revng::InitRevng X(Argc, Argv, "", { &MainCategory }); // Open output ExitOnError ExitOnError; diff --git a/tools/model/import/debug-info/Main.cpp b/tools/model/import/debug-info/Main.cpp index 250bf1011..9c58685d4 100644 --- a/tools/model/import/debug-info/Main.cpp +++ b/tools/model/import/debug-info/Main.cpp @@ -40,10 +40,7 @@ static cl::opt OutputFilename("o", llvm::cl::value_desc("filename")); int main(int Argc, char *Argv[]) { - revng::InitRevng X(Argc, Argv); - - cl::HideUnrelatedOptions({ &ThisToolCategory }); - cl::ParseCommandLineOptions(Argc, Argv); + revng::InitRevng X(Argc, Argv, "", { &ThisToolCategory }); // Open output. ExitOnError ExitOnError; diff --git a/tools/model/inject/Main.cpp b/tools/model/inject/Main.cpp index b4ffa7f26..bb55b7446 100644 --- a/tools/model/inject/Main.cpp +++ b/tools/model/inject/Main.cpp @@ -30,10 +30,7 @@ static cl::opt InputModulePath(cl::Positional, cl::value_desc("module")); int main(int Argc, char *Argv[]) { - revng::InitRevng X(Argc, Argv); - - cl::HideUnrelatedOptions({ &ThisToolCategory }); - cl::ParseCommandLineOptions(Argc, Argv); + revng::InitRevng X(Argc, Argv, "", { &ThisToolCategory }); auto OldModel = ModelInModule::loadModule(InputModulePath); auto NewModel = ModelInModule::loadYAML(NewModelPath); diff --git a/tools/model/opt/Main.cpp b/tools/model/opt/Main.cpp index b964f3741..63545f439 100644 --- a/tools/model/opt/Main.cpp +++ b/tools/model/opt/Main.cpp @@ -63,11 +63,9 @@ static void loadPassesList() { } int main(int Argc, char *Argv[]) { - revng::InitRevng X(Argc, Argv); - loadPassesList(); - cl::HideUnrelatedOptions({ &ThisToolCategory, &ModelPassCategory }); - cl::ParseCommandLineOptions(Argc, Argv); + + revng::InitRevng X(Argc, Argv, "", { &ThisToolCategory, &ModelPassCategory }); ExitOnError ExitOnError; auto MaybeModel = ExitOnError(ModelInModule::load(InputFilename)); diff --git a/tools/pipeline/Main.cpp b/tools/pipeline/Main.cpp index db5113084..feb6e186b 100644 --- a/tools/pipeline/Main.cpp +++ b/tools/pipeline/Main.cpp @@ -152,11 +152,8 @@ static void runPipeline(Runner &Pipeline) { } } -int main(int argc, const char *argv[]) { - revng::InitRevng X(argc, argv); - - HideUnrelatedOptions(MainCategory); - ParseCommandLineOptions(argc, argv); +int main(int argc, char *argv[]) { + revng::InitRevng X(argc, argv, "", { &MainCategory }); Registry::runAllInitializationRoutines(); diff --git a/tools/pipeline/analyze/Main.cpp b/tools/pipeline/analyze/Main.cpp index 35e9bca03..484440ac3 100644 --- a/tools/pipeline/analyze/Main.cpp +++ b/tools/pipeline/analyze/Main.cpp @@ -89,13 +89,10 @@ overrideModel(PipelineManager &Manager, TupleTree NewModel) { return llvm::Error::success(); } -int main(int argc, const char *argv[]) { +int main(int argc, char *argv[]) { using BinaryRef = TupleTreeGlobal; - revng::InitRevng X(argc, argv); - - HideUnrelatedOptions(MainCategory); - ParseCommandLineOptions(argc, argv); + revng::InitRevng X(argc, argv, "", { &MainCategory }); Registry::runAllInitializationRoutines(); diff --git a/tools/pipeline/artifact/Main.cpp b/tools/pipeline/artifact/Main.cpp index ffb6b7785..44ede9f00 100644 --- a/tools/pipeline/artifact/Main.cpp +++ b/tools/pipeline/artifact/Main.cpp @@ -62,11 +62,8 @@ static ToolCLOptions BaseOptions(MainCategory); static ExitOnError AbortOnError; -int main(int argc, const char *argv[]) { - revng::InitRevng X(argc, argv); - - HideUnrelatedOptions(MainCategory); - ParseCommandLineOptions(argc, argv); +int main(int argc, char *argv[]) { + revng::InitRevng X(argc, argv, "", { &MainCategory }); Registry::runAllInitializationRoutines(); diff --git a/tools/pipeline/invalidate/Main.cpp b/tools/pipeline/invalidate/Main.cpp index fa3fbb000..c8c7e6cd6 100644 --- a/tools/pipeline/invalidate/Main.cpp +++ b/tools/pipeline/invalidate/Main.cpp @@ -71,11 +71,8 @@ dumpInvalidationMap(llvm::raw_ostream &OS, const InvalidationMap &Map) { } } -int main(int argc, const char *argv[]) { - revng::InitRevng X(argc, argv); - - HideUnrelatedOptions(MainCategory); - ParseCommandLineOptions(argc, argv); +int main(int argc, char *argv[]) { + revng::InitRevng X(argc, argv, "", { &MainCategory }); Registry::runAllInitializationRoutines(); diff --git a/tools/trace/inspect/Main.cpp b/tools/trace/inspect/Main.cpp index 69b032f15..88ee20f5c 100644 --- a/tools/trace/inspect/Main.cpp +++ b/tools/trace/inspect/Main.cpp @@ -57,11 +57,8 @@ static alias OutputA("o", static llvm::ExitOnError AbortOnError; -int main(int argc, const char *argv[]) { - revng::InitRevng X(argc, argv); - - llvm::cl::HideUnrelatedOptions({ &Options::ThisToolCategory }); - llvm::cl::ParseCommandLineOptions(argc, argv); +int main(int argc, char *argv[]) { + revng::InitRevng X(argc, argv, "", { &Options::ThisToolCategory }); if (Options::ListBuffers xor Options::ExtractBuffer.empty()) { dbg << "Please specify either --list-buffers or --extract-buffer\n";