PO/Library/PackageCache/com.unity.toolchain.win-x86.../Editor/Unity.Toolchain.cs

86 lines
2.9 KiB
C#

using System;
using System.IO;
using System.Collections.Generic;
using UnityEngine;
using NiceIO.Sysroot;
using UnityEditor.Il2Cpp;
namespace UnityEditor.Il2Cpp
{
/// <summary>
/// Toolchain for building Linux x86_64 target on Windows x86_64 host
/// </summary>
public class ToolchainWindowsX86_64LinuxX86_64: SysrootLinuxX86_64
{
private string _packageName => "com.unity.toolchain.win-x86_64-linux-x86_64";
/// <summary>
/// Name of package
/// </summary>
public override string Name => _packageName;
/// <summary>
/// Name of host platform
/// </summary>
public override string HostPlatform => "windows";
/// <summary>
/// Name of host architecture
/// </summary>
public override string HostArch => "x86_64";
/// <summary>
/// Name of target platform
/// </summary>
public override string TargetPlatform => "linux";
/// <summary>
/// Name of target architecture
/// </summary>
public override string TargetArch => "x86_64";
private string _payloadVersion => "llvm-9.0.0-1";
private string _payloadDir;
private NPath _toolchainPath = null;
public ToolchainWindowsX86_64LinuxX86_64()
{
_payloadDir = $"windows-x86_64-linux-x86_64/{_payloadVersion}";
RegisterPayload(_packageName, _payloadDir);
_toolchainPath = PayloadInstallDirectory(_payloadDir);
}
/// <summary>
/// Initialize toolchain
/// </summary>
public override bool Initialize()
{
UpdatePath();
return base.Initialize();
}
private void UpdatePath()
{
string binPath = _toolchainPath.Combine("bin").ToString(SlashMode.Native);
string paths = Environment.GetEnvironmentVariable("PATH");
foreach (var path in paths.Split(';'))
{
if (path == binPath)
return;
}
Environment.SetEnvironmentVariable("PATH", $"{paths};{binPath}");
}
/// <summary>
/// Supplies arguments to il2cpp.exe
/// </summary>
/// <returns>Next argument to il2cpp.exe</returns>
public override IEnumerable<string> GetIl2CppArguments()
{
var linkerPath = _toolchainPath.Combine("bin/ld.lld");
var target = "x86_64-glibc2.17-linux-gnu";
yield return $"--sysroot-path={SysrootInstallDirectory()}";
yield return $"--compiler-flags=\"-target {target}\"";
yield return $"--tool-chain-path={_toolchainPath.InQuotes(SlashMode.Native)}";
yield return $"--linker-flags=\"-fuse-ld=\"{linkerPath.InQuotes(SlashMode.Native)}\" -target {target} -static-libstdc++\"";
}
}
}