//===--- Driver.cpp - Clang GCC Compatible Driver -----------------------*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include "clang/Driver/Driver.h"
#include "clang/Driver/Action.h"
#include "clang/Driver/Arg.h"
#include "clang/Driver/ArgList.h"
#include "clang/Driver/Compilation.h"
#include "clang/Driver/DriverDiagnostic.h"
#include "clang/Driver/HostInfo.h"
#include "clang/Driver/Job.h"
#include "clang/Driver/Option.h"
#include "clang/Driver/Options.h"
#include "clang/Driver/Tool.h"
#include "clang/Driver/ToolChain.h"
#include "clang/Driver/Types.h"
#include "clang/Basic/Version.h"
#include "llvm/ADT/StringSet.h"
#include "llvm/Support/PrettyStackTrace.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/System/Path.h"
#include "llvm/System/Program.h"
#include "InputInfo.h"
#include <map>
using namespace clang::driver;
using namespace clang;
// Used to set values for "production" clang, for releases.
// #define USE_PRODUCTION_CLANG
Driver::Driver(const char *_Name, const char *_Dir,
const char *_DefaultHostTriple,
const char *_DefaultImageName,
Diagnostic &_Diags)
: Opts(new OptTable()), Diags(_Diags),
Name(_Name), Dir(_Dir), DefaultHostTriple(_DefaultHostTriple),
DefaultImageName(_DefaultImageName),
Host(0),
CCCIsCXX(false), CCCEcho(false), CCCPrintBindings(false),
CCCGenericGCCName("gcc"), CCCUseClang(true),
#ifdef USE_PRODUCTION_CLANG
CCCUseClangCXX(false),
#else
CCCUseClangCXX(true),
#endif
CCCUseClangCPP(true), CCCUsePCH(true),
SuppressMissingInputWarning(false)
{
#ifdef USE_PRODUCTION_CLANG
// Only use clang on i386 and x86_64 by default, in a "production" build.
CCCClangArchs.insert("i386");
CCCClangArchs.insert("x86_64");
CCCClangArchs.insert("arm");
CCCClangArchs.insert("armv5");
CCCClangArchs.insert("armv6");
CCCClangArchs.insert("armv7");
#endif
}
Driver::~Driver() {
delete Opts;
delete Host;
}
InputArgList *Driver::ParseArgStrings(const char **ArgBegin,
const