summaryrefslogtreecommitdiff
path: root/tools/llvmc2/llvmc.cpp
blob: feed61f89f1156f5d37fc2b3958e2bf50d813621 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
//===--- llvmcc.cpp - The LLVM Compiler Driver ------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open
// Source License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
//  This tool provides a single point of access to the LLVM
//  compilation tools.  It has many options. To discover the options
//  supported please refer to the tools' manual page or run the tool
//  with the --help option.
//
//===----------------------------------------------------------------------===//

#include "CompilationGraph.h"
#include "Tool.h"

#include "llvm/System/Path.h"
#include "llvm/Support/CommandLine.h"

#include <iostream>
#include <stdexcept>
#include <string>

namespace cl = llvm::cl;
namespace sys = llvm::sys;
using namespace llvmcc;

// External linkage here is intentional.
cl::list<std::string> InputFilenames(cl::Positional,
                                     cl::desc("<input file>"), cl::OneOrMore);
cl::opt<std::string> OutputFilename("o", cl::desc("Output file name"),
                                    cl::value_desc("file"));
cl::opt<bool> VerboseMode("v", cl::desc("Enable verbose mode"));


namespace {
  int BuildTargets(const CompilationGraph& graph) {
    int ret;
    sys::Path tempDir(sys::Path::GetTemporaryDirectory());

    try {
      ret = graph.Build(tempDir);
    }
    catch(...) {
      tempDir.eraseFromDisk(true);
      throw;
    }

    tempDir.eraseFromDisk(true);
    return ret;
  }
}

int main(int argc, char** argv) {
  try {
    CompilationGraph graph;

    cl::ParseCommandLineOptions(argc, argv,
                                "LLVM Compiler Driver(Work In Progress)");
    PopulateCompilationGraph(graph);
    return BuildTargets(graph);
  }
  catch(const std::exception& ex) {
    std::cerr << ex.what() << '\n';
  }
  catch(...) {
    std::cerr << "Unknown error!\n";
  }
}