Browse Source

Added support for Clang's driver toolchain include management for Linux.

pull/513/merge
João Matos 10 years ago
parent
commit
2e433afb10
  1. 26
      src/CppParser/Parser.cpp

26
src/CppParser/Parser.cpp

@ -18,6 +18,7 @@ @@ -18,6 +18,7 @@
#include <llvm/Object/COFF.h>
#include <llvm/Object/ObjectFile.h>
#include <llvm/Object/ELFObjectFile.h>
#include <llvm/Option/ArgList.h>
#include <llvm/IR/LLVMContext.h>
#include <llvm/IR/Module.h>
#include <llvm/IR/DataLayout.h>
@ -36,6 +37,8 @@ @@ -36,6 +37,8 @@
#include <clang/Sema/Sema.h>
#include <clang/Sema/SemaConsumer.h>
#include <clang/Frontend/Utils.h>
#include <clang/Driver/Driver.h>
#include <clang/Driver/ToolChain.h>
#include <clang/Driver/Util.h>
#include <clang/Index/USRGeneration.h>
#include <CodeGen/CodeGenModule.h>
@ -43,6 +46,7 @@ @@ -43,6 +46,7 @@
#include <CodeGen/TargetInfo.h>
#include <CodeGen/CGCall.h>
#include <CodeGen/CGCXXABI.h>
#include <Driver/ToolChains.h>
#if defined(__APPLE__) || defined(__linux__)
#ifndef _GNU_SOURCE
@ -245,6 +249,28 @@ void Parser::SetupHeader() @@ -245,6 +249,28 @@ void Parser::SetupHeader()
}
#endif
llvm::opt::InputArgList Args(0, 0);
clang::driver::Driver D("", TO->Triple, C->getDiagnostics());
clang::driver::ToolChain *TC = nullptr;
llvm::Triple Target(TO->Triple);
switch (Target.getOS()) {
// Extend this for other triples if needed, see clang's Driver::getToolChain.
case llvm::Triple::Linux:
TC = new clang::driver::toolchains::Linux(D, Target, Args);
break;
}
if (TC && !Opts->NoStandardIncludes) {
llvm::opt::ArgStringList Includes;
TC->AddClangSystemIncludeArgs(Args, Includes);
TC->AddClangCXXStdlibIncludeArgs(Args, Includes);
for (auto& Arg : Includes) {
if (strlen(Arg) > 0 && Arg[0] != '-')
HSOpts.AddPath(Arg, frontend::System, /*IsFramework=*/false,
/*IgnoreSysRoot=*/false);
}
}
// Enable preprocessing record.
PPOpts.DetailedRecord = true;

Loading…
Cancel
Save