Example #1
0
        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);
        }
Example #3
0
 private static bool IsBuildTargetError(BuildTargetConfig t)
 {
     return(!BuildSupportChecker.CanBuildTarget(t.Target) && t.Required);
 }
Example #4
0
 private static bool IsBuildTargetWarning(BuildTargetConfig t)
 {
     return(!BuildSupportChecker.CanBuildTarget(t.Target) && t.Enabled);
 }
Example #5
0
        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;
                    }
                }
        }
Example #6
0
        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;
                    }
                }
        }