//===--- 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 #include #include namespace cl = llvm::cl; namespace sys = llvm::sys; using namespace llvmcc; // Built-in command-line options. // External linkage here is intentional. cl::list InputFilenames(cl::Positional, cl::desc(""), cl::OneOrMore); cl::opt OutputFilename("o", cl::desc("Output file name"), cl::value_desc("file")); cl::opt VerboseMode("v", cl::desc("Enable verbose mode")); cl::opt WriteGraph("write-graph", cl::desc("Write CompilationGraph.dot file"), cl::Hidden); cl::opt ViewGraph("view-graph", cl::desc("Show compilation graph in GhostView"), cl::Hidden); 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); if(WriteGraph) graph.writeGraph(); if(ViewGraph) graph.viewGraph(); return BuildTargets(graph); } catch(const std::exception& ex) { std::cerr << ex.what() << '\n'; } catch(...) { std::cerr << "Unknown error!\n"; } return 1; }