Hello, I am using the Toolchain Win Linux package to build a Linux IL2CPP player from my Windows PC. This package works when I manually change my Target Platform to Linux in the Build Settings and then hit “Build”. However the package does not work when I try and build via my custom C# script that builds Windows (32 and 64 bit) and Linux all at once.
You can see the script below. It just calls BuildPipeline.BuildPlayer(options); with the specific options for each platform.
When I try and run it I get the following error Exception: Exception: C++ code builder is unable to build C++ code for Linux: Could not find valid clang executable at clang.exe
(let me know if you need to see the whole stack trace)
It seems like the package does something extra when manually switching to Linux that my script is not doing. Is there any workaround for this? Having to manually wait for each platform to build every time I make an update is very time consuming.
public class Build
{
static string[] scenes = {
"Assets/Scenes/Menu.unity",
"Assets/Scenes/Game.unity",
"Assets/Scenes/Admin.unity",
"Assets/Scenes/Builder.unity",
};
public static void PerformBuild()
{
Windows64Build();
Windows32Build();
LinuxBuild();
}
public static void Windows64Build()
{
Debug.Log($"Starting Windows 64 bit build");
BuildPlayerOptions options = new BuildPlayerOptions();
options.scenes = scenes;
options.locationPathName = "Build/Windows64/Skullborn.exe";
options.target = BuildTarget.StandaloneWindows64;
options.targetGroup = BuildTargetGroup.Standalone;
options.options = BuildOptions.None;
BuildReport report = BuildPipeline.BuildPlayer(options);
BuildSummary summary = report.summary;
if (summary.result == BuildResult.Succeeded)
{
Debug.Log($"Windows 64 bit succeeded: {summary.totalSize} bytes. path {summary.outputPath}");
}
if (summary.result == BuildResult.Failed)
{
Debug.Log("Windows 64 bit failed");
}
}
public static void Windows32Build()
{
Debug.Log($"Starting Windows 32 bit build");
BuildPlayerOptions options = new BuildPlayerOptions();
options.scenes = scenes;
options.locationPathName = "Build/Windows32/Skullborn.exe";
options.target = BuildTarget.StandaloneWindows;
options.targetGroup = BuildTargetGroup.Standalone;
options.options = BuildOptions.None;
BuildReport report = BuildPipeline.BuildPlayer(options);
BuildSummary summary = report.summary;
if (summary.result == BuildResult.Succeeded)
{
Debug.Log($"Windows 32 bit build succeeded: {summary.totalSize} bytes. path {summary.outputPath}");
}
if (summary.result == BuildResult.Failed)
{
Debug.Log("Windows 32 bit build failed");
}
}
public static void LinuxBuild()
{
Debug.Log($"Starting Linux 64 bit build");
BuildPlayerOptions options = new BuildPlayerOptions();
options.scenes = scenes;
options.locationPathName = "Build/Linux/Skullborn";
options.target = BuildTarget.StandaloneLinux64;
options.targetGroup = BuildTargetGroup.Standalone;
options.options = BuildOptions.None;
BuildReport report = BuildPipeline.BuildPlayer(options);
BuildSummary summary = report.summary;
if (summary.result == BuildResult.Succeeded)
{
Debug.Log($"Linux build succeeded: {summary.totalSize} bytes. path {summary.outputPath}");
}
if (summary.result == BuildResult.Failed)
{
Debug.Log("Linux build failed");
}
}
}