Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
            }
        }