private static ConstructedVendorSampleDirectory BuildOrLoadSampleDirectory(string SDKdir, string outputDir, string sampleListFile) { ConstructedVendorSampleDirectory sampleDir; if (File.Exists(sampleListFile) || File.Exists(sampleListFile + ".gz")) { sampleDir = XmlTools.LoadObject <ConstructedVendorSampleDirectory>(sampleListFile); if (sampleDir.SourceDirectory == SDKdir) { return(sampleDir); } } if (Directory.Exists(outputDir)) { Directory.Delete(outputDir, true); } Directory.CreateDirectory(outputDir); var samples = ParseVendorSamples(SDKdir); sampleDir = new ConstructedVendorSampleDirectory { SourceDirectory = SDKdir, Samples = samples.ToArray(), }; XmlTools.SaveObject(sampleDir, sampleListFile); return(sampleDir); }
public override Dictionary <string, string> InsertVendorSamplesIntoBSP(ConstructedVendorSampleDirectory dir, VendorSample[] sampleList, string bspDirectory) { var copiedFiles = base.InsertVendorSamplesIntoBSP(dir, sampleList, bspDirectory); Regex rgDebugger = new Regex("#define[ \t]+CFG_DEBUGGER_SUPPORTED[ \t]+(0)$"); foreach (var kv in copiedFiles) { if (kv.Value.EndsWith("app_conf.h", StringComparison.InvariantCultureIgnoreCase)) { var lines = File.ReadAllLines(kv.Value); bool modified = false; for (int i = 0; i < lines.Length; i++) { var m = rgDebugger.Match(lines[i]); if (m.Success) { lines[i] = lines[i].Substring(0, m.Groups[1].Index) + "1"; modified = true; } } if (modified) { File.WriteAllLines(kv.Value, lines); } } } return(copiedFiles); }
//----------------------------------------------- private static ConstructedVendorSampleDirectory BuildOrLoadSampleDirectory(string SDKdir, string outputDir, string sampleListFile) { ConstructedVendorSampleDirectory sampleDir; if (File.Exists(sampleListFile) || File.Exists(sampleListFile + ".gz")) { sampleDir = XmlTools.LoadObject <ConstructedVendorSampleDirectory>(sampleListFile); if (sampleDir.SourceDirectory == SDKdir) { return(sampleDir); } } if (Directory.Exists(outputDir)) { Directory.Delete(outputDir, true); } Directory.CreateDirectory(outputDir); var samples = ParseVendorSamples(SDKdir); Console.ForegroundColor = ConsoleColor.Yellow; ToLog($"Total exemples : {CntSamles}"); ToLog($"Failed exemples : {FaildSamles}, {CntSamles / 100 * FaildSamles} % from Total"); Console.ForegroundColor = ConsoleColor.Gray; sampleDir = new ConstructedVendorSampleDirectory { SourceDirectory = SDKdir, Samples = samples.ToArray(), }; XmlTools.SaveObject(sampleDir, sampleListFile); return(sampleDir); }
protected override VendorSampleRelocator CreateRelocator(ConstructedVendorSampleDirectory sampleDir) { ReverseConditionTable table = null; var conditionTableFile = Path.Combine(BSPDirectory, ReverseFileConditionBuilder.ReverseConditionListFileName + ".gz"); if (File.Exists(conditionTableFile)) { table = XmlTools.LoadObject <ReverseConditionTable>(conditionTableFile); } return(new STM32SampleRelocator(sampleDir, table)); }
public STM32SampleRelocator(ConstructedVendorSampleDirectory dir, ReverseConditionTable optionalConditionTableForFrameworkMapping) : base(optionalConditionTableForFrameworkMapping) { _Directory = dir; /* * Known problems with trying to map frameworks: * HAL: * Much longer build times * LL-only samples don't provide cfg files for HAL * HAL-only samples don't provide stm32_assert.h needed by LL * lwIP: * Different SDKs have slightly different file layouts * Some samples don't provide sys_xxx() functions */ AutoDetectedFrameworks = new AutoDetectedFramework[] {/* * new AutoDetectedFramework {FrameworkID = "com.sysprogs.arm.stm32.hal", * FileRegex = new Regex(@"\$\$SYS:VSAMPLE_DIR\$\$/[^/\\]+/Drivers/[^/\\]+_HAL_Driver", RegexOptions.Compiled | RegexOptions.IgnoreCase), * DisableTriggerRegex = new Regex(@"_ll_[^/\\]+\.c", RegexOptions.Compiled | RegexOptions.IgnoreCase), * Configuration = new Dictionary<string, string>() } */ /*new AutoDetectedFramework {FrameworkID = "com.sysprogs.arm.stm32.LwIP", * FileRegex = new Regex(@"\$\$SYS:VSAMPLE_DIR\$\$/[^/\\]+/Middlewares/Third_Party/LwIP", RegexOptions.Compiled | RegexOptions.IgnoreCase), * DisableTriggerRegex = new Regex(@"^$", RegexOptions.Compiled | RegexOptions.IgnoreCase), * Configuration = new Dictionary<string, string>() }*/ }; AutoPathMappings = new PathMapping[] { new PathMapping(@"\$\$SYS:VSAMPLE_DIR\$\$/([^_]+)/Drivers/STM32[^/\\]+xx_HAL_Driver/(.*)", "$$SYS:BSP_ROOT$$/STM32{1}xxxx/STM32{1}xx_HAL_Driver/{2}"), new PathMapping(@"\$\$SYS:VSAMPLE_DIR\$\$/([^_]+)/Drivers/CMSIS/DSP/(.*)", "$$SYS:BSP_ROOT$$/STM32{1}xxxx/DSP/{2}"), new PathMapping(@"\$\$SYS:VSAMPLE_DIR\$\$/([^_]+)/Drivers/CMSIS/(.*)", "$$SYS:BSP_ROOT$$/STM32{1}xxxx/CMSIS_HAL/{2}"), new PathMapping(@"\$\$SYS:VSAMPLE_DIR\$\$/([^_]+)/Middlewares/ST/STM32_USB_(Host|Device)_Library/(.*)", "$$SYS:BSP_ROOT$$/STM32{1}xxxx/STM32_USB_{2}_Library/{3}"), new PathMapping(@"\$\$SYS:VSAMPLE_DIR\$\$/([^_]+)/Middlewares/Third_Party/(FreeRTOS)/(.*)", "$$SYS:BSP_ROOT$$/{2}/{3}"), new PathMapping(@"\$\$SYS:VSAMPLE_DIR\$\$/WB/Middlewares/ST/STM32_WPAN(.*)", "$$SYS:BSP_ROOT$$/STM32WBxxxx/STM32_WPAN{1}"), new PathMapping(@"\$\$SYS:VSAMPLE_DIR\$\$/(WB)/Drivers/BSP/(.*)", "$$SYS:BSP_ROOT$$/STM32{1}xxxx/BSP/{2}"), new PathMapping(@"\$\$SYS:VSAMPLE_DIR\$\$/MP1/Middlewares/Third_Party/OpenAMP/(.*)", "$$SYS:BSP_ROOT$$/OpenAMP/{1}"), }; }
protected override VendorSampleRelocator CreateRelocator(ConstructedVendorSampleDirectory sampleDir) { ReverseConditionTable table = null; if (false) { //As of SDK 16.0, most vendor samples include very specific subsets of various frameworks, so //converting them to properly reference embedded frameworks pulls in too many extra files. //Also the LwIP framework defines excessive amount of include directories, exceeding the 32KB //limit for .rsp files. var conditionTableFile = Path.Combine(BSPDirectory, ReverseFileConditionBuilder.ReverseConditionListFileName + ".gz"); if (File.Exists(conditionTableFile)) { table = XmlTools.LoadObject <ReverseConditionTable>(conditionTableFile); } } return(new NordicSampleRelocator(table)); }
//----------------------------------------------- private static ConstructedVendorSampleDirectory BuildOrLoadSampleDirectory(string SDKdir, string outputDir, string sampleListFile) { ConstructedVendorSampleDirectory sampleDir; if (File.Exists(sampleListFile) || File.Exists(sampleListFile + ".gz")) { sampleDir = XmlTools.LoadObject <ConstructedVendorSampleDirectory>(sampleListFile); if (sampleDir.SourceDirectory == SDKdir) { return(sampleDir); } } LoadDictRemoveFiles(Path.Combine(SDKdir, "esp32-bsp", "RenameSourceFiles.txt")); if (Directory.Exists(outputDir)) { Directory.Delete(outputDir, true); } Directory.CreateDirectory(outputDir); var samples = ParseVendorSamples(SDKdir); // UpdateReferenceFramwork(ref samples); Console.ForegroundColor = ConsoleColor.Yellow; ToLog($"Total exemples : {CntSamles}"); ToLog($"Failed exemples : {FaildSamles}, {(CntSamles / 100) * FaildSamles} % from Total"); Console.ForegroundColor = ConsoleColor.Gray; sampleDir = new ConstructedVendorSampleDirectory { SourceDirectory = Path.Combine(SDKdir, $@"esp32-bsp\esp-idf\examples"), Samples = samples.ToArray(), }; XmlTools.SaveObject(sampleDir, sampleListFile); return(sampleDir); }
protected abstract VendorSampleRelocator CreateRelocator(ConstructedVendorSampleDirectory sampleDir);
private ConstructedVendorSampleDirectory BuildOrLoadSampleDirectoryAndUpdateReportForFailedSamples(string sampleListFile, string SDKdir, RunMode mode, string specificSampleName) { Console.WriteLine($"Creating sample list..."); ConstructedVendorSampleDirectory sampleDir = null; bool directoryMatches = false; if (File.Exists(sampleListFile) || File.Exists(sampleListFile + ".gz")) { sampleDir = XmlTools.LoadObject <ConstructedVendorSampleDirectory>(sampleListFile); if (sampleDir.SourceDirectory == SDKdir) { directoryMatches = true; } } if (directoryMatches && (mode == RunMode.Release || mode == RunMode.SingleSample)) { Console.WriteLine($"Loaded {sampleDir.Samples.Length} samples from cache"); return(sampleDir); } VendorSampleFilter filter; if (!directoryMatches || mode != RunMode.Incremental) { filter = new VendorSampleFilter(null); } else { filter = new VendorSampleFilter(_Report); } if (!filter.IsEmpty) { var samples = ParseVendorSamples(SDKdir, filter); if (directoryMatches && mode == RunMode.Incremental) { //We don't update the report yet, even if the samples were previously marked as 'parse failed'. //This status will get overridden once the samples are tested. Dictionary <VendorSampleID, VendorSample> newSampleDict = new Dictionary <VendorSampleID, VendorSample>(); foreach (var vs in samples.VendorSamples) { newSampleDict[new VendorSampleID(vs)] = vs; } for (int i = 0; i < sampleDir.Samples.Length; i++) { if (newSampleDict.TryGetValue(new VendorSampleID(sampleDir.Samples[i]), out var newSampleDefinition)) { sampleDir.Samples[i] = newSampleDefinition; } } } else { sampleDir = new ConstructedVendorSampleDirectory { SourceDirectory = SDKdir, Samples = samples.VendorSamples, }; } if (samples.FailedSamples != null) { foreach (var fs in samples.FailedSamples) { StoreError(_Report.ProvideEntryForSample(fs.ID), fs.BuildLogFile, VendorSamplePass.InitialParse); } } XmlTools.SaveObject(sampleDir, sampleListFile); } else if (sampleDir == null) { throw new Exception("Unexpected null sample directory"); } return(sampleDir); }
public STM32PathMapper(ConstructedVendorSampleDirectory dir) : base(dir) { }
protected override PathMapper CreatePathMapper(ConstructedVendorSampleDirectory dir) => new STM32PathMapper(_Directory);
protected override VendorSampleRelocator CreateRelocator(ConstructedVendorSampleDirectory sampleDir) { return(new CC3220SampleRelocator()); }
private ConstructedVendorSampleDirectory BuildOrLoadSampleDirectoryAndUpdateReportForFailedSamples(string sampleListFile, string SDKdir, RunMode mode, string specificSampleName) { Console.WriteLine($"Creating sample list..."); ConstructedVendorSampleDirectory sampleDir = null; bool directoryMatches = false; if (File.Exists(sampleListFile) || File.Exists(sampleListFile + ".gz")) { sampleDir = XmlTools.LoadObject <ConstructedVendorSampleDirectory>(sampleListFile); if (sampleDir.SourceDirectory == SDKdir) { directoryMatches = true; } } if (directoryMatches && mode == RunMode.Release) { Console.WriteLine($"Loaded {sampleDir.Samples.Length} samples from cache"); HashSet <string> blacklist = ParseBlacklistFile(); sampleDir.Samples = sampleDir.Samples.Where(s => !blacklist.Contains(s.InternalUniqueID)).ToArray(); return(sampleDir); } IVendorSampleFilter filter; if (mode == RunMode.SingleSample && sampleDir != null) { var existingSample = sampleDir.Samples.FirstOrDefault(s => s.InternalUniqueID == specificSampleName) ?? throw new Exception("Unknown sample specified via command line: " + specificSampleName); filter = new SingleSampleFilter(existingSample); } else if (!directoryMatches || mode != RunMode.Incremental || sampleDir == null) { filter = new VendorSampleFilter(); } else { filter = new VendorSampleFilter(_Report, sampleDir.Samples); } if ((filter as VendorSampleFilter)?.IsEmpty != true) { var samples = ParseVendorSamples(SDKdir, filter); HashSet <string> blacklist = ParseBlacklistFile(); samples.VendorSamples = samples.VendorSamples.Where(s => !blacklist.Contains(s.InternalUniqueID)).ToArray(); if (directoryMatches && (mode == RunMode.Incremental || mode == RunMode.SingleSample)) { //We don't update the report yet, even if the samples were previously marked as 'parse failed'. //This status will get overridden once the samples are tested. Dictionary <string, VendorSample> newSampleDict = new Dictionary <string, VendorSample>(); foreach (var vs in samples.VendorSamples) { newSampleDict[vs.InternalUniqueID] = vs; } for (int i = 0; i < sampleDir.Samples.Length; i++) { if (newSampleDict.TryGetValue(sampleDir.Samples[i].InternalUniqueID, out var newSampleDefinition)) { sampleDir.Samples[i] = newSampleDefinition; } } } else { sampleDir = new ConstructedVendorSampleDirectory { SourceDirectory = SDKdir, Samples = samples.VendorSamples, }; } if (samples.FailedSamples != null) { foreach (var fs in samples.FailedSamples) { StoreError(_Report.ProvideEntryForSample(fs.UniqueID), fs.BuildLogFile, VendorSamplePass.InitialParse); } } XmlTools.SaveObject(sampleDir, sampleListFile); } else if (sampleDir == null) { throw new Exception("Unexpected null sample directory"); } return(sampleDir); }
protected override PathMapper CreatePathMapper(ConstructedVendorSampleDirectory dir) => new PathMapperImpl(dir);
public PathMapperImpl(ConstructedVendorSampleDirectory dir) : base(dir) { }
protected override VendorSampleRelocator CreateRelocator(ConstructedVendorSampleDirectory sampleDir) => new STM32SampleRelocator(sampleDir);