Browse Source

Implemented Clang's MSVC toolchain lookup mode with `ForceClangToolchainLookup`.

pull/1170/head
Joao Matos 6 years ago committed by Dimitar Dobrev
parent
commit
e9005f6eb2
  1. 13
      src/CppParser/Parser.cpp
  2. 20
      src/Parser/ParserOptions.cs

13
src/CppParser/Parser.cpp

@ -49,7 +49,7 @@ @@ -49,7 +49,7 @@
#include <CodeGen/CGCall.h>
#include <CodeGen/CGCXXABI.h>
#include <Driver/ToolChains/Linux.h>
#include <Driver/ToolChains/MSVC.h>
#if defined(__APPLE__) || defined(__linux__)
#ifndef _GNU_SOURCE
@ -347,13 +347,18 @@ void Parser::Setup() @@ -347,13 +347,18 @@ void Parser::Setup()
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;
default:
break;
case llvm::Triple::Win32:
switch (Target.getEnvironment()) {
case llvm::Triple::MSVC:
TC = new clang::driver::toolchains::MSVCToolChain(D, Target, Args);
break;
}
break;
}
if (TC && !opts->noStandardIncludes) {

20
src/Parser/ParserOptions.cs

@ -197,21 +197,25 @@ namespace CppSharp.Parser @@ -197,21 +197,25 @@ namespace CppSharp.Parser
public void SetupMSVC(VisualStudioVersion vsVersion)
{
MicrosoftMode = true;
NoBuiltinIncludes = true;
NoStandardIncludes = true;
Abi = CppAbi.Microsoft;
vsVersion = MSVCToolchain.FindVSVersion(vsVersion);
foreach (var include in MSVCToolchain.GetSystemIncludes(vsVersion))
AddSystemIncludeDirs(include);
var clVersion = MSVCToolchain.GetCLVersion(vsVersion);
ToolSetToUse = clVersion.Major * 10000000 + clVersion.Minor * 100000;
if (!ForceClangToolchainLookup)
{
NoStandardIncludes = true;
NoBuiltinIncludes = true;
vsVersion = MSVCToolchain.FindVSVersion(vsVersion);
foreach (var include in MSVCToolchain.GetSystemIncludes(vsVersion))
AddSystemIncludeDirs(include);
}
// do not remove the CppSharp prefix becase the Mono C# compiler breaks
if (!LanguageVersion.HasValue)
LanguageVersion = CppSharp.Parser.LanguageVersion.CPP14_GNU;
var clVersion = MSVCToolchain.GetCLVersion(vsVersion);
ToolSetToUse = clVersion.Major * 10000000 + clVersion.Minor * 100000;
AddArguments("-fms-extensions");
AddArguments("-fms-compatibility");
AddArguments("-fdelayed-template-parsing");

Loading…
Cancel
Save