Пример #1
0
        public int Assemble()
        {
            var args = new StringBuilder("-march mips3 -mabi 32 -mno-shared -call_nonpic -EB ");

            args.AppendFormat("-o \"{0}\" ", OutputFile);

            args.Append(SourceFiles.Aggregate((allFiles, filename) => allFiles += " \"" + filename + "\""));

            Console.WriteLine("Assembling to {0}...", OutputFile);

            var info = new ProcessStartInfo()
            {
                FileName               = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Binaries", "as.exe"),
                Arguments              = args.ToString(),
                CreateNoWindow         = true,
                ErrorDialog            = false,
                RedirectStandardInput  = true,
                RedirectStandardOutput = true,
                RedirectStandardError  = true,
                UseShellExecute        = false,
                WorkingDirectory       = Directory.GetCurrentDirectory()
            };

            var assembler = new Process
            {
                StartInfo = info
            };

            assembler.OutputDataReceived += (source, evt) =>
            {
                Console.Out.WriteLine(evt.Data);
            };
            assembler.ErrorDataReceived += (source, evt) =>
            {
                Console.Error.WriteLine(evt.Data);
            };

            assembler.EnableRaisingEvents = true;
            assembler.Start();
            assembler.BeginOutputReadLine();
            assembler.BeginErrorReadLine();

            while (!assembler.HasExited)
            {
                assembler.WaitForExit(50);
            }

            if (assembler.ExitCode != 0)
            {
                Console.Error.WriteLine("Failed to assemble {0} (exit code was {1}), exiting.", OutputFile, assembler.ExitCode);
                return(assembler.ExitCode);
            }

            Pipeline.AssembledArtifact = OutputFile;

            Console.WriteLine("Assembled ELF object file: {0}", OutputFile);

            return(0);
        }