Browse Source

Expand ParserGen to accept ARM64 build process

pull/1825/head
Conrad Kreyling 3 years ago
parent
commit
c519e3825d
  1. 33
      src/CppParser/ParserGen/ParserGen.cs
  2. 2
      src/Parser/ParserOptions.cs

33
src/CppParser/ParserGen/ParserGen.cs

@ -68,7 +68,16 @@ namespace CppSharp
SetupMacOptions(parserOptions); SetupMacOptions(parserOptions);
if (Triple.Contains("linux")) if (Triple.Contains("linux"))
SetupLinuxOptions(parserOptions); {
if(Triple.Contains("arm64"))
{
SetupLinuxOptions(parserOptions, "arm64-linux-gnu");
}
else
{
SetupLinuxOptions(parserOptions, "x86_64-linux-gnu");
}
}
var basePath = Path.Combine(GetSourceDirectory("src"), "CppParser"); var basePath = Path.Combine(GetSourceDirectory("src"), "CppParser");
parserModule.IncludeDirs.Add(basePath); parserModule.IncludeDirs.Add(basePath);
@ -87,13 +96,13 @@ namespace CppSharp
parserOptions.UnityBuild = true; parserOptions.UnityBuild = true;
} }
private void SetupLinuxOptions(ParserOptions options) private void SetupLinuxOptions(ParserOptions options, string headerFolderName)
{ {
options.MicrosoftMode = false; options.MicrosoftMode = false;
options.NoBuiltinIncludes = true; options.NoBuiltinIncludes = true;
var headersPath = Platform.IsLinux ? string.Empty : var headersPath = Platform.IsLinux ? string.Empty :
Path.Combine(GetSourceDirectory("build"), "headers", "x86_64-linux-gnu"); Path.Combine(GetSourceDirectory("build"), "headers", headerFolderName);
options.SetupLinux(headersPath); options.SetupLinux(headersPath);
options.AddDefines("_GLIBCXX_USE_CXX11_ABI=" + (IsGnuCpp11Abi ? "1" : "0")); options.AddDefines("_GLIBCXX_USE_CXX11_ABI=" + (IsGnuCpp11Abi ? "1" : "0"));
} }
@ -111,7 +120,7 @@ namespace CppSharp
var headersPath = Path.Combine(GetSourceDirectory("build"), "headers", var headersPath = Path.Combine(GetSourceDirectory("build"), "headers",
"osx"); "osx");
options.AddDefines("__DARWIN_OS_INLINE=inline");
options.AddSystemIncludeDirs(Path.Combine(headersPath, "include", "c++", "v1")); options.AddSystemIncludeDirs(Path.Combine(headersPath, "include", "c++", "v1"));
options.AddSystemIncludeDirs(options.BuiltinsDir); options.AddSystemIncludeDirs(options.BuiltinsDir);
options.AddSystemIncludeDirs(Path.Combine(headersPath, "include")); options.AddSystemIncludeDirs(Path.Combine(headersPath, "include"));
@ -186,18 +195,22 @@ namespace CppSharp
var linuxHeadersPath = Path.Combine(GetSourceDirectory("build"), @"headers\x86_64-linux-gnu"); var linuxHeadersPath = Path.Combine(GetSourceDirectory("build"), @"headers\x86_64-linux-gnu");
if (Directory.Exists(linuxHeadersPath) || Platform.IsLinux) if (Directory.Exists(linuxHeadersPath) || Platform.IsLinux)
{ {
Console.WriteLine("Generating the C# parser bindings for Linux..."); Console.WriteLine("Generating the C# parser bindings for Linux x64...");
ConsoleDriver.Run(new ParserGen(GeneratorKind.CSharp, "x86_64-linux-gnu")); ConsoleDriver.Run(new ParserGen(GeneratorKind.CSharp, "x86_64-linux-gnu"));
Console.WriteLine(); Console.WriteLine();
Console.WriteLine("Generating the C# parser bindings for Linux ARM64..."); Console.WriteLine("Generating the C# parser bindings for Linux x64 (GCC C++11 ABI)...");
ConsoleDriver.Run(new ParserGen(GeneratorKind.CSharp, "arm64-linux-gnu"));
Console.WriteLine();
Console.WriteLine("Generating the C# parser bindings for Linux (GCC C++11 ABI)...");
ConsoleDriver.Run(new ParserGen(GeneratorKind.CSharp, "x86_64-linux-gnu", ConsoleDriver.Run(new ParserGen(GeneratorKind.CSharp, "x86_64-linux-gnu",
isGnuCpp11Abi: true)); isGnuCpp11Abi: true));
Console.WriteLine(); Console.WriteLine();
}
var linuxArmHeadersPath = Path.Combine(GetSourceDirectory("build"), @"headers\arm64-linux-gnu");
if (Directory.Exists(linuxArmHeadersPath))
{
Console.WriteLine("Generating the C# parser bindings for Linux ARM64...");
ConsoleDriver.Run(new ParserGen(GeneratorKind.CSharp, "arm64-linux-gnu"));
Console.WriteLine();
Console.WriteLine("Generating the C# parser bindings for Linux ARM64 (GCC C++11 ABI)..."); Console.WriteLine("Generating the C# parser bindings for Linux ARM64 (GCC C++11 ABI)...");
ConsoleDriver.Run(new ParserGen(GeneratorKind.CSharp, "arm64-linux-gnu", ConsoleDriver.Run(new ParserGen(GeneratorKind.CSharp, "arm64-linux-gnu",

2
src/Parser/ParserOptions.cs

@ -249,7 +249,7 @@ namespace CppSharp.Parser
AddArguments(int.Parse(majorVersion) >= 11 ? $"-fgnuc-version=10.1" : $"-fgnuc-version={longVersion}"); AddArguments(int.Parse(majorVersion) >= 11 ? $"-fgnuc-version=10.1" : $"-fgnuc-version={longVersion}");
string[] versions = { longVersion, shortVersion, majorVersion }; string[] versions = { longVersion, shortVersion, majorVersion };
string[] triples = { "x86_64-linux-gnu", "x86_64-pc-linux-gnu" }; string[] triples = { "x86_64-linux-gnu", "x86_64-pc-linux-gnu", "aarch64-linux-gnu" };
if (compiler == "gcc") if (compiler == "gcc")
{ {
foreach (var version in versions) foreach (var version in versions)

Loading…
Cancel
Save