using System.Diagnostics; namespace NubLang.CLI; public static class GCC { public static async Task Assemble(string asmPath, string outPath) { using var process = new Process(); process.StartInfo = new ProcessStartInfo("gcc", ["-xassembler", "-c", "-o", outPath, asmPath]) { UseShellExecute = false, RedirectStandardOutput = true, RedirectStandardError = true, CreateNoWindow = true }; process.Start(); await process.WaitForExitAsync(); var errors = await process.StandardError.ReadToEndAsync(); if (!string.IsNullOrWhiteSpace(errors)) { await Console.Error.WriteLineAsync("gcc error when assembling:\n" + errors); } return process.ExitCode == 0; } public static async Task Link(string executablePath, params IEnumerable objectFiles) { using var process = new Process(); process.StartInfo = new ProcessStartInfo("gcc", ["-nostartfiles", "-o", executablePath, ..objectFiles]) { UseShellExecute = false, RedirectStandardOutput = true, RedirectStandardError = true, CreateNoWindow = true }; process.Start(); await process.WaitForExitAsync(); var errors = await process.StandardError.ReadToEndAsync(); if (!string.IsNullOrWhiteSpace(errors)) { await Console.Error.WriteLineAsync("gcc error when linking:\n" + errors); } return process.ExitCode == 0; } }