162 lines
4.0 KiB
C#
162 lines
4.0 KiB
C#
|
|
using System;
|
|||
|
|
using System.Diagnostics;
|
|||
|
|
using System.IO;
|
|||
|
|
using UnrealBuildTool;
|
|||
|
|
|
|||
|
|
public class UnrealSharpCore : ModuleRules
|
|||
|
|
{
|
|||
|
|
private readonly string _managedPath;
|
|||
|
|
private readonly string _managedBinariesPath;
|
|||
|
|
private readonly string _engineGluePath;
|
|||
|
|
|
|||
|
|
public UnrealSharpCore(ReadOnlyTargetRules Target) : base(Target)
|
|||
|
|
{
|
|||
|
|
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
|
|||
|
|
_managedPath = Path.Combine(PluginDirectory, "Managed");
|
|||
|
|
_managedBinariesPath = Path.Combine(PluginDirectory, "Binaries", "Managed");
|
|||
|
|
_engineGluePath = Path.Combine(_managedPath, "UnrealSharp", "UnrealSharp", "Generated");
|
|||
|
|
|
|||
|
|
PublicDefinitions.Add("GENERATED_GLUE_PATH=" + _engineGluePath.Replace("\\","/"));
|
|||
|
|
PublicDefinitions.Add("PLUGIN_PATH=" + PluginDirectory.Replace("\\","/"));
|
|||
|
|
PublicDefinitions.Add("BUILDING_EDITOR=" + (Target.bBuildEditor ? "1" : "0"));
|
|||
|
|
|
|||
|
|
PublicDependencyModuleNames.AddRange(
|
|||
|
|
new string[]
|
|||
|
|
{
|
|||
|
|
"Core",
|
|||
|
|
}
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
PrivateDependencyModuleNames.AddRange(
|
|||
|
|
new string[]
|
|||
|
|
{
|
|||
|
|
"CoreUObject",
|
|||
|
|
"Engine",
|
|||
|
|
"Slate",
|
|||
|
|
"SlateCore",
|
|||
|
|
"Boost",
|
|||
|
|
"XmlParser",
|
|||
|
|
"Json",
|
|||
|
|
"Projects",
|
|||
|
|
"UMG",
|
|||
|
|
"DeveloperSettings",
|
|||
|
|
"UnrealSharpProcHelper",
|
|||
|
|
"EnhancedInput",
|
|||
|
|
"UnrealSharpUtilities",
|
|||
|
|
"GameplayTags",
|
|||
|
|
"AIModule",
|
|||
|
|
"UnrealSharpBinds",
|
|||
|
|
"FieldNotification",
|
|||
|
|
"InputCore",
|
|||
|
|
}
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
PublicIncludePaths.AddRange(new string[] { ModuleDirectory });
|
|||
|
|
PublicDefinitions.Add("ForceAsEngineGlue=1");
|
|||
|
|
|
|||
|
|
IncludeDotNetHeaders();
|
|||
|
|
|
|||
|
|
if (Target.bBuildEditor)
|
|||
|
|
{
|
|||
|
|
PrivateDependencyModuleNames.AddRange(new string[]
|
|||
|
|
{
|
|||
|
|
"UnrealEd",
|
|||
|
|
"EditorSubsystem",
|
|||
|
|
"BlueprintGraph",
|
|||
|
|
"BlueprintEditorLibrary"
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
PublishSolution(Path.Combine(_managedPath, "UnrealSharpPrograms"));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (Target.bGenerateProjectFiles && Directory.Exists(_engineGluePath))
|
|||
|
|
{
|
|||
|
|
PublishSolution(Path.Combine(_managedPath, "UnrealSharp"));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void IncludeDotNetHeaders()
|
|||
|
|
{
|
|||
|
|
PublicSystemIncludePaths.Add(Path.Combine(_managedPath, "DotNetRuntime", "inc"));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static string FindDotNetExecutable()
|
|||
|
|
{
|
|||
|
|
const string DOTNET_WIN = "dotnet.exe";
|
|||
|
|
const string DOTNET_UNIX = "dotnet";
|
|||
|
|
|
|||
|
|
string dotnetExe = OperatingSystem.IsWindows() ? DOTNET_WIN : DOTNET_UNIX;
|
|||
|
|
|
|||
|
|
string pathVariable = Environment.GetEnvironmentVariable("PATH");
|
|||
|
|
|
|||
|
|
if (pathVariable == null)
|
|||
|
|
{
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
string[] paths = pathVariable.Split(Path.PathSeparator);
|
|||
|
|
|
|||
|
|
foreach (string path in paths)
|
|||
|
|
{
|
|||
|
|
// This is a hack to avoid using the dotnet.exe from the Unreal Engine installation directory.
|
|||
|
|
// Can't use the dotnet.exe from the Unreal Engine installation directory because it's .NET 6.0
|
|||
|
|
if (!path.Contains(@"\dotnet\"))
|
|||
|
|
{
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
var dotnetExePath = Path.Combine(path, dotnetExe);
|
|||
|
|
|
|||
|
|
if (File.Exists(dotnetExePath))
|
|||
|
|
{
|
|||
|
|
return dotnetExePath;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ( OperatingSystem.IsMacOS() )
|
|||
|
|
{
|
|||
|
|
if (File.Exists("/usr/local/share/dotnet/dotnet"))
|
|||
|
|
{
|
|||
|
|
return "/usr/local/share/dotnet/dotnet";
|
|||
|
|
}
|
|||
|
|
if (File.Exists("/opt/homebrew/bin/dotnet"))
|
|||
|
|
{
|
|||
|
|
return "/opt/homebrew/bin/dotnet";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
throw new Exception($"Couldn't find {dotnetExe} in PATH!");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void PublishSolution(string projectRootDirectory)
|
|||
|
|
{
|
|||
|
|
if (!Directory.Exists(projectRootDirectory))
|
|||
|
|
{
|
|||
|
|
throw new Exception($"Couldn't find project root directory: {projectRootDirectory}");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
Console.WriteLine($"Start publish solution: {projectRootDirectory}");
|
|||
|
|
|
|||
|
|
string dotnetPath = FindDotNetExecutable();
|
|||
|
|
|
|||
|
|
Process process = new Process();
|
|||
|
|
process.StartInfo.FileName = dotnetPath;
|
|||
|
|
process.StartInfo.WorkingDirectory = projectRootDirectory;
|
|||
|
|
|
|||
|
|
process.StartInfo.ArgumentList.Add("publish");
|
|||
|
|
process.StartInfo.ArgumentList.Add($"\"{projectRootDirectory}\"");
|
|||
|
|
|
|||
|
|
process.StartInfo.ArgumentList.Add($"-p:PublishDir=\"{_managedBinariesPath}\"");
|
|||
|
|
|
|||
|
|
process.Start();
|
|||
|
|
process.WaitForExit();
|
|||
|
|
|
|||
|
|
if (process.ExitCode != 0)
|
|||
|
|
{
|
|||
|
|
Console.WriteLine($"Failed to publish solution: {projectRootDirectory}");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|