1*a0e3ae4cSDean Michael Berris //===- llvm-xray.cpp: XRay Tool Main Program ------------------------------===// 2*a0e3ae4cSDean Michael Berris // 3*a0e3ae4cSDean Michael Berris // The LLVM Compiler Infrastructure 4*a0e3ae4cSDean Michael Berris // 5*a0e3ae4cSDean Michael Berris // This file is distributed under the University of Illinois Open Source 6*a0e3ae4cSDean Michael Berris // License. See LICENSE.TXT for details. 7*a0e3ae4cSDean Michael Berris // 8*a0e3ae4cSDean Michael Berris //===----------------------------------------------------------------------===// 9*a0e3ae4cSDean Michael Berris // 10*a0e3ae4cSDean Michael Berris // This file implements the main entry point for the suite of XRay tools. All 11*a0e3ae4cSDean Michael Berris // additional functionality are implemented as subcommands. 12*a0e3ae4cSDean Michael Berris // 13*a0e3ae4cSDean Michael Berris //===----------------------------------------------------------------------===// 14*a0e3ae4cSDean Michael Berris // 15*a0e3ae4cSDean Michael Berris // Basic usage: 16*a0e3ae4cSDean Michael Berris // 17*a0e3ae4cSDean Michael Berris // llvm-xray [options] <subcommand> [subcommand-specific options] 18*a0e3ae4cSDean Michael Berris // 19*a0e3ae4cSDean Michael Berris #include "xray-registry.h" 20*a0e3ae4cSDean Michael Berris #include "llvm/Support/CommandLine.h" 21*a0e3ae4cSDean Michael Berris #include "llvm/Support/raw_ostream.h" 22*a0e3ae4cSDean Michael Berris 23*a0e3ae4cSDean Michael Berris using namespace llvm; 24*a0e3ae4cSDean Michael Berris using namespace llvm::xray; 25*a0e3ae4cSDean Michael Berris 26*a0e3ae4cSDean Michael Berris int main(int argc, char *argv[]) { 27*a0e3ae4cSDean Michael Berris cl::ParseCommandLineOptions(argc, argv, 28*a0e3ae4cSDean Michael Berris "XRay Tools\n\n" 29*a0e3ae4cSDean Michael Berris " This program consolidates multiple XRay trace " 30*a0e3ae4cSDean Michael Berris "processing tools for convenient access.\n"); 31*a0e3ae4cSDean Michael Berris for (auto *SC : cl::getRegisteredSubcommands()) { 32*a0e3ae4cSDean Michael Berris if (*SC) { 33*a0e3ae4cSDean Michael Berris // If no subcommand was provided, we need to explicitly check if this is 34*a0e3ae4cSDean Michael Berris // the top-level subcommand. 35*a0e3ae4cSDean Michael Berris if (SC == &*cl::TopLevelSubCommand) { 36*a0e3ae4cSDean Michael Berris cl::PrintHelpMessage(false, true); 37*a0e3ae4cSDean Michael Berris return 0; 38*a0e3ae4cSDean Michael Berris } 39*a0e3ae4cSDean Michael Berris if (auto C = dispatch(SC)) { 40*a0e3ae4cSDean Michael Berris ExitOnError("llvm-xray: ")(C()); 41*a0e3ae4cSDean Michael Berris return 0; 42*a0e3ae4cSDean Michael Berris } 43*a0e3ae4cSDean Michael Berris } 44*a0e3ae4cSDean Michael Berris } 45*a0e3ae4cSDean Michael Berris 46*a0e3ae4cSDean Michael Berris // If all else fails, we still print the usage message. 47*a0e3ae4cSDean Michael Berris cl::PrintHelpMessage(false, true); 48*a0e3ae4cSDean Michael Berris return 0; 49*a0e3ae4cSDean Michael Berris } 50