//===- llvm-profgen.cpp - LLVM SPGO profile generation tool -----*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// llvm-profgen generates SPGO profiles from perf script ouput.
//
//===----------------------------------------------------------------------===//

#include "ErrorHandling.h"
#include "PerfReader.h"
#include "ProfileGenerator.h"
#include "ProfiledBinary.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/InitLLVM.h"
#include "llvm/Support/TargetSelect.h"

static cl::list<std::string> PerfTraceFilenames(
    "perfscript", cl::value_desc("perfscript"), cl::OneOrMore,
    llvm::cl::MiscFlags::CommaSeparated,
    cl::desc("Path of perf-script trace created by Linux perf tool with "
             "`script` command(the raw perf.data should be profiled with -b)"));

static cl::list<std::string>
    BinaryFilenames("binary", cl::value_desc("binary"), cl::OneOrMore,
                    llvm::cl::MiscFlags::CommaSeparated,
                    cl::desc("Path of profiled binary files"));

extern cl::opt<bool> ShowDisassemblyOnly;

using namespace llvm;
using namespace sampleprof;

int main(int argc, const char *argv[]) {
  InitLLVM X(argc, argv);

  // Initialize targets and assembly printers/parsers.
  InitializeAllTargetInfos();
  InitializeAllTargetMCs();
  InitializeAllDisassemblers();

  cl::ParseCommandLineOptions(argc, argv, "llvm SPGO profile generator\n");

  // Load binaries and parse perf events and samples
  PerfReader Reader(BinaryFilenames, PerfTraceFilenames);
  if (ShowDisassemblyOnly)
    return EXIT_SUCCESS;
  Reader.parsePerfTraces(PerfTraceFilenames);

  std::unique_ptr<ProfileGenerator> Generator = ProfileGenerator::create(
      Reader.getBinarySampleCounters(), Reader.getPerfScriptType());
  Generator->generateProfile();
  Generator->write();

  return EXIT_SUCCESS;
}
