diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp index 94361fa6..ffb3b864 100644 --- a/src/CppParser/Parser.cpp +++ b/src/CppParser/Parser.cpp @@ -49,7 +49,7 @@ #include #include #include - +#include #if defined(__APPLE__) || defined(__linux__) #ifndef _GNU_SOURCE @@ -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) { diff --git a/src/Parser/ParserOptions.cs b/src/Parser/ParserOptions.cs index dd5d679d..8bb55ab2 100644 --- a/src/Parser/ParserOptions.cs +++ b/src/Parser/ParserOptions.cs @@ -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");