void compileLib(string strInclude, string applet, List <string> includeFiles) { var files = Directory.GetFiles(info.ArduCore) .Select(p => new FileInfo(p)) ; var cFiles = files.Where(p => p.Extension == ".c"); foreach (var f in cFiles) { message("gcc " + f.Name); var fname = applet + @"\" + f.Name + ".o"; runProcess(info.Gcc, StringConst.BuildGccCommand(new object[] { info.Board.Mcu, info.Board.FCpu, strInclude, f.FullName, fname }), true); } var cppFiles = files.Where(p => p.Extension == ".cpp"); foreach (var f in cppFiles) { message("gpp " + f.Name); var fname = applet + @"\" + f.Name + ".o"; runProcess(info.Gpp, StringConst.BuildGccCommand(new object[] { info.Board.Mcu, info.Board.FCpu, strInclude, f.FullName, fname }), true); } var objectFileNames = cFiles.Concat(cppFiles) .Select(p => applet + @"\" + p.Name + ".o") .Aggregate((a, b) => a + " " + b); message("Linking"); // Linker Library runProcess(info.Ar, StringConst.LinkingCommand(new object[] { applet, objectFileNames }), true); compileIncludeLib(strInclude, includeFiles); }
void compile(string code) { var cppFilename = info.TempCppCodePath; var filesDir = info.TempDir + @"\"; // needs to be like this in the params message("Converting to cpp"); // Create build output var cpp = Helpers.ConvertPedToCpp(code); // save File.WriteAllText(cppFilename, cpp); message("Compiling cpp"); var includeFiles = Helpers.GetIncludeFiles(code).ToList(); objLinker = new StringBuilder(); var includeDirArgs = string.Format("-I {0} -I {1} -I {2} ", info.IncludeFiles, info.VariantDir, filesDir); var includePaths = Directory.GetDirectories(info.IncludeLibrariesRootPath); includeDirArgs += includePaths.Select(s => string.Format(" -I {0}", s)).Aggregate((a, b) => a + b); var cppFiles = new DirectoryInfo(filesDir).GetFiles().Where(p => p.Extension == ".cpp"); // Compile source file foreach (var cppFile in cppFiles) { message("gpp " + cppFile.Name); var objFileName = cppFile.FullName + ".o"; try { runProcess(info.Gpp, StringConst.BuildSketchCommand(new object[] { info.Board.Mcu, info.Board.FCpu, includeDirArgs, cppFile.FullName, objFileName }), true); } catch (Exception e) { error(e); } objLinker.Append(objFileName + " "); } if (!errorOccurred) { // Compile custom library compileLib(includeDirArgs, filesDir, includeFiles); System.Threading.Thread.Sleep(1000); // Object linker message("Linking " + cppFilename); runProcess(info.Gcc, string.Format(StringConst.GPP_LINKER, new object[] { info.Board.Mcu, cppFilename, objLinker.ToString(), filesDir }), true); // Create flash image .hex message("Creating flash image"); runProcess(info.Objcp, string.Format(StringConst.CREATE_FLASH_IMAGE, new object[] { cppFilename, cppFilename }), true); message("Creating eeprom image"); // Create eeprom image .eep runProcess(info.Objcp, string.Format(StringConst.CREATE_EEPROM_IMAGE, new object[] { cppFilename, cppFilename }), true); // Show flash image size message("Computing image size"); runProcess(info.Avrsize, string.Format(StringConst.PRINT_SIZE, new object[] { info.Board.Mcu, cppFilename }), false); } }