Browse Source

Implement logic for -fgnuc-version= argument required by LLVM.

Signed-off-by: Joao Matos <joao@tritao.eu>
pull/1278/head
Joao Matos 6 years ago
parent
commit
be73e994bc
  1. 19
      src/Parser/ParserOptions.cs

19
src/Parser/ParserOptions.cs

@ -242,6 +242,7 @@ namespace CppSharp.Parser
NoBuiltinIncludes = true; NoBuiltinIncludes = true;
NoStandardIncludes = true; NoStandardIncludes = true;
AddArguments("-fgnuc-version=4.2.1");
AddArguments("-stdlib=libc++"); AddArguments("-stdlib=libc++");
} }
@ -297,6 +298,7 @@ namespace CppSharp.Parser
GetUnixCompilerInfo(headersPath, out compiler, out longVersion, out shortVersion); GetUnixCompilerInfo(headersPath, out compiler, out longVersion, out shortVersion);
AddSystemIncludeDirs(BuiltinsDir); AddSystemIncludeDirs(BuiltinsDir);
AddArguments($"-fgnuc-version={longVersion}");
string[] versions = { longVersion, shortVersion }; string[] versions = { longVersion, shortVersion };
string[] triples = { "x86_64-linux-gnu", "x86_64-pc-linux-gnu" }; string[] triples = { "x86_64-linux-gnu", "x86_64-pc-linux-gnu" };
@ -345,6 +347,23 @@ namespace CppSharp.Parser
if (!LanguageVersion.HasValue) if (!LanguageVersion.HasValue)
LanguageVersion = CppSharp.Parser.LanguageVersion.CPP14_GNU; LanguageVersion = CppSharp.Parser.LanguageVersion.CPP14_GNU;
// As of Clang revision 5e866e411caa we are required to pass "-fgnuc-version="
// to get the __GNUC__ symbol defined. macOS and Linux system headers require
// this define, so we need explicitly pass it to Clang.
// Note that this setup is more accurately done in the platform-specific
// setup methods, below is generic fallback in case that logic was disabled.
if (NoBuiltinIncludes)
{
switch (Platform.Host)
{
case TargetPlatform.MacOS:
case TargetPlatform.Linux:
AddArguments("-fgnuc-version=4.2.1");
break;
}
}
switch (LanguageVersion) switch (LanguageVersion)
{ {
case CppSharp.Parser.LanguageVersion.C99: case CppSharp.Parser.LanguageVersion.C99:

Loading…
Cancel
Save