Browse Source

Updated the parser generator driver with support for different triples (and Darwin/OSX support).

pull/169/head
triton 12 years ago
parent
commit
b93cca9780
  1. 56
      src/CppParser/Bindings/ParserGen.cs

56
src/CppParser/Bindings/ParserGen.cs

@ -4,6 +4,9 @@ using CppSharp.AST;
using CppSharp.Generators; using CppSharp.Generators;
using CppSharp.Passes; using CppSharp.Passes;
using CppSharp.Types; using CppSharp.Types;
#if !OLD_PARSER
using CppAbi = CppSharp.Parser.AST.CppAbi;
#endif
namespace CppSharp namespace CppSharp
{ {
@ -12,11 +15,15 @@ namespace CppSharp
/// </summary> /// </summary>
class ParserGen : ILibrary class ParserGen : ILibrary
{ {
private readonly GeneratorKind Kind; internal readonly GeneratorKind Kind;
internal readonly string Triple;
internal readonly CppAbi Abi;
public ParserGen(GeneratorKind kind) public ParserGen(GeneratorKind kind, string triple, CppAbi abi)
{ {
Kind = kind; Kind = kind;
Triple = triple;
Abi = abi;
} }
static string GetSourceDirectory() static string GetSourceDirectory()
@ -39,12 +46,17 @@ namespace CppSharp
public void Setup(Driver driver) public void Setup(Driver driver)
{ {
var options = driver.Options; var options = driver.Options;
options.TargetTriple = Triple;
options.Abi = Abi;
options.LibraryName = "CppSharp.CppParser.dll"; options.LibraryName = "CppSharp.CppParser.dll";
options.GeneratorKind = Kind; options.GeneratorKind = Kind;
options.Headers.Add("AST.h"); options.Headers.Add("AST.h");
options.Headers.Add("CppParser.h"); options.Headers.Add("CppParser.h");
options.Libraries.Add("CppSharp.CppParser.lib"); options.Libraries.Add("CppSharp.CppParser.lib");
if (Triple.Contains("apple"))
SetupMacOptions(options);
var basePath = Path.Combine(GetSourceDirectory(), "CppParser"); var basePath = Path.Combine(GetSourceDirectory(), "CppParser");
#if OLD_PARSER #if OLD_PARSER
@ -58,9 +70,32 @@ namespace CppSharp
options.OutputDir = "../../../../src/CppParser/Bindings/"; options.OutputDir = "../../../../src/CppParser/Bindings/";
options.OutputDir += Kind.ToString(); options.OutputDir += Kind.ToString();
if (Kind == GeneratorKind.CSharp)
options.OutputDir += "/" + options.TargetTriple;
options.GenerateLibraryNamespace = false; options.GenerateLibraryNamespace = false;
options.CheckSymbols = false; options.CheckSymbols = false;
options.Verbose = true; options.Verbose = false;
}
private static void SetupMacOptions(DriverOptions options)
{
options.MicrosoftMode = false;
options.NoBuiltinIncludes = true;
const string MAC_INCLUDE_PATH = @"C:\Development\CppSharp\build\vs2012\lib\Release_x32\";
#if OLD_PARSER
options.SystemIncludeDirs.Add(MAC_INCLUDE_PATH + @"include");
options.SystemIncludeDirs.Add(MAC_INCLUDE_PATH + @"lib\libcxx\include");
options.SystemIncludeDirs.Add(MAC_INCLUDE_PATH + @"lib\clang\4.2\include");
options.Arguments.Add("-stdlib=libc++");
#else
options.addSystemIncludeDirs(MAC_INCLUDE_PATH + @"include");
options.addSystemIncludeDirs(MAC_INCLUDE_PATH + @"lib\libcxx\include");
options.addSystemIncludeDirs(MAC_INCLUDE_PATH + @"lib\clang\4.2\include");
options.addArguments("-stdlib=libc++");
#endif
} }
public void SetupPasses(Driver driver) public void SetupPasses(Driver driver)
@ -86,11 +121,22 @@ namespace CppSharp
public static void Main(string[] args) public static void Main(string[] args)
{ {
Console.WriteLine("Generating the C++/CLI parser bindings..."); Console.WriteLine("Generating the C++/CLI parser bindings...");
ConsoleDriver.Run(new ParserGen(GeneratorKind.CLI)); ConsoleDriver.Run(new ParserGen(GeneratorKind.CLI, "i686-pc-win32",
CppAbi.Microsoft));
Console.WriteLine(); Console.WriteLine();
Console.WriteLine("Generating the C# parser bindings..."); Console.WriteLine("Generating the C# parser bindings...");
ConsoleDriver.Run(new ParserGen(GeneratorKind.CSharp)); ConsoleDriver.Run(new ParserGen(GeneratorKind.CSharp, "i686-pc-win32",
CppAbi.Microsoft));
// Uncoment the following lines to enable generation of Mac parser bindings.
// This is disabled by default for now since it requires a non-trivial
// environment setup: a copy of the Mac SDK native headers and a recent checkout
// of libcxx since the one provided by the Mac SDK is not compatible with a recent
// Clang frontend that we use to parse it.
//ConsoleDriver.Run(new ParserGen(GeneratorKind.CSharp, "i686-apple-darwin12.4.0",
// CppAbi.Itanium));
} }
} }

Loading…
Cancel
Save