Skip to content

Commit 08e9e40

Browse files
committed
.NET: Inject preprocessor defs (MHWILDS, RE9, exe name, etc)
1 parent 3e825c2 commit 08e9e40

1 file changed

Lines changed: 41 additions & 1 deletion

File tree

csharp-api/REFCoreDeps/Compiler.cs

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Collections.Immutable;
4+
using System.Diagnostics;
45
using System.IO;
56
using System.Linq;
67
using System.Reflection;
@@ -144,10 +145,49 @@ public static List<PortableExecutableReference> GenerateExhaustiveMetadataRefere
144145
return referencesStr.Select(r => MetadataReference.CreateFromFile(r)).ToList();
145146
}
146147

148+
private static readonly Dictionary<string, string> s_gameAliases = new(StringComparer.OrdinalIgnoreCase)
149+
{
150+
{ "MonsterHunterWilds", "MHWILDS" },
151+
{ "DevilMayCry5", "DMC5" },
152+
{ "StreetFighter6", "SF6" },
153+
{ "DD2", "DD2" },
154+
};
155+
156+
private static List<string> GetGamePreprocessorSymbols()
157+
{
158+
var symbols = new List<string> { "REFRAMEWORK" };
159+
160+
try
161+
{
162+
var exePath = Process.GetCurrentProcess().MainModule.FileName;
163+
var exeName = Path.GetFileNameWithoutExtension(exePath);
164+
165+
// Always define the exe name (uppercased, non-alphanumeric stripped)
166+
var normalized = new string(exeName.Where(c => char.IsLetterOrDigit(c) || c == '_').ToArray()).ToUpperInvariant();
167+
if (normalized.Length > 0 && !char.IsDigit(normalized[0]))
168+
symbols.Add(normalized);
169+
170+
// Known short aliases
171+
if (s_gameAliases.TryGetValue(exeName, out var alias) && alias != normalized)
172+
symbols.Add(alias);
173+
174+
Console.WriteLine($"[Compiler] Preprocessor symbols: {string.Join(", ", symbols)}");
175+
}
176+
catch (Exception ex)
177+
{
178+
Console.WriteLine($"[Compiler] Failed to detect game for preprocessor symbols: {ex.Message}");
179+
}
180+
181+
return symbols;
182+
}
183+
147184
private static CSharpCompilation GenerateCode(string sourceCode, string filePath, Assembly executingAssembly, List<Assembly> deps)
148185
{
149186
var codeString = SourceText.From(sourceCode);
150-
var options = CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp12);
187+
var symbols = GetGamePreprocessorSymbols();
188+
var options = CSharpParseOptions.Default
189+
.WithLanguageVersion(LanguageVersion.CSharp12)
190+
.WithPreprocessorSymbols(symbols);
151191
var parsedSyntaxTree = SyntaxFactory.ParseSyntaxTree(codeString, options);
152192

153193
var references = GenerateExhaustiveMetadataReferences(executingAssembly, deps);

0 commit comments

Comments
 (0)