| //===- 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> [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; | |
| } |