Browse Source

Fold toolchain parser setup to parser options.

pull/696/head
Joao Matos 9 years ago
parent
commit
19fb6ca7d6
  1. 2
      src/Generator.Tests/AST/TestAST.cs
  2. 10
      src/Generator/Driver.cs
  3. 43
      src/Parser/ParserOptions.cs
  4. 43
      src/Parser/ToolchainExtensions.cs

2
src/Generator.Tests/AST/TestAST.cs

@ -316,7 +316,7 @@ namespace CppSharp.Generator.Tests.AST @@ -316,7 +316,7 @@ namespace CppSharp.Generator.Tests.AST
public void TestAmbiguity()
{
var bindingContext = new BindingContext(new TextDiagnosticPrinter(), new DriverOptions(),
new ParserOptions2())
new ParserOptions2());
new CleanUnitPass { Context = bindingContext }.VisitLibrary(AstContext);
new CheckAmbiguousFunctions { Context = bindingContext }.VisitLibrary(AstContext);
Assert.IsTrue(AstContext.FindClass("HasAmbiguousFunctions").Single().FindMethod("ambiguous").IsAmbiguous);

10
src/Generator/Driver.cs

@ -66,18 +66,10 @@ namespace CppSharp @@ -66,18 +66,10 @@ namespace CppSharp
ParserOptions.addIncludeDirs(incDir);
}
public void SetupIncludes()
{
if (Platform.IsMacOS)
ParserOptions.SetupXcode();
else if (Platform.IsWindows && !ParserOptions.NoBuiltinIncludes)
ParserOptions.SetupMSVC();
}
public void Setup()
{
ValidateOptions();
SetupIncludes();
ParserOptions.SetupIncludes();
Context = new BindingContext(Diagnostics, Options, ParserOptions);
Generator = CreateGeneratorFromKind(Options.GeneratorKind);
}

43
src/Parser/ParserOptions.cs

@ -12,5 +12,48 @@ namespace CppSharp.Parser @@ -12,5 +12,48 @@ namespace CppSharp.Parser
public bool IsItaniumLikeAbi { get { return Abi != CppAbi.Microsoft; } }
public bool IsMicrosoftAbi { get { return Abi == CppAbi.Microsoft; } }
/// Sets up the parser options to work with the given Visual Studio toolchain.
public void SetupMSVC(VisualStudioVersion vsVersion = VisualStudioVersion.Latest)
{
MicrosoftMode = true;
NoBuiltinIncludes = true;
NoStandardIncludes = true;
Abi = CppSharp.Parser.AST.CppAbi.Microsoft;
ToolSetToUse = MSVCToolchain.GetCLVersion(vsVersion) * 10000000;
addArguments("-fms-extensions");
addArguments("-fms-compatibility");
addArguments("-fdelayed-template-parsing");
var includes = MSVCToolchain.GetSystemIncludes(vsVersion);
foreach (var include in includes)
addSystemIncludeDirs(include);
}
public void SetupXcode()
{
var builtinsPath = XcodeToolchain.GetXcodeBuiltinIncludesFolder();
addSystemIncludeDirs(builtinsPath);
var cppIncPath = XcodeToolchain.GetXcodeCppIncludesFolder();
addSystemIncludeDirs(cppIncPath);
var includePath = XcodeToolchain.GetXcodeIncludesFolder();
addSystemIncludeDirs(includePath);
NoBuiltinIncludes = true;
NoStandardIncludes = true;
addArguments("-stdlib=libc++");
}
public void SetupIncludes()
{
if (Platform.IsMacOS)
SetupXcode();
else if (Platform.IsWindows && !NoBuiltinIncludes)
SetupMSVC();
}
}
}

43
src/Parser/ToolchainExtensions.cs

@ -1,43 +0,0 @@ @@ -1,43 +0,0 @@
using CppSharp.Parser;
namespace CppSharp
{
public static partial class OptionsExtensions
{
/// Sets up the parser options to work with the given Visual Studio toolchain.
public static void SetupMSVC(this ParserOptions options,
VisualStudioVersion vsVersion = VisualStudioVersion.Latest)
{
options.MicrosoftMode = true;
options.NoBuiltinIncludes = true;
options.NoStandardIncludes = true;
options.Abi = CppSharp.Parser.AST.CppAbi.Microsoft;
options.ToolSetToUse = MSVCToolchain.GetCLVersion(vsVersion) * 10000000;
options.addArguments("-fms-extensions");
options.addArguments("-fms-compatibility");
options.addArguments("-fdelayed-template-parsing");
var includes = MSVCToolchain.GetSystemIncludes(vsVersion);
foreach (var include in includes)
options.addSystemIncludeDirs(include);
}
public static void SetupXcode(this ParserOptions options)
{
var builtinsPath = XcodeToolchain.GetXcodeBuiltinIncludesFolder();
options.addSystemIncludeDirs(builtinsPath);
var cppIncPath = XcodeToolchain.GetXcodeCppIncludesFolder();
options.addSystemIncludeDirs(cppIncPath);
var includePath = XcodeToolchain.GetXcodeIncludesFolder();
options.addSystemIncludeDirs(includePath);
options.NoBuiltinIncludes = true;
options.NoStandardIncludes = true;
options.addArguments("-stdlib=libc++");
}
}
}
Loading…
Cancel
Save