From dc743a23ce4c8d969d85482d18752a3e7c4d5596 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Matos?= Date: Tue, 30 May 2023 16:04:11 +0100 Subject: [PATCH 1/2] Fix module being ignored when it cannot be found based on include dir. (#1736) --- src/CLI/Generator.cs | 3 +++ src/Generator/Driver.cs | 7 ++++++- src/Generator/Passes/CleanUnitPass.cs | 11 +++-------- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/CLI/Generator.cs b/src/CLI/Generator.cs index ed215001..58db9ac7 100644 --- a/src/CLI/Generator.cs +++ b/src/CLI/Generator.cs @@ -108,6 +108,9 @@ namespace CppSharp if (string.IsNullOrEmpty(options.OutputNamespace)) options.OutputNamespace = moduleName; + if (options.IncludeDirs.Count == 0) + options.IncludeDirs.Add(Path.GetDirectoryName(options.HeaderFiles.First())); + SetupTargetTriple(); return true; diff --git a/src/Generator/Driver.cs b/src/Generator/Driver.cs index 29e36d96..82780bfa 100644 --- a/src/Generator/Driver.cs +++ b/src/Generator/Driver.cs @@ -439,7 +439,12 @@ namespace CppSharp } new CleanUnitPass { Context = driver.Context }.VisitASTContext(driver.Context.ASTContext); - options.Modules.RemoveAll(m => m != options.SystemModule && !m.Units.GetGenerated().Any()); + foreach (var module in options.Modules.Where( + m => m != options.SystemModule && !m.Units.GetGenerated().Any())) + { + Diagnostics.Message($"Removing module {module} because no translation units are generated..."); + options.Modules.Remove(module); + } if (!options.Quiet) Diagnostics.Message("Processing code..."); diff --git a/src/Generator/Passes/CleanUnitPass.cs b/src/Generator/Passes/CleanUnitPass.cs index 4d1b3750..ef02a4c7 100644 --- a/src/Generator/Passes/CleanUnitPass.cs +++ b/src/Generator/Passes/CleanUnitPass.cs @@ -31,14 +31,9 @@ namespace CppSharp.Passes includeDir = "."; includeDir = Path.GetFullPath(includeDir); - Module module = Options.Modules.Find( - m => m.IncludeDirs.Any(i => Path.GetFullPath(i) == includeDir)); - if (module == null) - { - unit.ExplicitlyIgnore(); - module = Options.Modules[1]; - } - return module; + return Options.Modules.FirstOrDefault( + m => m.IncludeDirs.Any(i => Path.GetFullPath(i) == includeDir)) ?? + Options.Modules[1]; } public override bool VisitDeclarationContext(DeclarationContext context) From 02725320fd14bf1d236f75c7f6ad8b6217b71a9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Matos?= Date: Tue, 30 May 2023 16:39:37 +0100 Subject: [PATCH 2/2] Workaround parsing GNU system headers with GCC 11.0 version. (#1737) Closes https://github.com/mono/CppSharp/issues/1703. Upstream bugs: https://github.com/llvm/llvm-project/issues/51607 https://github.com/llvm/llvm-project/issues/53152 --- src/Parser/ParserOptions.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Parser/ParserOptions.cs b/src/Parser/ParserOptions.cs index cde493bd..7cda0375 100644 --- a/src/Parser/ParserOptions.cs +++ b/src/Parser/ParserOptions.cs @@ -240,9 +240,11 @@ namespace CppSharp.Parser GetUnixCompilerInfo(headersPath, out var compiler, out var longVersion, out var shortVersion); AddSystemIncludeDirs(BuiltinsDir); - AddArguments($"-fgnuc-version={longVersion}"); var majorVersion = shortVersion.Split('.')[0]; + // Workaround https://github.com/llvm/llvm-project/issues/53152, remove once bug is fixed. + AddArguments(int.Parse(majorVersion) >= 11 ? $"-fgnuc-version=10.1" : $"-fgnuc-version={longVersion}"); + string[] versions = { longVersion, shortVersion, majorVersion }; string[] triples = { "x86_64-linux-gnu", "x86_64-pc-linux-gnu" }; if (compiler == "gcc")