public override CompileResult Compile(IConsole console, IStandardProject superProject, IStandardProject project, ISourceFile file, string outputFile) { var result = new CompileResult(); var settings = superProject.GetToolchainSettingsIfExists <GccToolchainSettings>().CompileSettings; string commandName = file.Extension == ".cpp" ? CPPExecutable : CCExecutable; var fileArguments = string.Empty; if (file.Extension.ToLower() == ".cpp" || (settings != null && settings.CompileExtensions.Select(ext => "." + ext.ToLower()).Contains(file.Extension.ToLower()))) { fileArguments = "-x c++ -fno-use-cxa-atexit"; } if (file.Extension.ToLower() == ".s" || (settings != null && settings.AssembleExtensions.Select(ext => "." + ext.ToLower()).Contains(file.Extension.ToLower()))) { fileArguments = "-x assembler-with-cpp"; } var environment = superProject.GetEnvironmentVariables().AppendRange(Platform.EnvironmentVariables); var arguments = ""; if (!string.IsNullOrWhiteSpace(SysRoot)) { arguments = string.Format("{0} {1} {2} -o{3} -MMD -MP --sysroot=\"{4}\"", fileArguments, GetCompilerArguments(superProject, project, file), file.Location, outputFile, SysRoot).ExpandVariables(environment); } else { arguments = string.Format("{0} {1} {2} -o{3} -MMD -MP", fileArguments, GetCompilerArguments(superProject, project, file), file.Location, outputFile).ExpandVariables(environment); } result.ExitCode = PlatformSupport.ExecuteShellCommand(commandName, arguments, (s, e) => console.WriteLine(e.Data), (s, e) => { if (e.Data != null) { ParseOutputForErrors(result.Diagnostics, file, e.Data); console.WriteLine(); console.WriteLine(e.Data); } }, false, "", false, RunWithSystemPaths, ExtraPaths); if (Studio.DebugMode) { console.WriteLine(Path.GetFileNameWithoutExtension(commandName) + " " + arguments); } return(result); }