This repository has been archived by the owner on Jan 18, 2022. It is now read-only.
/
BuildContext.cs
72 lines (62 loc) · 3.17 KB
/
BuildContext.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEditor.Build;
using UnityEngine;
namespace Improbable.Gdk.BuildSystem.Configuration
{
public struct BuildContext
{
public string WorkerType;
public BuildTargetConfig BuildTargetConfig;
public BuildEnvironment BuildEnvironment;
public ScriptingImplementation ScriptingImplementation;
public iOSSdkVersion? IOSSdkVersion;
public static List<BuildContext> GetBuildContexts(IEnumerable<string> wantedWorkerTypes,
BuildEnvironment buildEnvironment, ScriptingImplementation? scriptImplementation = null,
ICollection<BuildTarget> buildTargetFilter = null, iOSSdkVersion? iosSdkVersion = null)
{
var spatialOsBuildConfiguration = BuildConfig.GetInstance();
var result = new List<BuildContext>();
foreach (var workerType in wantedWorkerTypes)
{
var environmentConfig =
spatialOsBuildConfiguration.GetEnvironmentConfigForWorker(workerType, buildEnvironment);
// Filter targets for CI
var targetConfigs = environmentConfig.BuildTargets
.Where(t => t.Enabled && (buildTargetFilter?.Contains(t.Target) ?? true))
.ToList();
// Which build targets are not supported by current install?
var missingTargets = targetConfigs
.Where(c => !BuildSupportChecker.CanBuildTarget(c.Target))
.ToList();
// Error on missing required build support
if (missingTargets.Any(c => c.Required))
{
var targetNames = string.Join(", ", missingTargets
.Where(c => c.Required)
.Select(c => c.Target.ToString()));
throw new BuildFailedException(
$"Build failed for {workerType}. Cannot build for required ({targetNames}) because build support is not installed in the Unity Editor.");
}
// Log builds we're skipping
if (missingTargets.Count > 0)
{
var targetNames = string.Join(", ", missingTargets.Select(c => c.Target.ToString()));
Debug.LogWarning(
$"Skipping ({targetNames}) because build support is not installed in the Unity Editor and the build target is not marked as 'Required'.");
targetConfigs.RemoveAll(t => missingTargets.Contains(t));
}
result.AddRange(targetConfigs.Select(targetConfig => new BuildContext
{
WorkerType = workerType, BuildEnvironment = buildEnvironment,
ScriptingImplementation = scriptImplementation ??
PlayerSettings.GetScriptingBackend(BuildPipeline.GetBuildTargetGroup(targetConfig.Target)),
BuildTargetConfig = targetConfig,
IOSSdkVersion = (targetConfig.Target == BuildTarget.iOS) ? iosSdkVersion : null
}));
}
return result;
}
}
}