//===- llvm-xray.cpp: XRay Tool Main Program ------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file implements the main entry point for the suite of XRay tools. All // additional functionality are implemented as subcommands. // //===----------------------------------------------------------------------===// // // Basic usage: // // llvm-xray [options] [subcommand-specific options] // #include "xray-registry.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; using namespace llvm::xray; int main(int argc, char *argv[]) { cl::ParseCommandLineOptions(argc, argv, "XRay Tools\n\n" " This program consolidates multiple XRay trace " "processing tools for convenient access.\n"); for (auto *SC : cl::getRegisteredSubcommands()) { if (*SC) { // If no subcommand was provided, we need to explicitly check if this is // the top-level subcommand. if (SC == &*cl::TopLevelSubCommand) { cl::PrintHelpMessage(false, true); return 0; } if (auto C = dispatch(SC)) { ExitOnError("llvm-xray: ")(C()); return 0; } } } // If all else fails, we still print the usage message. cl::PrintHelpMessage(false, true); return 0; }