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(); // Filter out any deprecated targets var supportedTargets = targetConfigs .Where(c => !c.Deprecated) .ToList(); // Which build targets are not supported by current install? var missingTargets = supportedTargets .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'."); supportedTargets.RemoveAll(t => missingTargets.Contains(t)); } result.AddRange(supportedTargets.Select(targetConfig => new BuildContext { WorkerType = workerType, BuildEnvironment = buildEnvironment, ScriptingImplementation = scriptImplementation ?? targetConfig.ScriptingImplementation, BuildTargetConfig = targetConfig, IOSSdkVersion = (targetConfig.Target == BuildTarget.iOS) ? iosSdkVersion : null })); } return(result); }
public IEnumerable <BuildTargetConfig> GetSupportedTargets(BuildContextSettings contextSettings) { // Filter targets for CI var targetConfigs = BuildTargets .Where(t => t.Enabled && contextSettings.Matches(t.Target)) .ToList(); // Filter out any deprecated targets var supportedTargets = targetConfigs .Where(c => !c.Deprecated) .ToList(); // Which build targets are not supported by current install? var missingTargets = supportedTargets .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($"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'."); supportedTargets.RemoveAll(t => missingTargets.Contains(t)); } return(supportedTargets); }
private static bool IsBuildTargetError(BuildTargetConfig t) { return(!BuildSupportChecker.CanBuildTarget(t.Target) && t.Required); }
private static bool IsBuildTargetWarning(BuildTargetConfig t) { return(!BuildSupportChecker.CanBuildTarget(t.Target) && t.Enabled); }
private void DrawBuildTargets(BuildEnvironmentConfig env, int hash) { // Init cached UI state. var selectedBuildTarget = stateManager.GetStateObjectOrDefault <BuildTargetState>(hash ^ typeof(BuildTargetState).GetHashCode()); if (selectedBuildTarget.Choices == null || invalidateCachedContent > 0) { selectedBuildTarget.Choices = env.BuildTargets.Select(GetBuildTargetGuiContents).ToArray(); } // Draw available build targets. using (new EditorGUIUtility.IconSizeScope(SmallIconSize)) { selectedBuildTarget.Index = GUILayout.Toolbar(selectedBuildTarget.Index, selectedBuildTarget.Choices); } // Draw selected build target. var buildTarget = env.BuildTargets[selectedBuildTarget.Index]; var canBuildTarget = BuildSupportChecker.CanBuildTarget(buildTarget.Target); var options = buildTarget.Options; var enabled = buildTarget.Enabled; var required = buildTarget.Required; using (var check = new EditorGUI.ChangeCheckScope()) using (new EditorGUILayout.VerticalScope(GUILayout.ExpandWidth(true))) { BuildConfigEditorStyle.DrawHorizontalLine(); EditorGUILayout.Space(); enabled = EditorGUILayout.Toggle("Build", enabled); if (!enabled) { required = false; } using (new EditorGUI.DisabledScope(!buildTarget.Enabled)) { required = EditorGUILayout.Toggle("Required", required); switch (buildTarget.Target) { case BuildTarget.StandaloneOSX: options = ConfigureOSX(buildTarget); break; case BuildTarget.StandaloneWindows: options = ConfigureWindows(buildTarget); break; case BuildTarget.iOS: options = ConfigureIOS(buildTarget); break; case BuildTarget.Android: options = ConfigureAndroid(buildTarget); break; case BuildTarget.StandaloneWindows64: options = ConfigureWindows(buildTarget); break; case BuildTarget.StandaloneLinux64: options = ConfigureLinux(buildTarget); break; } options = ConfigureCompression(options); } if (!canBuildTarget) { EditorGUILayout.HelpBox( $"Your Unity Editor is missing build support for {buildTarget.Target.ToString()}.\n" + "Please add the missing build support options to your Unity Editor", buildTarget.Required ? MessageType.Error : MessageType.Warning); } if (check.changed) { RecordUndo("Worker build options"); env.BuildTargets[selectedBuildTarget.Index] = new BuildTargetConfig(buildTarget.Target, options, enabled, required); selectedBuildTarget.Choices = null; } } }
private void DrawBuildTargets(BuildEnvironmentConfig env, int hash) { // Build a mapping from the 'build target' position in the toolbar to it's position in the 'BuildTargets' array. // We do this since sometimes there are different number of targets in the BuildTargets array and those // in the toolbar as some targets are deprecated if (toolbarMapping.Count == 0) { var toolbarIndex = 0; for (var buildTargetIndex = 0; buildTargetIndex < env.BuildTargets.Count; buildTargetIndex++) { if (!env.BuildTargets[buildTargetIndex].Deprecated) { toolbarMapping.Add(toolbarIndex++, buildTargetIndex); } } } // Init cached UI state. var selectedBuildTarget = stateManager.GetStateObjectOrDefault <BuildTargetState>(hash ^ typeof(BuildTargetState).GetHashCode()); if (selectedBuildTarget.Choices == null || invalidateCachedContent > 0) { selectedBuildTarget.Choices = env.BuildTargets .Where(c => !c.Deprecated) .Select(GetBuildTargetGuiContents) .ToArray(); } // Draw available build targets. using (new EditorGUIUtility.IconSizeScope(SmallIconSize)) { selectedBuildTarget.Index = GUILayout.Toolbar(selectedBuildTarget.Index, selectedBuildTarget.Choices); } // Convert the index from the position selected in the toolbar to the position in the BuildTargets array var selectedTargetIndex = toolbarMapping[selectedBuildTarget.Index]; // Draw selected build target. var buildTarget = env.BuildTargets[selectedTargetIndex]; var canBuildTarget = BuildSupportChecker.CanBuildTarget(buildTarget.Target); var options = buildTarget.Options; var enabled = buildTarget.Enabled; var required = buildTarget.Required; // Pick the current backend based on the current build target var scriptingImplementation = buildTarget.ScriptingImplementation; using (var check = new EditorGUI.ChangeCheckScope()) using (new EditorGUILayout.VerticalScope(GUILayout.ExpandWidth(true))) { BuildConfigEditorStyle.DrawHorizontalLine(); EditorGUILayout.Space(); enabled = EditorGUILayout.Toggle("Build", enabled); if (!enabled) { required = false; } using (new EditorGUI.DisabledScope(!buildTarget.Enabled)) { required = EditorGUILayout.Toggle("Required", required); options = ConfigurePlatform(buildTarget.Target, options); options = ConfigureCompression(options); scriptingImplementation = ConfigureScriptingImplementation(scriptingImplementation, buildTarget.Target); } if (!canBuildTarget) { EditorGUILayout.HelpBox( $"Your Unity Editor is missing build support for {buildTarget.Target.ToString()}.\n" + "Please add the missing build support options to your Unity Editor", buildTarget.Required ? MessageType.Error : MessageType.Warning); } if (check.changed) { RecordUndo("Worker build options"); env.BuildTargets[selectedTargetIndex] = new BuildTargetConfig(buildTarget.Target, options, enabled, required, deprecated: false, scriptingImplementation); selectedBuildTarget.Choices = null; } } }