コード例 #1
0
ファイル: GeneratedProject.cs プロジェクト: kmnaxin/BSPTools
        public GeneratedProject(LoadedBSP.ConfiguredMCU mcu, VendorSample vs, string projectDir, Dictionary <string, string> bspDict, string[] frameworks)
            : this(projectDir, mcu, frameworks)
        {
            _ProjectDir   = projectDir;
            _LinkerScript = vs.LinkerScript;

            _SourceFiles.AddRange(vs.SourceFiles.Select(s => VariableHelper.ExpandVariables(s, bspDict)));

            var cf = vs.ExtraFiles?.Select(s1 =>
            {
                var s2         = VariableHelper.ExpandVariables(s1.SourcePath, bspDict);
                var targetFile = projectDir + "\\" + s1.TargetPath.Replace("/", "\\");
                var pth        = Path.GetDirectoryName(targetFile);
                if (!Directory.Exists(pth))
                {
                    Directory.CreateDirectory(pth);
                }
                if (!File.Exists(targetFile))
                {
                    File.Copy(s2.Replace("/", "\\"), targetFile);
                }
                return(s1.TargetPath);
            });

            if (cf != null)
            {
                _SourceFiles.AddRange(cf);
            }
        }
コード例 #2
0
        public GeneratedProject(LoadedBSP.ConfiguredMCU mcu, VendorSample vs, string projectDir, Dictionary <string, string> bspDict, string[] frameworks)
            : this(projectDir, mcu, frameworks)
        {
            _ProjectDir = projectDir;

            _SourceFiles.AddRange(vs.SourceFiles.Select(s => VariableHelper.ExpandVariables(s, bspDict)));
        }
コード例 #3
0
ファイル: GeneratedProject.cs プロジェクト: sysprogs/BSPTools
        public GeneratedProject(string projectDir, LoadedBSP.ConfiguredMCU mcu, string[] selectedFrameworks)
        {
            _ProjectDir = projectDir;

            MCU = mcu;

            if (MCU.BSP.BSP.Frameworks != null)
                foreach (var fw in MCU.BSP.BSP.Frameworks)
                {
                    if (!selectedFrameworks.Contains(fw.ID))
                    {
                        if (fw.ClassID != null && selectedFrameworks.Contains(fw.ClassID))
                        {
                            try
                            {
                                if (!fw.IsCompatibleWithMCU(MCU.ExpandedMCU.ID))
                                    continue;
                            }
                            catch
                            {
                                continue;
                            }
                        }
                        else
                            continue;
                    }

                    _Frameworks.Add(fw);
                }
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: atomlong/BSPTools
        private static TestResult TestVendorSample(LoadedBSP.LoadedMCU mcu, BSPEngine.VendorSample vs, string mcuDir, VendorSampleDirectory sampleDir)
        {
            var configuredMCU = new LoadedBSP.ConfiguredMCU(mcu, GetDefaultPropertyValues(mcu.ExpandedMCU.ConfigurableProperties));

            configuredMCU.Configuration["com.sysprogs.toolchainoptions.arm.libnosys"] = "--specs=nosys.specs";
            if (configuredMCU.ExpandedMCU.FLASHSize == 0)
            {
                configuredMCU.Configuration["com.sysprogs.bspoptions.primary_memory"] = "sram";
            }

            var entries = vs.Configuration.MCUConfiguration?.Entries;

            if (entries != null)
            {
                foreach (var e in entries)
                {
                    configuredMCU.Configuration[e.Key] = e.Value;
                }
            }


            var bspDict = configuredMCU.BuildSystemDictionary(SystemDirs);

            bspDict["PROJECTNAME"]     = "test";
            bspDict["SYS:VSAMPLE_DIR"] = sampleDir.Path;
            var prj = new GeneratedProject(configuredMCU, vs, mcuDir, bspDict, vs.Configuration.Frameworks ?? new string[0]);

            var projectCfg = PropertyDictionary2.ReadPropertyDictionary(vs.Configuration.MCUConfiguration);

            var frameworkCfg = PropertyDictionary2.ReadPropertyDictionary(vs.Configuration.Configuration);

            foreach (var k in projectCfg.Keys)
            {
                bspDict[k] = projectCfg[k];
            }
            var frameworkIDs = vs.Configuration.Frameworks?.ToDictionary(fw => fw, fw => true);

            prj.AddBSPFilesToProject(bspDict, frameworkCfg, frameworkIDs);
            var flags = prj.GetToolFlags(bspDict, frameworkCfg, frameworkIDs);

            //ToolFlags flags = new ToolFlags { CXXFLAGS = "  ", COMMONFLAGS = "-mcpu=cortex-m3  -mthumb", LDFLAGS = "-Wl,-gc-sections -Wl,-Map," + "test.map", CFLAGS = "-ffunction-sections -Os -MD" };

            flags.CFLAGS   += " -MD";
            flags.CXXFLAGS += " -MD";

            flags.IncludeDirectories = LoadedBSP.Combine(flags.IncludeDirectories, vs.IncludeDirectories).Distinct().ToArray();
            flags.PreprocessorMacros = LoadedBSP.Combine(flags.PreprocessorMacros, vs.PreprocessorMacros);

            flags = LoadedBSP.ConfiguredMCU.ExpandToolFlags(flags, bspDict, null);

            Dictionary <string, bool> sourceExtensions = new Dictionary <string, bool>(StringComparer.InvariantCultureIgnoreCase);

            sourceExtensions.Add("c", true);
            sourceExtensions.Add("cpp", true);
            sourceExtensions.Add("s", true);

            return(BuildAndRunValidationJob(mcu, mcuDir, false, null, prj, flags, sourceExtensions, null, null, vs));
        }
コード例 #5
0
        public static bool IsE300CPU(LoadedBSP.ConfiguredMCU mcu)
        {
            string tmp = null;

            if (mcu.Configuration?.TryGetValue("com.sysprogs.risc-v.board", out tmp) == true && tmp.Contains("-e300-"))
            {
                return(true);
            }
            return(false);
        }
コード例 #6
0
 public ICustomBSPConfigurator CreateConfigurator(LoadedBSP.ConfiguredMCU mcu, DebugMethod method)
 {
     if (method.ID == "xt-ocd")
     {
         return(new ESP8266DebugConfigurator(method, _Interfaces));
     }
     else if (method.ID == "openocd")
     {
         return(new OpenOCDDebugConfigurator(method, _QuickSetupData));
     }
     return(null);
 }
コード例 #7
0
        public void AdjustDebugMethod(LoadedBSP.ConfiguredMCU mcu, ConfiguredDebugMethod method)
        {
            string iface;

            if (method.Method.ID == "xt-ocd")
            {
                if (method.Parameters.TryGetValue("com.sysprogs.esp8266.xt-ocd.debug_iface", out iface))
                {
                    ESP8266DebugConfigurator.DebugInterface ifaceObj = null;
                    foreach (var obj in _Interfaces.Interfaces)
                    {
                        if (obj.ID == iface)
                        {
                            ifaceObj = obj;
                            break;
                        }
                    }

                    if (ifaceObj != null)
                    {
                        string      templateFile = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "topology-template.xml");
                        XmlDocument doc          = new XmlDocument();
                        doc.Load(templateFile);

                        XmlElement el = doc.CreateElement("controller");
                        el.SetAttribute("id", "Controller0");
                        el.SetAttribute("module", ifaceObj.Module);
                        foreach (var p in ifaceObj.Parameters)
                        {
                            string val;
                            if (method.Parameters.TryGetValue(ESP8266DebugConfigurator.InterfaceSettingPrefix + p.UniqueID, out val) && !string.IsNullOrEmpty(val))
                            {
                                el.SetAttribute(p.UniqueID, val);
                            }
                        }
                        doc.DocumentElement.InsertBefore(el, doc.DocumentElement.FirstChild);

                        string newFn = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), @"VisualGDB\xt-ocd-topology.xml");
                        doc.Save(newFn);
                        method.Method.GDBServerArguments.Template = method.Method.GDBServerArguments.Template.Replace("$$com.sysprogs.esp8266.xt-ocd.configfile$$", "\"" + newFn + "\"");
                    }
                }
            }
            else if (_ESP32Mode && method.Method.ID == "openocd")
            {
                if (!method.Parameters.ContainsKey("com.sysprogs.esp32.openocd.alg_timeout"))
                {
                    method.Parameters["com.sysprogs.esp32.openocd.alg_timeout"] = "5000";
                }
            }
        }
コード例 #8
0
        public GeneratedProject(string projectDir, LoadedBSP.ConfiguredMCU mcu, string[] selectedFrameworks)
        {
            _ProjectDir = projectDir;

            MCU = mcu;

            if (MCU.BSP.BSP.Frameworks != null)
            {
                foreach (var fw in MCU.BSP.BSP.Frameworks)
                {
                    if (!selectedFrameworks.Contains(fw.ID))
                    {
                        if (fw.ClassID != null && selectedFrameworks.Contains(fw.ClassID))
                        {
                            try
                            {
                                if (!fw.IsCompatibleWithMCU(MCU.ExpandedMCU.ID))
                                {
                                    continue;
                                }
                            }
                            catch
                            {
                                continue;
                            }
                        }
                        else
                        {
                            continue;
                        }
                    }

                    _Frameworks.Add(fw);
                }
            }
        }
コード例 #9
0
 protected override QuickSetupDatabase.TargetDeviceFamily TryDetectDeviceById(QuickSetupDatabase db, LoadedBSP.ConfiguredMCU mcu)
 {
     if (IsE300CPU(mcu))
     {
         return(db.TryDetectDeviceById(mcu, "E300"));
     }
     else
     {
         return(base.TryDetectDeviceById(db, mcu));
     }
 }
コード例 #10
0
ファイル: DebugExtension.cs プロジェクト: xllj/BSPTools
 public ICustomBSPConfigurator CreateConfigurator(LoadedBSP.ConfiguredMCU mcu, DebugMethod method)
 {
     return(new AVaRICEDebugSettingsControl(method, mcu.BSP.Directory));
 }
コード例 #11
0
ファイル: Program.cs プロジェクト: atomlong/BSPTools
        private static TestResult TestMCU(LoadedBSP.LoadedMCU mcu, string mcuDir, TestedSample sample, DeviceParameterSet extraParameters, LoadedRenamingRule[] renameRules, string[] nonValidateReg, string[] pUndefinedMacros)
        {
            const int RepeatCount = 20;

            for (var i = 0; i < RepeatCount; ++i)
            {
                if (!Directory.Exists(mcuDir))
                {
                    break;
                }
                Console.WriteLine("Deleting " + mcuDir + "...");
                Directory.Delete(mcuDir, true);
                if (i == RepeatCount - 1)
                {
                    throw new Exception("Cannot remove folder!");
                }
                Thread.Sleep(50);
            }
            for (var i = 0; i < RepeatCount; ++i)
            {
                if (Directory.Exists(mcuDir))
                {
                    break;
                }
                Directory.CreateDirectory(mcuDir);
                if (i == RepeatCount - 1)
                {
                    throw new Exception("Cannot create folder!");
                }
                Thread.Sleep(50);
            }

            var configuredMCU = new LoadedBSP.ConfiguredMCU(mcu, GetDefaultPropertyValues(mcu.ExpandedMCU.ConfigurableProperties));

            if (configuredMCU.ExpandedMCU.FLASHSize == 0)
            {
                configuredMCU.Configuration["com.sysprogs.bspoptions.primary_memory"] = "sram";
            }

            var samples = mcu.BSP.GetSamplesForMCU(mcu.ExpandedMCU.ID, false);

            LoadedBSP.LoadedSample sampleObj;
            if (string.IsNullOrEmpty(sample.Name))
            {
                sampleObj = samples[0];
            }
            else
            {
                sampleObj = samples.FirstOrDefault(s => s.Sample.Name == sample.Name);
            }

            if (sampleObj == null)
            {
                if (sample.SkipIfNotFound)
                {
                    Directory.Delete(mcuDir, true);
                    return(TestResult.Skipped);
                }
                else
                {
                    throw new Exception("Cannot find sample: " + sample.Name);
                }
            }

            string[] frameworks = sampleObj.Sample.RequiredFrameworks ?? new string[0];


            //frameworkCfg["com.sysprogs.bspoptions.stm32.freertos.heap"] = "heap_4";
            //frameworkCfg["com.sysprogs.bspoptions.stm32.freertos.portcore"] = "CM0";
            //frameworkCfg["com.sysprogs.bspoptions.stm32.usb.devclass"] = "CDC";
            //frameworkCfg["com.sysprogs.bspoptions.stm32.usb.speed"] = "FS";

            var configuredSample = new ConfiguredSample
            {
                Sample     = sampleObj,
                Parameters = GetDefaultPropertyValues(sampleObj.Sample.ConfigurableProperties),
                Frameworks = (sampleObj.Sample.RequiredFrameworks == null) ? null :
                             sampleObj.Sample.RequiredFrameworks.Select(fwId =>
                {
                    return(configuredMCU.BSP.BSP.Frameworks.First(fwO => fwO.ID == fwId || fwO.ClassID == fwId && fwO.IsCompatibleWithMCU(configuredMCU.ExpandedMCU.ID)));
                }).ToList(),
                FrameworkParameters = new Dictionary <string, string>(),
            };


            ApplyConfiguration(configuredMCU.Configuration, extraParameters?.MCUConfiguration, sample.MCUConfiguration);

            //configuredSample.Parameters["com.sysprogs.examples.ledblink.LEDPORT"] = "GPIOA";
            //configuredSample.Parameters["com.sysprogs.examples.stm32.LEDPORT"] = "GPIOA";
            //configuredSample.Parameters["com.sysprogs.examples.stm32.freertos.heap_size"] = "0";

            var bspDict = configuredMCU.BuildSystemDictionary(SystemDirs);

            bspDict["PROJECTNAME"] = "test";

            if (configuredSample.Frameworks != null)
            {
                foreach (var fw in configuredSample.Frameworks)
                {
                    if (fw.AdditionalSystemVars != null)
                    {
                        foreach (var kv in fw.AdditionalSystemVars)
                        {
                            bspDict[kv.Key] = kv.Value;
                        }
                    }
                    if (fw.ConfigurableProperties != null)
                    {
                        var defaultFwConfig = GetDefaultPropertyValues(fw.ConfigurableProperties);
                        if (defaultFwConfig != null)
                        {
                            foreach (var kv in defaultFwConfig)
                            {
                                configuredSample.FrameworkParameters[kv.Key] = kv.Value;
                            }
                        }
                    }
                }
            }

            if (sampleObj.Sample?.DefaultConfiguration?.Entries != null)
            {
                foreach (var kv in sampleObj.Sample.DefaultConfiguration.Entries)
                {
                    configuredSample.FrameworkParameters[kv.Key] = kv.Value;
                }
            }

            ApplyConfiguration(configuredSample.FrameworkParameters, extraParameters?.FrameworkConfiguration, sample.FrameworkConfiguration);
            ApplyConfiguration(configuredSample.Parameters, extraParameters?.SampleConfiguration, sample.SampleConfiguration);

            var prj = new GeneratedProject(mcuDir, configuredMCU, frameworks)
            {
                DataSections = sample.DataSections
            };

            prj.DoGenerateProjectFromEmbeddedSample(configuredSample, false, bspDict);
            Dictionary <string, bool> frameworkIDs = new Dictionary <string, bool>();

            if (frameworks != null)
            {
                foreach (var fw in frameworks)
                {
                    frameworkIDs[fw] = true;
                }
            }
            if (sample.AdditionalFrameworks != null)
            {
                foreach (var fw in sample.AdditionalFrameworks)
                {
                    frameworkIDs[fw] = true;
                }
            }

            prj.AddBSPFilesToProject(bspDict, configuredSample.FrameworkParameters, frameworkIDs);
            var flags = prj.GetToolFlags(bspDict, configuredSample.FrameworkParameters, frameworkIDs);

            flags.COMMONFLAGS += " -save-temps ";
            Dictionary <string, bool> sourceExtensions = new Dictionary <string, bool>(StringComparer.InvariantCultureIgnoreCase);

            foreach (var ext in sample.SourceFileExtensions.Split(';'))
            {
                sourceExtensions[ext] = true;
            }

            return(BuildAndRunValidationJob(mcu, mcuDir, sample.ValidateRegisters, renameRules, prj, flags, sourceExtensions, nonValidateReg, pUndefinedMacros));
        }
コード例 #12
0
ファイル: Program.cs プロジェクト: kmnaxin/BSPTools
        public static TestResult TestVendorSampleAndUpdateDependencies(LoadedBSP.LoadedMCU mcu, VendorSample vs, string mcuDir, string sampleDirPath, bool codeRequiresDebugInfoFlag, bool keepDirectoryAfterSuccessfulBuild)
        {
            if (Directory.Exists(mcuDir))
            {
                Directory.Delete(mcuDir, true);
            }
            Directory.CreateDirectory(mcuDir);

            var configuredMCU = new LoadedBSP.ConfiguredMCU(mcu, GetDefaultPropertyValues(mcu.ExpandedMCU.ConfigurableProperties));

            configuredMCU.Configuration["com.sysprogs.toolchainoptions.arm.libnosys"] = "--specs=nosys.specs";

            if (configuredMCU.ExpandedMCU.FLASHSize == 0)
            {
                configuredMCU.Configuration["com.sysprogs.bspoptions.primary_memory"] = "sram";
            }

            var entries = vs.Configuration.MCUConfiguration?.Entries;

            if (entries != null)
            {
                foreach (var e in entries)
                {
                    configuredMCU.Configuration[e.Key] = e.Value;
                }
            }

            var bspDict = configuredMCU.BuildSystemDictionary(default(SystemDirectories));

            bspDict["PROJECTNAME"] = "test";
            if (sampleDirPath != null)
            {
                bspDict["SYS:VSAMPLE_DIR"] = sampleDirPath;
            }

            var prj = new GeneratedProject(configuredMCU, vs, mcuDir, bspDict, vs.Configuration.Frameworks ?? new string[0]);

            var projectCfg = PropertyDictionary2.ReadPropertyDictionary(vs.Configuration.MCUConfiguration);

            var frameworkCfg = PropertyDictionary2.ReadPropertyDictionary(vs.Configuration.Configuration);

            foreach (var k in projectCfg.Keys)
            {
                bspDict[k] = projectCfg[k];
            }
            var frameworkIDs = vs.Configuration.Frameworks?.ToDictionary(fw => fw, fw => true);

            prj.AddBSPFilesToProject(bspDict, frameworkCfg, frameworkIDs);
            var flags = prj.GetToolFlags(bspDict, frameworkCfg, frameworkIDs);

            if (flags.LinkerScript != null && !Path.IsPathRooted(flags.LinkerScript))
            {
                flags.LinkerScript = Path.Combine(VariableHelper.ExpandVariables(vs.Path, bspDict, frameworkCfg), flags.LinkerScript).Replace('\\', '/');
            }

            //ToolFlags flags = new ToolFlags { CXXFLAGS = "  ", COMMONFLAGS = "-mcpu=cortex-m3  -mthumb", LDFLAGS = "-Wl,-gc-sections -Wl,-Map," + "test.map", CFLAGS = "-ffunction-sections -Os -MD" };

            if (!string.IsNullOrEmpty(vs.CLanguageStandard))
            {
                flags.CFLAGS += $" -std={vs.CLanguageStandard}";
            }
            if (!string.IsNullOrEmpty(vs.CPPLanguageStandard))
            {
                flags.CXXFLAGS += $" -std={vs.CPPLanguageStandard}";
            }

            flags.CFLAGS   += " -MD";
            flags.CXXFLAGS += " -MD";

            if (codeRequiresDebugInfoFlag)
            {
                flags.CFLAGS   += " -ggdb";
                flags.CXXFLAGS += " -ggdb";
            }

            flags.IncludeDirectories = LoadedBSP.Combine(flags.IncludeDirectories, vs.IncludeDirectories).Distinct().ToArray();
            flags.PreprocessorMacros = LoadedBSP.Combine(flags.PreprocessorMacros, vs.PreprocessorMacros);

            flags.LDFLAGS = flags.LDFLAGS + " " + vs.LDFLAGS;
            flags         = LoadedBSP.ConfiguredMCU.ExpandToolFlags(flags, bspDict, null);

            Dictionary <string, bool> sourceExtensions = new Dictionary <string, bool>(StringComparer.InvariantCultureIgnoreCase);

            sourceExtensions.Add("c", true);
            sourceExtensions.Add("cpp", true);
            sourceExtensions.Add("s", true);

            return(BuildAndRunValidationJob(mcu, mcuDir, false, null, prj, flags, sourceExtensions, null, null, vs, keepDirectoryAfterSuccessfulBuild));
        }
コード例 #13
0
        public static TestResult TestSingleSample(LoadedBSP.LoadedSample sampleObj,
                                                  LoadedBSP.LoadedMCU mcu,
                                                  string testDirectory,
                                                  TestedSample sample,
                                                  DeviceParameterSet extraParameters,
                                                  RegisterValidationParameters registerValidationParameters,
                                                  BSPValidationFlags validationFlags = BSPValidationFlags.None)
        {
            CreateEmptyDirectoryForTestingMCU(testDirectory);

            var configuredMCU = new LoadedBSP.ConfiguredMCU(mcu, GetDefaultPropertyValues(mcu.ExpandedMCU.ConfigurableProperties));

            if (configuredMCU.ExpandedMCU.FLASHSize == 0)
            {
                configuredMCU.Configuration["com.sysprogs.bspoptions.primary_memory"] = "sram";
            }

            var configuredSample = new ConfiguredSample
            {
                Sample     = sampleObj,
                Parameters = GetDefaultPropertyValues(sampleObj.Sample.ConfigurableProperties),
                Frameworks = (sampleObj.Sample.RequiredFrameworks == null) ? null :
                             sampleObj.Sample.RequiredFrameworks.Select(fwId =>
                {
                    return(configuredMCU.BSP.BSP.Frameworks.First(fwO => fwO.ID == fwId || fwO.ClassID == fwId && fwO.IsCompatibleWithMCU(configuredMCU.ExpandedMCU.ID)));
                }).ToList(),
                FrameworkParameters = new Dictionary <string, string>(),
            };

            ApplyConfiguration(configuredMCU.Configuration, extraParameters?.MCUConfiguration, sample.MCUConfiguration);

            var bspDict = configuredMCU.BuildSystemDictionary(default(SystemDirectories));

            bspDict["PROJECTNAME"] = "test";

            if (configuredSample.Frameworks != null)
            {
                foreach (var fw in configuredSample.Frameworks)
                {
                    if (fw.AdditionalSystemVars != null)
                    {
                        foreach (var kv in fw.AdditionalSystemVars)
                        {
                            bspDict[kv.Key] = kv.Value;
                        }
                    }
                    if (fw.ConfigurableProperties != null)
                    {
                        var defaultFwConfig = GetDefaultPropertyValues(fw.ConfigurableProperties);
                        if (defaultFwConfig != null)
                        {
                            foreach (var kv in defaultFwConfig)
                            {
                                configuredSample.FrameworkParameters[kv.Key] = kv.Value;
                            }
                        }
                    }
                }
            }

            if (sampleObj.Sample?.DefaultConfiguration?.Entries != null)
            {
                foreach (var kv in sampleObj.Sample.DefaultConfiguration.Entries)
                {
                    configuredSample.FrameworkParameters[kv.Key] = kv.Value;
                }
            }

            ApplyConfiguration(configuredSample.FrameworkParameters, extraParameters?.FrameworkConfiguration, sample.FrameworkConfiguration);
            ApplyConfiguration(configuredSample.Parameters, extraParameters?.SampleConfiguration, sample.SampleConfiguration);

            Dictionary <string, bool> frameworkIDs = new Dictionary <string, bool>();

            foreach (var fw in sampleObj.Sample.RequiredFrameworks ?? new string[0])
            {
                frameworkIDs[fw] = true;
            }
            foreach (var fw in sample.AdditionalFrameworks ?? new string[0])
            {
                frameworkIDs[fw] = true;
            }

            var prj = new GeneratedProject(testDirectory, configuredMCU, frameworkIDs.Keys.ToArray())
            {
                DataSections = sample.DataSections
            };

            prj.DoGenerateProjectFromEmbeddedSample(configuredSample, false, bspDict);

            prj.AddBSPFilesToProject(bspDict, configuredSample.FrameworkParameters, frameworkIDs);
            var flags = prj.GetToolFlags(bspDict, configuredSample.FrameworkParameters, frameworkIDs);

            //  if(sampleObj.Sample.LinkerScript!=null)
            //     flags.LinkerScript = sampleObj.Sample.LinkerScript;

            if (!string.IsNullOrEmpty(configuredSample.Sample.Sample.LinkerScript))
            {
                flags.LinkerScript = VariableHelper.ExpandVariables(configuredSample.Sample.Sample.LinkerScript, bspDict, configuredSample.FrameworkParameters);
            }

            if (!string.IsNullOrEmpty(configuredSample.Sample.Sample.CLanguageStandard))
            {
                flags.CFLAGS += $" -std={configuredSample.Sample.Sample.CLanguageStandard}";
            }
            if (!string.IsNullOrEmpty(configuredSample.Sample.Sample.CPPLanguageStandard))
            {
                flags.CXXFLAGS += $" -std={configuredSample.Sample.Sample.CPPLanguageStandard}";
            }

            flags.COMMONFLAGS += " -save-temps ";
            Dictionary <string, bool> sourceExtensions = new Dictionary <string, bool>(StringComparer.InvariantCultureIgnoreCase);

            foreach (var ext in sample.SourceFileExtensions.Split(';'))
            {
                sourceExtensions[ext] = true;
            }

            Console.WriteLine("Building {0}...", Path.GetFileName(testDirectory));
            return(BuildAndRunValidationJob(mcu, testDirectory, prj, flags, sourceExtensions, null, sample.ValidateRegisters ? registerValidationParameters : null, validationFlags));
        }
コード例 #14
0
ファイル: Program.cs プロジェクト: sysprogs/BSPTools
        private static TestResult TestMCU(LoadedBSP.LoadedMCU mcu, string mcuDir, TestedSample sample, DeviceParameterSet extraParameters, LoadedRenamingRule[] renameRules, string[] nonValidateReg)
        {
            const int RepeatCount = 20;
            for (var i = 0; i < RepeatCount; ++i)
            {
                if (!Directory.Exists(mcuDir))
                {
                    break;
                }
                Console.WriteLine("Deleting " + mcuDir + "...");
                Directory.Delete(mcuDir, true);
                if (i == RepeatCount - 1)
                {
                    throw new Exception("Cannot remove folder!");
                }
                Thread.Sleep(50);
            }
            for (var i = 0; i < RepeatCount; ++i)
            {
                if (Directory.Exists(mcuDir))
                {
                    break;
                }
                Directory.CreateDirectory(mcuDir);
                if (i == RepeatCount - 1)
                {
                    throw new Exception("Cannot create folder!");
                }
                Thread.Sleep(50);
            }

            var configuredMCU = new LoadedBSP.ConfiguredMCU(mcu, GetDefaultPropertyValues(mcu.ExpandedMCU.ConfigurableProperties));
            if (configuredMCU.ExpandedMCU.FLASHSize == 0)
            {
                configuredMCU.Configuration["com.sysprogs.bspoptions.primary_memory"] = "sram";
            }

            var samples = mcu.BSP.GetSamplesForMCU(mcu.ExpandedMCU.ID, false);
            LoadedBSP.LoadedSample sampleObj;
            if (string.IsNullOrEmpty(sample.Name))
                sampleObj = samples[0];
            else
                sampleObj = samples.FirstOrDefault(s => s.Sample.Name == sample.Name);

            if (sampleObj == null)
            {
                if (sample.SkipIfNotFound)
                {
                    Directory.Delete(mcuDir, true);
                    return TestResult.Skipped;
                }
                else
                    throw new Exception("Cannot find sample: " + sample.Name);
            }

            string[] frameworks = sampleObj.Sample.RequiredFrameworks ?? new string[0];

            //frameworkCfg["com.sysprogs.bspoptions.stm32.freertos.heap"] = "heap_4";
            //frameworkCfg["com.sysprogs.bspoptions.stm32.freertos.portcore"] = "CM0";
            //frameworkCfg["com.sysprogs.bspoptions.stm32.usb.devclass"] = "CDC";
            //frameworkCfg["com.sysprogs.bspoptions.stm32.usb.speed"] = "FS";

            var configuredSample = new ConfiguredSample
            {
                Sample = sampleObj,
                Parameters = GetDefaultPropertyValues(sampleObj.Sample.ConfigurableProperties),
                Frameworks = (sampleObj.Sample.RequiredFrameworks == null) ? null :
                sampleObj.Sample.RequiredFrameworks.Select(fwId =>
                {
                    return configuredMCU.BSP.BSP.Frameworks.First(fwO => fwO.ID == fwId || fwO.ClassID == fwId && fwO.IsCompatibleWithMCU(configuredMCU.ExpandedMCU.ID));
                }).ToList(),
                FrameworkParameters = new Dictionary<string, string>(),
            };

            ApplyConfiguration(configuredMCU.Configuration, extraParameters?.MCUConfiguration, sample.MCUConfiguration);

            //configuredSample.Parameters["com.sysprogs.examples.ledblink.LEDPORT"] = "GPIOA";
            //configuredSample.Parameters["com.sysprogs.examples.stm32.LEDPORT"] = "GPIOA";
            //configuredSample.Parameters["com.sysprogs.examples.stm32.freertos.heap_size"] = "0";

            var bspDict = configuredMCU.BuildSystemDictionary(new BSPManager(), null);
            bspDict["PROJECTNAME"] = "test";

            if (configuredSample.Frameworks != null)
                foreach (var fw in configuredSample.Frameworks)
                {
                    if (fw.AdditionalSystemVars != null)
                        foreach (var kv in fw.AdditionalSystemVars)
                            bspDict[kv.Key] = kv.Value;
                    if (fw.ConfigurableProperties != null)
                    {
                        var defaultFwConfig = GetDefaultPropertyValues(fw.ConfigurableProperties);
                        if (defaultFwConfig != null)
                            foreach (var kv in defaultFwConfig)
                                configuredSample.FrameworkParameters[kv.Key] = kv.Value;
                    }
                }

            if (sampleObj.Sample?.DefaultConfiguration?.Entries != null)
                foreach (var kv in sampleObj.Sample.DefaultConfiguration.Entries)
                    configuredSample.FrameworkParameters[kv.Key] = kv.Value;

            ApplyConfiguration(configuredSample.FrameworkParameters, extraParameters?.FrameworkConfiguration, sample.FrameworkConfiguration);
            ApplyConfiguration(configuredSample.Parameters, extraParameters?.SampleConfiguration, sample.SampleConfiguration);

            var prj = new GeneratedProject(mcuDir, configuredMCU, frameworks);
            prj.DoGenerateProjectFromEmbeddedSample(configuredSample, false, bspDict);
            Dictionary<string, bool> frameworkIDs = new Dictionary<string, bool>();
            if (frameworks != null)
                foreach (var fw in frameworks)
                    frameworkIDs[fw] = true;
            if (sample.AdditionalFrameworks != null)
                foreach (var fw in sample.AdditionalFrameworks)
                    frameworkIDs[fw] = true;

            prj.AddBSPFilesToProject(bspDict, configuredSample.FrameworkParameters, frameworkIDs);
            var flags = prj.GetToolFlags(bspDict, configuredSample.FrameworkParameters, frameworkIDs);

            Dictionary<string, bool> sourceExtensions = new Dictionary<string, bool>(StringComparer.InvariantCultureIgnoreCase);
            foreach (var ext in sample.SourceFileExtensions.Split(';'))
                sourceExtensions[ext] = true;

            return BuildAndRunValidationJob(mcu, mcuDir, sample.ValidateRegisters, renameRules, prj, flags, sourceExtensions, nonValidateReg);
        }
コード例 #15
0
ファイル: DebugExtension.cs プロジェクト: xllj/BSPTools
 public void AdjustDebugMethod(LoadedBSP.ConfiguredMCU mcu, ConfiguredDebugMethod method)
 {
 }
コード例 #16
0
ファイル: Program.cs プロジェクト: sysprogs/BSPTools
        private static TestResult TestVendorSample(LoadedBSP.LoadedMCU mcu, BSPEngine.VendorSample vs, string mcuDir, bool pSoftFPU, VendorSampleDirectory sampleDir)
        {
            var configuredMCU = new LoadedBSP.ConfiguredMCU(mcu, GetDefaultPropertyValues(mcu.ExpandedMCU.ConfigurableProperties));
            if (configuredMCU.ExpandedMCU.FLASHSize == 0)
            {
                configuredMCU.Configuration["com.sysprogs.bspoptions.primary_memory"] = "sram";
            }
            var bspDict = configuredMCU.BuildSystemDictionary(new BSPManager(), null);
            bspDict["PROJECTNAME"] = "test";
            bspDict["SYS:VSAMPLE_DIR"] = sampleDir.Path;
            var prj = new GeneratedProject(configuredMCU, vs, mcuDir, bspDict, vs.Configuration.Frameworks ?? new string[0]);

            var frameworkCfg = PropertyDictionary2.ReadPropertyDictionary(vs.Configuration.Configuration);
            var frameworkIDs = vs.Configuration.Frameworks?.ToDictionary(fw => fw, fw => true);
            prj.AddBSPFilesToProject(bspDict, frameworkCfg, frameworkIDs);
            var flags = prj.GetToolFlags(bspDict, frameworkCfg, frameworkIDs);

            //ToolFlags flags = new ToolFlags { CXXFLAGS = "  ", COMMONFLAGS = "-mcpu=cortex-m3  -mthumb", LDFLAGS = "-Wl,-gc-sections -Wl,-Map," + "test.map", CFLAGS = "-ffunction-sections -Os -MD" };
            if (!pSoftFPU)
                flags.COMMONFLAGS = flags.COMMONFLAGS.Replace("soft", "hard");

            flags.CFLAGS += " -MD";
            flags.CXXFLAGS += " -MD";

            flags.IncludeDirectories = LoadedBSP.Combine(flags.IncludeDirectories, vs.IncludeDirectories);
            flags.PreprocessorMacros = LoadedBSP.Combine(flags.PreprocessorMacros, vs.PreprocessorMacros);

            flags = LoadedBSP.ConfiguredMCU.ExpandToolFlags(flags, bspDict, null);

            Dictionary<string, bool> sourceExtensions = new Dictionary<string, bool>(StringComparer.InvariantCultureIgnoreCase);
            sourceExtensions.Add("c", true);
            sourceExtensions.Add("cpp", true);

            return BuildAndRunValidationJob(mcu, mcuDir, false, null, prj, flags, sourceExtensions, null, vs);
        }
コード例 #17
0
 public ICustomBSPConfigurator CreateConfigurator(LoadedBSP.ConfiguredMCU mcu, DebugMethod method)
 {
     return(null);
 }