| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 | using HybridCLR.Editor.Settings;using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Text.RegularExpressions;using System.Threading.Tasks;using UnityEditor;using UnityEditor.Build;using UnityEditor.Build.Reporting;using UnityEngine;using static UnityEngine.GraphicsBuffer;namespace HybridCLR.Editor.BuildProcessors{    internal class CheckSettings : IPreprocessBuildWithReport    {        public int callbackOrder => 0;        public static bool DisableMethodBridgeDevelopmentFlagChecking { get; set; }        public void OnPreprocessBuild(BuildReport report)        {            HybridCLRSettings globalSettings = SettingsUtil.HybridCLRSettings;            if (!globalSettings.enable || globalSettings.useGlobalIl2cpp)            {                string oldIl2cppPath = Environment.GetEnvironmentVariable("UNITY_IL2CPP_PATH");                if (!string.IsNullOrEmpty(oldIl2cppPath))                {                    Environment.SetEnvironmentVariable("UNITY_IL2CPP_PATH", "");                    Debug.Log($"[CheckSettings] clean process environment variable: UNITY_IL2CPP_PATH, old vlaue:'{oldIl2cppPath}'");                }            }            else            {                string curIl2cppPath = Environment.GetEnvironmentVariable("UNITY_IL2CPP_PATH");                if (curIl2cppPath != SettingsUtil.LocalIl2CppDir)                {                    Environment.SetEnvironmentVariable("UNITY_IL2CPP_PATH", SettingsUtil.LocalIl2CppDir);                    Debug.Log($"[CheckSettings] UNITY_IL2CPP_PATH old value:'{curIl2cppPath}', new value:'{SettingsUtil.LocalIl2CppDir}'");                }            }            if (!globalSettings.enable)            {                return;            }            BuildTargetGroup buildTargetGroup = BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget);            ScriptingImplementation curScriptingImplementation = PlayerSettings.GetScriptingBackend(buildTargetGroup);            ScriptingImplementation targetScriptingImplementation = ScriptingImplementation.IL2CPP;            if (curScriptingImplementation != targetScriptingImplementation)            {                Debug.LogError($"[CheckSettings] current ScriptingBackend:{curScriptingImplementation},have been switched to:{targetScriptingImplementation} automatically");                PlayerSettings.SetScriptingBackend(buildTargetGroup, targetScriptingImplementation);            }            var installer = new Installer.InstallerController();            if (!installer.HasInstalledHybridCLR())            {                throw new BuildFailedException($"You have not initialized HybridCLR, please install it via menu 'HybridCLR/Installer'");            }            if (installer.PackageVersion != installer.InstalledLibil2cppVersion)            {                throw new BuildFailedException($"You must run `HybridCLR/Installer` after upgrading package");            }            HybridCLRSettings gs = SettingsUtil.HybridCLRSettings;            if (((gs.hotUpdateAssemblies?.Length + gs.hotUpdateAssemblyDefinitions?.Length) ?? 0) == 0)            {                Debug.LogWarning("[CheckSettings] No hot update modules configured in HybridCLRSettings");            }            if (!DisableMethodBridgeDevelopmentFlagChecking)            {                string methodBridgeFile = $"{SettingsUtil.GeneratedCppDir}/MethodBridge.cpp";                var match = Regex.Match(File.ReadAllText(methodBridgeFile), @"// DEVELOPMENT=(\d)");                if (match.Success)                {                    int developmentFlagInMethodBridge = int.Parse(match.Groups[1].Value);                    int developmentFlagInEditorSettings = EditorUserBuildSettings.development ? 1 : 0;                    if (developmentFlagInMethodBridge != developmentFlagInEditorSettings)                    {                        Debug.LogError($"[CheckSettings] MethodBridge.cpp DEVELOPMENT flag:{developmentFlagInMethodBridge} is inconsistent with EditorUserBuildSettings.development:{developmentFlagInEditorSettings}. Please run 'HybridCLR/Generate/All' before building.");                    }                }                else                {                    Debug.LogError("[CheckSettings] MethodBridge.cpp DEVELOPMENT flag not found. Please run 'HybridCLR/Generate/All' before building.");                }            }        }    }}
 |