protected virtual void AdjustVendorSampleProperties(VendorSample vs) { if (vs.SourceFiles.FirstOrDefault(f => ShouldFileTriggerHardFloat(f)) != null) { if (vs.Configuration.MCUConfiguration != null) { var dict = PropertyDictionary2.ReadPropertyDictionary(vs.Configuration.MCUConfiguration); dict["com.sysprogs.bspoptions.arm.floatmode"] = "-mfloat-abi=hard"; vs.Configuration.MCUConfiguration = new PropertyDictionary2 { Entries = dict.Select(kv => new PropertyDictionary2.KeyValue { Key = kv.Key, Value = kv.Value }).ToArray() }; } else { vs.Configuration.MCUConfiguration = new PropertyDictionary2 { Entries = new PropertyDictionary2.KeyValue[] { new PropertyDictionary2.KeyValue { Key = "com.sysprogs.bspoptions.arm.floatmode", Value = "-mfloat-abi=hard" } } }; } } }
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)); }
protected override void AdjustVendorSampleProperties(VendorSample vs) { base.AdjustVendorSampleProperties(vs); vs.SourceFiles = vs.SourceFiles.Where(s => !IsNonGCCFile(vs, s)).ToArray(); if (vs.SourceFiles.FirstOrDefault(f => f.Contains("libBle_Mesh_CM4_GCC")) != null) { var dict = PropertyDictionary2.ReadPropertyDictionary(vs.Configuration.MCUConfiguration); dict["com.sysprogs.bspoptions.arm.floatmode"] = "-mfloat-abi=soft"; vs.Configuration.MCUConfiguration = new PropertyDictionary2(dict); } }
public ReverseFileConditionMatcher(ReverseConditionTable table) { var fileDict = PropertyDictionary2.ReadPropertyDictionary(table.RenamedFileTable); _ConfigurationByFile = TranslateObjectList(table, table.FileTable, fileDict); _ConfigurationByMacro = TranslateObjectList(table, table.MacroTable); foreach (var macro in table.FreeFormMacros) { _FreeFormMacros.Add(new FreeFormMacro { Framework = table.Frameworks[macro.FrameworkIndex], Regex = new Regex(macro.Regex), VariableName = macro.Value }); } }
public static TestStatistics TestVendorSamples(VendorSampleDirectory samples, string bspDir, string temporaryDirectory, double testProbability = 1, bool esp32 = false) { string defaultToolchainID = "SysGCC-arm-eabi-6.2.0"; flEsp32 = false; if (esp32) { defaultToolchainID = "SysGCC-xtensa-esp32-elf-5.2.0"; flEsp32 = true; } var toolchainPath = (string)Registry.CurrentUser.OpenSubKey(@"Software\Sysprogs\GNUToolchains").GetValue(defaultToolchainID); if (toolchainPath == null) { throw new Exception("Cannot locate toolchain path from registry"); } var toolchain = LoadedToolchain.Load(new ToolchainSource.Other(Environment.ExpandEnvironmentVariables(toolchainPath))); var bsp = LoadedBSP.Load(new BSPEngine.BSPSummary(Environment.ExpandEnvironmentVariables(Path.GetFullPath(bspDir))), toolchain); if (flEsp32) { toolchainPath = toolchainPath.Replace('\\', '/'); //esp32 } TestStatistics stats = new TestStatistics(); int cnt = 0, failed = 0, succeeded = 0; LoadedBSP.LoadedMCU[] MCUs = bsp.MCUs.ToArray(); string outputDir = Path.Combine(temporaryDirectory, "VendorSamples"); if (!Directory.Exists(outputDir)) { Directory.CreateDirectory(outputDir); } int sampleCount = samples.Samples.Length; Random rng = new Random(); using (var r = new TestResults(Path.Combine(temporaryDirectory, "bsptest.log"))) { r.BeginSample("Vendor Samples"); foreach (var vs in samples.Samples) { LoadedBSP.LoadedMCU mcu; try { var rgFilterID = new Regex(vs.DeviceID.Replace('x', '.'), RegexOptions.IgnoreCase); mcu = bsp.MCUs.Where(f => rgFilterID.IsMatch(f.ExpandedMCU.ID)).ToArray()?.First(); vs.DeviceID = mcu.ExpandedMCU.ID; } catch (Exception ex) { r.ExceptionSample(ex.Message, "mcu " + vs.DeviceID + " not found in bsp"); Console.WriteLine("bsp have not mcu:" + vs.DeviceID); continue; } if (testProbability < 1 && rng.NextDouble() > testProbability) { cnt++; continue; } string mcuDir = Path.Combine(temporaryDirectory, "VendorSamples", vs.UserFriendlyName); mcuDir += $"-{mcu.ExpandedMCU.ID}"; if (!Directory.Exists(mcuDir)) { Directory.CreateDirectory(mcuDir); } DateTime start = DateTime.Now; string[] hwSubstrings = new[] { @"\ARM_CM4F\port.c", @"ARM_CM7\r0p1\port.c", @"CM4_GCC.a", }; if (vs.SourceFiles.FirstOrDefault(f => ContainsAnySubstrings(f, hwSubstrings)) != null) { if (vs.Configuration.MCUConfiguration != null) { var dict = PropertyDictionary2.ReadPropertyDictionary(vs.Configuration.MCUConfiguration); dict["com.sysprogs.bspoptions.arm.floatmode"] = "-mfloat-abi=hard"; vs.Configuration.MCUConfiguration = new PropertyDictionary2 { Entries = dict.Select(kv => new PropertyDictionary2.KeyValue { Key = kv.Key, Value = kv.Value }).ToArray() }; } else { vs.Configuration.MCUConfiguration = new PropertyDictionary2 { Entries = new PropertyDictionary2.KeyValue[] { new PropertyDictionary2.KeyValue { Key = "com.sysprogs.bspoptions.arm.floatmode", Value = "-mfloat-abi=hard" } } }; } } vs.SourceFiles = vs.SourceFiles.Where(s => !IsNonGCCFile(vs, s)).ToArray(); var result = TestVendorSample(mcu, vs, mcuDir, samples); Console.WriteLine($"[{(DateTime.Now - start).TotalMilliseconds:f0} msec]"); if (result == TestResult.Failed) { failed++; } else if (result == TestResult.Succeeded) { succeeded++; } r.LogTestResult(vs.UserFriendlyName, result); cnt++; Console.WriteLine("{0}: {1}% done ({2}/{3} projects, {4} failed)", vs.UserFriendlyName, (cnt * 100) / sampleCount, cnt, sampleCount, failed); } r.EndSample(); } stats.Passed += succeeded; stats.Failed += failed; if (samples is ConstructedVendorSampleDirectory) { (samples as ConstructedVendorSampleDirectory).ToolchainDirectory = toolchainPath; (samples as ConstructedVendorSampleDirectory).BSPDirectory = Path.GetFullPath(bspDir); } return(stats); }
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)); }