478 lines
18 KiB
C#
478 lines
18 KiB
C#
|
|
// Tencent is pleased to support the open source community by making UnLua available.
|
||
|
|
//
|
||
|
|
// Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
|
||
|
|
//
|
||
|
|
// Licensed under the MIT License (the "License");
|
||
|
|
// you may not use this file except in compliance with the License. You may obtain a copy of the License at
|
||
|
|
//
|
||
|
|
// http://opensource.org/licenses/MIT
|
||
|
|
//
|
||
|
|
// Unless required by applicable law or agreed to in writing,
|
||
|
|
// software distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
|
// See the License for the specific language governing permissions and limitations under the License.
|
||
|
|
|
||
|
|
using System;
|
||
|
|
using System.Collections.Generic;
|
||
|
|
using System.Diagnostics;
|
||
|
|
using System.IO;
|
||
|
|
using System.Linq;
|
||
|
|
using System.Reflection;
|
||
|
|
using System.Runtime.InteropServices;
|
||
|
|
#if UE_5_0_OR_LATER
|
||
|
|
using EpicGames.Core;
|
||
|
|
#else
|
||
|
|
using Tools.DotNETCommon;
|
||
|
|
#endif
|
||
|
|
using UnrealBuildTool;
|
||
|
|
|
||
|
|
public class Lua : ModuleRules
|
||
|
|
{
|
||
|
|
public Lua(ReadOnlyTargetRules Target) : base(Target)
|
||
|
|
{
|
||
|
|
Type = ModuleType.External;
|
||
|
|
bEnableUndefinedIdentifierWarnings = false;
|
||
|
|
ShadowVariableWarningLevel = WarningLevel.Off;
|
||
|
|
|
||
|
|
m_LuaVersion = GetLuaVersion();
|
||
|
|
m_Config = GetConfigName();
|
||
|
|
m_LibName = GetLibraryName();
|
||
|
|
m_BuildSystem = GetBuildSystem();
|
||
|
|
m_CompileAsCpp = ShouldCompileAsCpp();
|
||
|
|
m_LibDirName = string.Format("lib-{0}", m_CompileAsCpp ? "cpp" : "c");
|
||
|
|
m_LuaDirName = m_LuaVersion;
|
||
|
|
|
||
|
|
PublicIncludePaths.Add(Path.Combine(ModuleDirectory, m_LuaDirName, "src"));
|
||
|
|
|
||
|
|
var buildMethodName = "BuildFor" + Target.Platform;
|
||
|
|
|
||
|
|
var buildMethod = GetType().GetMethod(buildMethodName, BindingFlags.Instance | BindingFlags.NonPublic);
|
||
|
|
if (buildMethod == null)
|
||
|
|
throw new NotSupportedException(buildMethodName);
|
||
|
|
|
||
|
|
buildMethod.Invoke(this, Array.Empty<object>());
|
||
|
|
}
|
||
|
|
|
||
|
|
#region Build for Platforms
|
||
|
|
|
||
|
|
private void BuildForWin64()
|
||
|
|
{
|
||
|
|
var dllPath = GetLibraryPath();
|
||
|
|
var libPath = Path.ChangeExtension(dllPath, ".lib");
|
||
|
|
var pdbPath = Path.ChangeExtension(dllPath, ".pdb");
|
||
|
|
var dirPath = Path.GetDirectoryName(dllPath);
|
||
|
|
|
||
|
|
var isDebug = m_Config == "Debug";
|
||
|
|
var dstFiles = new List<string> { dllPath, libPath };
|
||
|
|
if (isDebug)
|
||
|
|
dstFiles.Add(pdbPath);
|
||
|
|
|
||
|
|
if (!dstFiles.All(File.Exists))
|
||
|
|
{
|
||
|
|
var buildDir = CMake();
|
||
|
|
CopyDirectory(Path.Combine(buildDir, m_Config), dirPath);
|
||
|
|
}
|
||
|
|
|
||
|
|
PublicDefinitions.Add("LUA_BUILD_AS_DLL");
|
||
|
|
PublicDelayLoadDLLs.Add(m_LibName);
|
||
|
|
PublicAdditionalLibraries.Add(libPath);
|
||
|
|
|
||
|
|
SetupForRuntimeDependency(dllPath, "Win64");
|
||
|
|
if (isDebug)
|
||
|
|
SetupForRuntimeDependency(pdbPath, "Win64");
|
||
|
|
}
|
||
|
|
|
||
|
|
private void BuildForAndroid()
|
||
|
|
{
|
||
|
|
var ndkRoot = Environment.GetEnvironmentVariable("NDKROOT");
|
||
|
|
if (ndkRoot == null)
|
||
|
|
throw new BuildException("can't find NDKROOT");
|
||
|
|
|
||
|
|
var toolchain = GetAndroidToolChain();
|
||
|
|
var ndkApiLevel = toolchain.GetNdkApiLevelInt(21);
|
||
|
|
Console.WriteLine("toolchain.GetNdkApiLevelInt=", ndkApiLevel);
|
||
|
|
var abiNames = new[] { "armeabi-v7a", "arm64-v8a", "x86_64" };
|
||
|
|
foreach (var abiName in abiNames)
|
||
|
|
{
|
||
|
|
var libFile = GetLibraryPath(abiName);
|
||
|
|
PublicAdditionalLibraries.Add(libFile);
|
||
|
|
if (File.Exists(libFile))
|
||
|
|
continue;
|
||
|
|
|
||
|
|
EnsureDirectoryExists(libFile);
|
||
|
|
var args = new Dictionary<string, string>
|
||
|
|
{
|
||
|
|
{ "CMAKE_TOOLCHAIN_FILE", Path.Combine(ndkRoot, "build/cmake/android.toolchain.cmake") },
|
||
|
|
{ "ANDROID_ABI", abiName },
|
||
|
|
{ "ANDROID_PLATFORM", "android-" + ndkApiLevel }
|
||
|
|
};
|
||
|
|
var buildDir = CMake(args);
|
||
|
|
var buildFile = Path.Combine(buildDir, m_LibName);
|
||
|
|
File.Copy(buildFile, libFile, true);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private IAndroidToolChain GetAndroidToolChain()
|
||
|
|
{
|
||
|
|
#if UE_5_2_OR_LATER
|
||
|
|
var ueBuildPlatformType = Assembly.GetAssembly(typeof(IAndroidToolChain)).GetType("UnrealBuildTool.UEBuildPlatform");
|
||
|
|
var getBuildPlatformMethod = ueBuildPlatformType.GetMethod("GetBuildPlatform", BindingFlags.Static | BindingFlags.Public);
|
||
|
|
var androidBuildPlatform = getBuildPlatformMethod.Invoke(null, new object[] { UnrealTargetPlatform.Android });
|
||
|
|
var createTempToolChainForProjectMethod = androidBuildPlatform.GetType().GetMethod("CreateTempToolChainForProject");
|
||
|
|
var toolchain = (IAndroidToolChain)createTempToolChainForProjectMethod.Invoke(androidBuildPlatform, new object[] { Target.ProjectFile });
|
||
|
|
#else
|
||
|
|
var toolchain = AndroidExports.CreateToolChain(Target.ProjectFile);
|
||
|
|
#endif
|
||
|
|
return toolchain;
|
||
|
|
}
|
||
|
|
|
||
|
|
private void BuildForLinux()
|
||
|
|
{
|
||
|
|
var libFile = GetLibraryPath();
|
||
|
|
PublicAdditionalLibraries.Add(libFile);
|
||
|
|
if (File.Exists(libFile))
|
||
|
|
return;
|
||
|
|
|
||
|
|
var env = Environment.GetEnvironmentVariable("LINUX_MULTIARCH_ROOT");
|
||
|
|
if (string.IsNullOrEmpty(env))
|
||
|
|
throw new BuildException("LINUX_MULTIARCH_ROOT environment variable needed.");
|
||
|
|
|
||
|
|
EnsureDirectoryExists(libFile);
|
||
|
|
var sysName = "x86_64-unknown-linux-gnu";
|
||
|
|
var sysRoot = Path.Combine(env, sysName);
|
||
|
|
var clangPath = Path.Combine(env, sysName, @"bin\clang.exe");
|
||
|
|
var clangPlusPlusPath = Path.Combine(env, sysName, @"bin\clang++.exe");
|
||
|
|
var args = new Dictionary<string, string>
|
||
|
|
{
|
||
|
|
{ "CMAKE_SYSROOT", sysRoot },
|
||
|
|
{ "CMAKE_SYSTEM_NAME", "Linux" },
|
||
|
|
{ "CMAKE_C_COMPILER_TARGET", sysName },
|
||
|
|
{ "CMAKE_C_COMPILER:PATH", clangPath },
|
||
|
|
{ "CMAKE_CXX_COMPILER:PATH", clangPlusPlusPath },
|
||
|
|
{ "CMAKE_CXX_COMPILER_TARGET", sysName },
|
||
|
|
};
|
||
|
|
var buildDir = CMake(args);
|
||
|
|
var buildFile = Path.Combine(buildDir, m_LibName);
|
||
|
|
File.Copy(buildFile, libFile, true);
|
||
|
|
}
|
||
|
|
|
||
|
|
private void BuildForLinuxAArch64()
|
||
|
|
{
|
||
|
|
var libFile = GetLibraryPath();
|
||
|
|
PublicAdditionalLibraries.Add(libFile);
|
||
|
|
if (File.Exists(libFile))
|
||
|
|
return;
|
||
|
|
|
||
|
|
var env = Environment.GetEnvironmentVariable("LINUX_MULTIARCH_ROOT");
|
||
|
|
if (string.IsNullOrEmpty(env))
|
||
|
|
throw new BuildException("LINUX_MULTIARCH_ROOT environment variable needed.");
|
||
|
|
|
||
|
|
EnsureDirectoryExists(libFile);
|
||
|
|
var sysName = "aarch64-unknown-linux-gnueabi";
|
||
|
|
var sysRoot = Path.Combine(env, sysName);
|
||
|
|
var clangPath = Path.Combine(env, sysName, @"bin\clang.exe");
|
||
|
|
var clangPlusPlusPath = Path.Combine(env, sysName, @"bin\clang++.exe");
|
||
|
|
var args = new Dictionary<string, string>
|
||
|
|
{
|
||
|
|
{ "CMAKE_SYSROOT", sysRoot },
|
||
|
|
{ "CMAKE_SYSTEM_NAME", "Linux" },
|
||
|
|
{ "CMAKE_C_COMPILER_TARGET", sysName },
|
||
|
|
{ "CMAKE_C_COMPILER:PATH", clangPath },
|
||
|
|
{ "CMAKE_CXX_COMPILER:PATH", clangPlusPlusPath },
|
||
|
|
{ "CMAKE_CXX_COMPILER_TARGET", sysName },
|
||
|
|
};
|
||
|
|
var buildDir = CMake(args);
|
||
|
|
var buildFile = Path.Combine(buildDir, m_LibName);
|
||
|
|
File.Copy(buildFile, libFile, true);
|
||
|
|
}
|
||
|
|
|
||
|
|
private void BuildForMac()
|
||
|
|
{
|
||
|
|
#if UE_5_2_OR_LATER
|
||
|
|
var abiName = Target.Architecture.ToString();
|
||
|
|
#else
|
||
|
|
var abiName = Target.Architecture;
|
||
|
|
#endif
|
||
|
|
var libFile = GetLibraryPath(abiName);
|
||
|
|
if (!File.Exists(libFile))
|
||
|
|
{
|
||
|
|
EnsureDirectoryExists(libFile);
|
||
|
|
var args = new Dictionary<string, string>
|
||
|
|
{
|
||
|
|
{ "CMAKE_OSX_ARCHITECTURES", abiName }
|
||
|
|
};
|
||
|
|
var buildDir = CMake(args);
|
||
|
|
var buildFile = Path.Combine(buildDir, m_LibName);
|
||
|
|
File.Copy(buildFile, libFile, true);
|
||
|
|
}
|
||
|
|
|
||
|
|
PublicDefinitions.Add("LUA_USE_MACOSX");
|
||
|
|
PublicAdditionalLibraries.Add(libFile);
|
||
|
|
RuntimeDependencies.Add(libFile);
|
||
|
|
}
|
||
|
|
|
||
|
|
private void BuildForIOS()
|
||
|
|
{
|
||
|
|
var libFile = GetLibraryPath("arm64");
|
||
|
|
if (!File.Exists(libFile))
|
||
|
|
{
|
||
|
|
var args = new Dictionary<string, string>
|
||
|
|
{
|
||
|
|
{ "CMAKE_TOOLCHAIN_FILE", Path.Combine(ModuleDirectory, "toolchain/ios.toolchain.cmake") },
|
||
|
|
{ "PLATFORM", "OS64" }
|
||
|
|
};
|
||
|
|
var buildDir = CMake(args);
|
||
|
|
var buildFile = Path.Combine(buildDir, m_Config + "-iphoneos", m_LibName);
|
||
|
|
EnsureDirectoryExists(libFile);
|
||
|
|
File.Copy(buildFile, libFile, true);
|
||
|
|
}
|
||
|
|
|
||
|
|
PublicAdditionalLibraries.Add(libFile);
|
||
|
|
}
|
||
|
|
|
||
|
|
private void BuildForPS5()
|
||
|
|
{
|
||
|
|
var libFile = GetLibraryPath();
|
||
|
|
PublicAdditionalLibraries.Add(libFile);
|
||
|
|
PublicIncludePaths.Add(Path.Combine(ModuleDirectory, m_LuaDirName, "src-ps5"));
|
||
|
|
|
||
|
|
if (File.Exists(libFile))
|
||
|
|
return;
|
||
|
|
|
||
|
|
var sceRootDir = Environment.GetEnvironmentVariable("SCE_ROOT_DIR");
|
||
|
|
if (string.IsNullOrEmpty(sceRootDir))
|
||
|
|
throw new BuildException("SCE_ROOT_DIR environment variable needed.");
|
||
|
|
|
||
|
|
var sceSdkDir = Environment.GetEnvironmentVariable("SCE_PROSPERO_SDK_DIR");
|
||
|
|
if (string.IsNullOrEmpty(sceSdkDir))
|
||
|
|
throw new BuildException("SCE_PROSPERO_SDK_DIR environment variable needed.");
|
||
|
|
|
||
|
|
EnsureDirectoryExists(libFile);
|
||
|
|
var sysRoot = Path.Combine(sceSdkDir, @"target");
|
||
|
|
var clangPath = Path.Combine(sceSdkDir, @"host_tools/bin/prospero-clang.exe");
|
||
|
|
var clangPlusPlusPath = Path.Combine(sceSdkDir, @"host_tools/bin/prospero-clang.exe");
|
||
|
|
var arPath = Path.Combine(sceSdkDir, @"host_tools/bin/prospero-llvm-ar.exe");
|
||
|
|
var args = new Dictionary<string, string>
|
||
|
|
{
|
||
|
|
{ "CMAKE_TOOLCHAIN_FILE", Path.Combine(sceRootDir, @"Prospero\Tools\CMake\PS5.cmake") },
|
||
|
|
{ "PS5", "1" }
|
||
|
|
};
|
||
|
|
var buildDir = CMake(args);
|
||
|
|
var buildFile = Path.Combine(buildDir, m_Config, m_LibName);
|
||
|
|
File.Copy(buildFile, libFile, true);
|
||
|
|
}
|
||
|
|
|
||
|
|
#endregion
|
||
|
|
|
||
|
|
private string CMake(Dictionary<string, string> extraArgs = null)
|
||
|
|
{
|
||
|
|
if (extraArgs == null)
|
||
|
|
extraArgs = new Dictionary<string, string>();
|
||
|
|
|
||
|
|
Console.WriteLine("generating {0} library with cmake...", m_LuaDirName);
|
||
|
|
|
||
|
|
var osPlatform = Environment.OSVersion.Platform;
|
||
|
|
if (osPlatform == PlatformID.Win32NT)
|
||
|
|
{
|
||
|
|
var startInfo = new ProcessStartInfo
|
||
|
|
{
|
||
|
|
FileName = "cmd.exe",
|
||
|
|
WorkingDirectory = ModuleDirectory,
|
||
|
|
RedirectStandardInput = true,
|
||
|
|
UseShellExecute = false
|
||
|
|
};
|
||
|
|
var process = Process.Start(startInfo);
|
||
|
|
using (var writer = process.StandardInput)
|
||
|
|
{
|
||
|
|
var buildDir = string.Format("\"{0}/build\"", m_LuaDirName);
|
||
|
|
writer.WriteLine("rmdir /s /q {0} &mkdir {0} &pushd {0}", buildDir);
|
||
|
|
if (string.IsNullOrEmpty(m_BuildSystem))
|
||
|
|
writer.Write("cmake ../.. ");
|
||
|
|
else
|
||
|
|
writer.Write("cmake -G \"{0}\" ../.. ", m_BuildSystem);
|
||
|
|
var args = new Dictionary<string, string>
|
||
|
|
{
|
||
|
|
{ "LUA_VERSION", m_LuaVersion },
|
||
|
|
{ "LUA_COMPILE_AS_CPP", m_CompileAsCpp ? "1" : "0" },
|
||
|
|
};
|
||
|
|
foreach (var arg in args)
|
||
|
|
writer.Write(" -D{0}=\"{1}\"", arg.Key, arg.Value);
|
||
|
|
foreach (var arg in extraArgs)
|
||
|
|
writer.Write(" -D{0}=\"{1}\"", arg.Key, arg.Value);
|
||
|
|
writer.WriteLine();
|
||
|
|
writer.WriteLine("popd");
|
||
|
|
writer.WriteLine("cmake --build {0}/build --config {1}", m_LuaDirName, m_Config);
|
||
|
|
}
|
||
|
|
|
||
|
|
process.WaitForExit();
|
||
|
|
|
||
|
|
return Path.Combine(ModuleDirectory, m_LuaDirName, "build");
|
||
|
|
}
|
||
|
|
|
||
|
|
if (osPlatform == PlatformID.Unix || osPlatform == PlatformID.MacOSX)
|
||
|
|
{
|
||
|
|
var startInfo = new ProcessStartInfo
|
||
|
|
{
|
||
|
|
FileName = "/bin/bash",
|
||
|
|
WorkingDirectory = ModuleDirectory,
|
||
|
|
RedirectStandardInput = true,
|
||
|
|
UseShellExecute = false
|
||
|
|
};
|
||
|
|
var process = Process.Start(startInfo);
|
||
|
|
using (var writer = process.StandardInput)
|
||
|
|
{
|
||
|
|
var buildDir = string.Format("\"{0}/build\"", m_LuaDirName);
|
||
|
|
writer.WriteLine("rm -rf {0} &&mkdir {0} &&cd {0}", buildDir);
|
||
|
|
writer.Write("cmake -G \"{0}\" ../.. ", m_BuildSystem);
|
||
|
|
var args = new Dictionary<string, string>
|
||
|
|
{
|
||
|
|
{ "LUA_VERSION", m_LuaVersion },
|
||
|
|
{ "LUA_COMPILE_AS_CPP", m_CompileAsCpp ? "1" : "0" },
|
||
|
|
};
|
||
|
|
foreach (var arg in args)
|
||
|
|
writer.Write(" -D{0}={1}", arg.Key, arg.Value);
|
||
|
|
foreach (var arg in extraArgs)
|
||
|
|
writer.Write(" -D{0}={1}", arg.Key, arg.Value);
|
||
|
|
writer.WriteLine();
|
||
|
|
writer.WriteLine("cd ../..");
|
||
|
|
writer.WriteLine("cmake --build {0}/build --config {1}", m_LuaDirName, m_Config);
|
||
|
|
}
|
||
|
|
|
||
|
|
process.WaitForExit();
|
||
|
|
|
||
|
|
return Path.Combine(ModuleDirectory, m_LuaDirName, "build");
|
||
|
|
}
|
||
|
|
|
||
|
|
throw new NotSupportedException();
|
||
|
|
}
|
||
|
|
|
||
|
|
private static void CopyDirectory(string srcDir, string dstDir)
|
||
|
|
{
|
||
|
|
var dir = new DirectoryInfo(srcDir);
|
||
|
|
if (!dir.Exists)
|
||
|
|
throw new DirectoryNotFoundException(dir.FullName);
|
||
|
|
|
||
|
|
var dirs = dir.GetDirectories();
|
||
|
|
Directory.CreateDirectory(dstDir);
|
||
|
|
|
||
|
|
foreach (var file in dir.GetFiles())
|
||
|
|
{
|
||
|
|
var targetFilePath = Path.Combine(dstDir, file.Name);
|
||
|
|
file.CopyTo(targetFilePath, true);
|
||
|
|
}
|
||
|
|
|
||
|
|
foreach (var subDir in dirs)
|
||
|
|
{
|
||
|
|
var newDstDir = Path.Combine(dstDir, subDir.Name);
|
||
|
|
CopyDirectory(subDir.FullName, newDstDir);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private bool ShouldCompileAsCpp()
|
||
|
|
{
|
||
|
|
var projectDir = Target.ProjectFile.Directory;
|
||
|
|
var configFilePath = projectDir + "/Config/DefaultUnLuaEditor.ini";
|
||
|
|
var configFileReference = new FileReference(configFilePath);
|
||
|
|
var configFile = FileReference.Exists(configFileReference)
|
||
|
|
? new ConfigFile(configFileReference)
|
||
|
|
: new ConfigFile();
|
||
|
|
var config = new ConfigHierarchy(new[] { configFile });
|
||
|
|
const string section = "/Script/UnLuaEditor.UnLuaEditorSettings";
|
||
|
|
bool flag;
|
||
|
|
if (config.GetBool(section, "bLuaCompileAsCpp", out flag))
|
||
|
|
return flag;
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
private string GetLuaVersion()
|
||
|
|
{
|
||
|
|
var projectDir = Target.ProjectFile.Directory;
|
||
|
|
var configFilePath = projectDir + "/Config/DefaultUnLuaEditor.ini";
|
||
|
|
var configFileReference = new FileReference(configFilePath);
|
||
|
|
var configFile = FileReference.Exists(configFileReference)
|
||
|
|
? new ConfigFile(configFileReference)
|
||
|
|
: new ConfigFile();
|
||
|
|
var config = new ConfigHierarchy(new[] { configFile });
|
||
|
|
const string section = "/Script/UnLuaEditor.UnLuaEditorSettings";
|
||
|
|
string version;
|
||
|
|
if (config.GetString(section, "LuaVersion", out version))
|
||
|
|
return version;
|
||
|
|
return "lua-5.4.3";
|
||
|
|
}
|
||
|
|
|
||
|
|
private void EnsureDirectoryExists(string fileName)
|
||
|
|
{
|
||
|
|
var dirName = Path.GetDirectoryName(fileName);
|
||
|
|
if (!Directory.Exists(dirName))
|
||
|
|
Directory.CreateDirectory(dirName);
|
||
|
|
}
|
||
|
|
|
||
|
|
private string GetLibraryName()
|
||
|
|
{
|
||
|
|
if (Target.Platform == UnrealTargetPlatform.Win64)
|
||
|
|
return "Lua.dll";
|
||
|
|
if (Target.Platform == UnrealTargetPlatform.Mac)
|
||
|
|
return "libLua.dylib";
|
||
|
|
return "libLua.a";
|
||
|
|
}
|
||
|
|
|
||
|
|
private string GetLibraryPath(string architecture = null)
|
||
|
|
{
|
||
|
|
if (architecture == null)
|
||
|
|
architecture = string.Empty;
|
||
|
|
return Path.Combine(ModuleDirectory, m_LuaDirName, m_LibDirName, Target.Platform.ToString(), architecture, m_Config, m_LibName);
|
||
|
|
}
|
||
|
|
|
||
|
|
private string GetConfigName()
|
||
|
|
{
|
||
|
|
if (Target.Configuration == UnrealTargetConfiguration.Debug
|
||
|
|
|| Target.Configuration == UnrealTargetConfiguration.DebugGame)
|
||
|
|
return "Debug";
|
||
|
|
return "Release";
|
||
|
|
}
|
||
|
|
|
||
|
|
private string GetBuildSystem()
|
||
|
|
{
|
||
|
|
var osPlatform = Environment.OSVersion.Platform;
|
||
|
|
if (osPlatform == PlatformID.Win32NT)
|
||
|
|
{
|
||
|
|
if (Target.Platform.IsInGroup(UnrealPlatformGroup.Linux))
|
||
|
|
return "Ninja";
|
||
|
|
if (Target.Platform.IsInGroup(UnrealPlatformGroup.Android))
|
||
|
|
return "Ninja";
|
||
|
|
if (Target.Platform.IsInGroup(UnrealPlatformGroup.Windows))
|
||
|
|
{
|
||
|
|
#if UE_4_27_OR_LATER
|
||
|
|
if (Target.WindowsPlatform.Compiler == WindowsCompiler.VisualStudio2022)
|
||
|
|
return "Visual Studio 17 2022";
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (osPlatform == PlatformID.Unix)
|
||
|
|
{
|
||
|
|
if (Target.Platform.IsInGroup(UnrealPlatformGroup.IOS))
|
||
|
|
return "Xcode";
|
||
|
|
return "Unix Makefiles";
|
||
|
|
}
|
||
|
|
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
|
||
|
|
private void SetupForRuntimeDependency(string fullPath, string platform)
|
||
|
|
{
|
||
|
|
if (!File.Exists(fullPath))
|
||
|
|
return;
|
||
|
|
var fileName = Path.GetFileName(fullPath);
|
||
|
|
var dstPath = Path.Combine("$(ProjectDir)", "Binaries", platform, fileName);
|
||
|
|
RuntimeDependencies.Add(dstPath, fullPath);
|
||
|
|
}
|
||
|
|
|
||
|
|
private readonly string m_LuaVersion;
|
||
|
|
private readonly string m_Config;
|
||
|
|
private readonly string m_LibName;
|
||
|
|
private readonly string m_LibDirName;
|
||
|
|
private readonly string m_LuaDirName;
|
||
|
|
private readonly string m_BuildSystem;
|
||
|
|
private readonly bool m_CompileAsCpp;
|
||
|
|
}
|