public static void Build(BuildSetup buildSetup)
        {
            var defaultScenes = ScenesUtils.getDefaultScenesAsArray();

            string path = buildSetup.rootDirectory;

            var playerSettingsSnapshot = new PlayerSettingsSnapshot();

            var setupList = buildSetup.entriesList;

            for (var i = 0; i < setupList.Count; i++)
            {
                var setup = setupList[i];
                if (setup.enabled)
                {
                    var target      = setup.target;
                    var targetGroup = BuildPipeline.GetBuildTargetGroup(target);

                    playerSettingsSnapshot.takeSnapshot(targetGroup);

                    PlayerSettings.SetScriptingBackend(targetGroup, setup.scriptingBackend);
                    PlayerSettings.SetScriptingDefineSymbolsForGroup(targetGroup, setup.scriptingDefineSymbols);

#if UNITY_2018_3_OR_NEWER
                    PlayerSettings.SetManagedStrippingLevel(targetGroup, setup.strippingLevel);
#endif

#if UNITY_2017_2_OR_NEWER
                    if (VRUtils.targetGroupSupportsVirtualReality(targetGroup))
                    {
                        PlayerSettings.SetVirtualRealitySupported(targetGroup, setup.supportsVR);
                        if (setup.supportsVR)
                        {
                            var vrSdks = VRUtils.getSelectedVRSdksFromFlags(targetGroup, setup.vrSdkFlags);
                            PlayerSettings.SetVirtualRealitySDKs(targetGroup, vrSdks);
                        }
                    }
                    else
                    {
                        PlayerSettings.SetVirtualRealitySupported(targetGroup, false);
                    }
#endif

                    if (target == BuildTarget.Android)
                    {
                        #if UNITY_2017_4_OR_NEWER
                        EditorUserBuildSettings.buildAppBundle     = setup.androidAppBundle;
                        PlayerSettings.Android.targetArchitectures = setup.androidArchitecture;
                        #endif
                    }

                    if (target == BuildTarget.PS4)
                    {
                        EditorUserBuildSettings.ps4HardwareTarget = setup.ps4HardwareTarget;
                        EditorUserBuildSettings.ps4BuildSubtarget = setup.ps4BuildSubtarget;
                    }

#if ADDRESSABLES
                    if (setup.rebuildAddressables)
                    {
                        AddressableAssetSettings.CleanPlayerContent(AddressableAssetSettingsDefaultObject.Settings.ActivePlayerDataBuilder);
                        AddressableAssetSettings.BuildPlayerContent();
                    }
#endif

                    var buildPlayerOptions = BuildUtils.getBuildPlayerOptionsFromBuildSetupEntry(setup, path, defaultScenes);

#if UNITY_2018_1_OR_NEWER
                    BuildReport  report       = BuildPipeline.BuildPlayer(buildPlayerOptions);
                    BuildSummary buildSummary = report.summary;
                    var          success      = (buildSummary.result == BuildResult.Succeeded);
                    UnityEngine.Debug.Log("Build " + setup.buildName + " ended with Status: " + buildSummary.result);
#else
                    var result  = BuildPipeline.BuildPlayer(buildPlayerOptions);
                    var success = string.IsNullOrEmpty(result);
                    UnityEngine.Debug.Log("Build " + setup.buildName + " ended with Success: " + success);
#endif

                    // Revert group build player settings after building
                    playerSettingsSnapshot.applySnapshot();

                    if (!success && buildSetup.abortBatchOnFailure)
                    {
                        UnityEngine.Debug.LogError("Failure - Aborting remaining builds from batch");
                        break;
                    }
                }
                else
                {
                    UnityEngine.Debug.Log("Skipping Build " + setup.buildName);
                }
            }
        }