Esempio n. 1
0
        public static void AddScriptCompilationData(BeeDriver beeDriver,
                                                    EditorCompilation editorCompilation,
                                                    ScriptAssembly[] assemblies,
                                                    bool debug,
                                                    string outputDirectory,
                                                    BuildTarget buildTarget,
                                                    bool buildingForEditor,
                                                    string[] extraScriptingDefines = null)
        {
            // Need to call AssemblyDataFrom before calling CompilationPipeline.GetScriptAssemblies,
            // as that acts on the same ScriptAssemblies, and modifies them with different build settings.
            var cachedAssemblies = AssemblyDataFrom(assemblies);

            AssemblyData[] codeGenAssemblies;
            using (new ProfilerMarker("GetScriptAssembliesForCodeGen").Auto())
            {
                codeGenAssemblies = buildingForEditor
                    ? null
                    : AssemblyDataFrom(CodeGenAssemblies(CompilationPipeline.GetScriptAssemblies(editorCompilation, AssembliesType.Editor, extraScriptingDefines)));
            }

            var movedFromExtractorPath = EditorApplication.applicationContentsPath + $"/Tools/ScriptUpdater/ApiUpdater.MovedFromExtractor.exe";
            var dotNetSdkRoslynPath    = EditorApplication.applicationContentsPath + $"/DotNetSdkRoslyn";

            var localization = "en-US";

            if (LocalizationDatabase.currentEditorLanguage != SystemLanguage.English && EditorPrefs.GetBool("Editor.kEnableCompilerMessagesLocalization", false))
            {
                localization = LocalizationDatabase.GetCulture(LocalizationDatabase.currentEditorLanguage);
            }


            var assembliesToScanForTypeDB = new HashSet <string>();
            var searchPaths = new HashSet <string>(BuildPlayerDataGenerator.GetStaticSearchPaths(buildTarget));
            var options     = EditorScriptCompilationOptions.BuildingIncludingTestAssemblies;

            if (buildingForEditor)
            {
                options |= EditorScriptCompilationOptions.BuildingForEditor;
            }
            foreach (var a in editorCompilation.GetAllScriptAssemblies(options, extraScriptingDefines))
            {
                if (!a.Flags.HasFlag(AssemblyFlags.EditorOnly))
                {
                    var path = a.FullPath.ToNPath();
                    assembliesToScanForTypeDB.Add(path.ToString());
                    searchPaths.Add(path.Parent.ToString());
                }
            }

            var precompileAssemblies = editorCompilation.PrecompiledAssemblyProvider.GetPrecompiledAssembliesDictionary(
                buildingForEditor,
                BuildPipeline.GetBuildTargetGroup(buildTarget),
                buildTarget,
                extraScriptingDefines);

            if (precompileAssemblies != null)
            {
                foreach (var a in precompileAssemblies)
                {
                    if (!a.Value.Flags.HasFlag(AssemblyFlags.EditorOnly))
                    {
                        var path = a.Value.Path.ToNPath();
                        assembliesToScanForTypeDB.Add(path.ToString());
                        searchPaths.Add(path.Parent.ToString());
                    }
                }
            }

            beeDriver.DataForBuildProgram.Add(new ScriptCompilationData
            {
                OutputDirectory        = outputDirectory,
                DotnetRuntimePath      = NetCoreProgram.DotNetRuntimePath.ToString(),
                DotnetRoslynPath       = dotNetSdkRoslynPath,
                MovedFromExtractorPath = movedFromExtractorPath,
                Assemblies             = cachedAssemblies,
                CodegenAssemblies      = codeGenAssemblies,
                Debug                           = debug,
                BuildTarget                     = buildTarget.ToString(),
                Localization                    = localization,
                EnableDiagnostics               = editorCompilation.EnableDiagnostics,
                BuildPlayerDataOutput           = $"Library/BuildPlayerData/{(buildingForEditor ? "Editor" : "Player")}",
                ExtractRuntimeInitializeOnLoads = !buildingForEditor,
                AssembliesToScanForTypeDB       = assembliesToScanForTypeDB.OrderBy(p => p).ToArray(),
                SearchPaths                     = searchPaths.OrderBy(p => p).ToArray()
            });
        }