UnityEditor.MonoCrossCompile.CrossCompileAOT C# (CSharp) Method

CrossCompileAOT() private static method

private static CrossCompileAOT ( BuildTarget target, string crossCompilerAbsolutePath, string assembliesAbsoluteDirectory, CrossCompileOptions crossCompileOptions, string input, string output, string additionalOptions ) : void
target BuildTarget
crossCompilerAbsolutePath string
assembliesAbsoluteDirectory string
crossCompileOptions CrossCompileOptions
input string
output string
additionalOptions string
return void
        private static void CrossCompileAOT(BuildTarget target, string crossCompilerAbsolutePath, string assembliesAbsoluteDirectory, CrossCompileOptions crossCompileOptions, string input, string output, string additionalOptions)
        {
            string str = "";
            if (!IsDebugableAssembly(input))
            {
                crossCompileOptions &= ~CrossCompileOptions.Debugging;
                crossCompileOptions &= ~CrossCompileOptions.LoadSymbols;
            }
            bool flag = (crossCompileOptions & CrossCompileOptions.Debugging) != CrossCompileOptions.Dynamic;
            bool flag2 = (crossCompileOptions & CrossCompileOptions.LoadSymbols) != CrossCompileOptions.Dynamic;
            bool flag3 = flag || flag2;
            if (flag3)
            {
                str = str + "--debug ";
            }
            if (flag)
            {
                str = str + "--optimize=-linears ";
            }
            str = str + "--aot=full,asmonly,";
            if (flag3)
            {
                str = str + "write-symbols,";
            }
            if ((crossCompileOptions & CrossCompileOptions.Debugging) != CrossCompileOptions.Dynamic)
            {
                str = str + "soft-debug,";
            }
            else if (!flag3)
            {
                str = str + "nodebug,";
            }
            if (target != BuildTarget.iOS)
            {
                str = str + "print-skipped,";
            }
            if ((additionalOptions != null) & (additionalOptions.Trim().Length > 0))
            {
                str = str + additionalOptions.Trim() + ",";
            }
            string fileName = Path.GetFileName(output);
            string resultingFile = Path.Combine(assembliesAbsoluteDirectory, fileName);
            if ((crossCompileOptions & CrossCompileOptions.FastICall) != CrossCompileOptions.Dynamic)
            {
                str = str + "ficall,";
            }
            if ((crossCompileOptions & CrossCompileOptions.Static) != CrossCompileOptions.Dynamic)
            {
                str = str + "static,";
            }
            string str4 = str;
            string[] textArray1 = new string[] { str4, "outfile=\"", fileName, "\" \"", input, "\" " };
            str = string.Concat(textArray1);
            Process process = new Process {
                StartInfo = { 
                    FileName = crossCompilerAbsolutePath,
                    Arguments = str
                }
            };
            process.StartInfo.EnvironmentVariables["MONO_PATH"] = assembliesAbsoluteDirectory;
            process.StartInfo.EnvironmentVariables["GAC_PATH"] = assembliesAbsoluteDirectory;
            process.StartInfo.EnvironmentVariables["GC_DONT_GC"] = "yes please";
            if ((crossCompileOptions & CrossCompileOptions.ExplicitNullChecks) != CrossCompileOptions.Dynamic)
            {
                process.StartInfo.EnvironmentVariables["MONO_DEBUG"] = "explicit-null-checks";
            }
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.CreateNoWindow = true;
            process.StartInfo.RedirectStandardOutput = true;
            if (ArtifactsPath != null)
            {
                if (!Directory.Exists(ArtifactsPath))
                {
                    Directory.CreateDirectory(ArtifactsPath);
                }
                File.AppendAllText(ArtifactsPath + "output.txt", process.StartInfo.FileName + "\n");
                File.AppendAllText(ArtifactsPath + "output.txt", process.StartInfo.Arguments + "\n");
                File.AppendAllText(ArtifactsPath + "output.txt", assembliesAbsoluteDirectory + "\n");
                File.AppendAllText(ArtifactsPath + "output.txt", resultingFile + "\n");
                File.AppendAllText(ArtifactsPath + "output.txt", input + "\n");
                File.AppendAllText(ArtifactsPath + "houtput.txt", fileName + "\n\n");
                File.Copy(assembliesAbsoluteDirectory + @"\" + input, ArtifactsPath + @"\" + input, true);
            }
            process.StartInfo.WorkingDirectory = assembliesAbsoluteDirectory;
            MonoProcessUtility.RunMonoProcess(process, "AOT cross compiler", resultingFile);
            File.Move(resultingFile, output);
            if ((crossCompileOptions & CrossCompileOptions.Static) == CrossCompileOptions.Dynamic)
            {
                string path = Path.Combine(assembliesAbsoluteDirectory, fileName + ".def");
                if (File.Exists(path))
                {
                    File.Move(path, output + ".def");
                }
            }
        }

Usage Example

示例#1
0
        public static void CrossCompileAOTDirectory(BuildTarget buildTarget, CrossCompileOptions crossCompileOptions, string sourceAssembliesFolder, string targetCrossCompiledASMFolder, string pathExtension, string additionalOptions)
        {
            string text = BuildPipeline.GetBuildToolsDirectory(buildTarget);

            if (Application.platform == RuntimePlatform.OSXEditor)
            {
                text = Path.Combine(Path.Combine(text, pathExtension), "mono-xcompiler");
            }
            else
            {
                text = Path.Combine(Path.Combine(text, pathExtension), "mono-xcompiler.exe");
            }
            sourceAssembliesFolder       = Path.Combine(Directory.GetCurrentDirectory(), sourceAssembliesFolder);
            targetCrossCompiledASMFolder = Path.Combine(Directory.GetCurrentDirectory(), targetCrossCompiledASMFolder);
            string[] files = Directory.GetFiles(sourceAssembliesFolder);
            for (int i = 0; i < files.Length; i++)
            {
                string path = files[i];
                if (!(Path.GetExtension(path) != ".dll"))
                {
                    string fileName = Path.GetFileName(path);
                    string output   = Path.Combine(targetCrossCompiledASMFolder, fileName + ".s");
                    if (EditorUtility.DisplayCancelableProgressBar("Building Player", "AOT cross compile " + fileName, 0.95f))
                    {
                        throw new OperationCanceledException();
                    }
                    MonoCrossCompile.CrossCompileAOT(buildTarget, text, sourceAssembliesFolder, crossCompileOptions, fileName, output, additionalOptions);
                }
            }
        }
All Usage Examples Of UnityEditor.MonoCrossCompile::CrossCompileAOT