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); }