xref: /llvm-project/llvm/tools/llvm-xray/llvm-xray.cpp (revision a0e3ae4ce01d07e575d1ab8966f78c835039ef09)
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