From be73e994bc532a67fe1ae71138a5829b47fc2ea6 Mon Sep 17 00:00:00 2001 From: Joao Matos Date: Sat, 28 Dec 2019 15:36:33 +0000 Subject: [PATCH] Implement logic for -fgnuc-version= argument required by LLVM. Signed-off-by: Joao Matos --- src/Parser/ParserOptions.cs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/Parser/ParserOptions.cs b/src/Parser/ParserOptions.cs index 02beeb6d..6316d28b 100644 --- a/src/Parser/ParserOptions.cs +++ b/src/Parser/ParserOptions.cs @@ -242,6 +242,7 @@ namespace CppSharp.Parser NoBuiltinIncludes = true; NoStandardIncludes = true; + AddArguments("-fgnuc-version=4.2.1"); AddArguments("-stdlib=libc++"); } @@ -297,6 +298,7 @@ namespace CppSharp.Parser GetUnixCompilerInfo(headersPath, out compiler, out longVersion, out shortVersion); AddSystemIncludeDirs(BuiltinsDir); + AddArguments($"-fgnuc-version={longVersion}"); string[] versions = { longVersion, shortVersion }; string[] triples = { "x86_64-linux-gnu", "x86_64-pc-linux-gnu" }; @@ -345,6 +347,23 @@ namespace CppSharp.Parser if (!LanguageVersion.HasValue) 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) { case CppSharp.Parser.LanguageVersion.C99: