Пример #1
0
        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);
        }
Пример #2
0
            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);
            }
Пример #3
0
        //-----------------------------------------------
        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);
        }
Пример #4
0
            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));
            }
Пример #5
0
            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}"),
                };
            }
Пример #6
0
            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));
            }
Пример #7
0
        //-----------------------------------------------
        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);
        }
Пример #8
0
 protected abstract VendorSampleRelocator CreateRelocator(ConstructedVendorSampleDirectory sampleDir);
Пример #9
0
        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);
        }
Пример #10
0
 public STM32PathMapper(ConstructedVendorSampleDirectory dir)
     : base(dir)
 {
 }
Пример #11
0
 protected override PathMapper CreatePathMapper(ConstructedVendorSampleDirectory dir) => new STM32PathMapper(_Directory);
Пример #12
0
 protected override VendorSampleRelocator CreateRelocator(ConstructedVendorSampleDirectory sampleDir)
 {
     return(new CC3220SampleRelocator());
 }
Пример #13
0
        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);
        }
Пример #14
0
 protected override PathMapper CreatePathMapper(ConstructedVendorSampleDirectory dir) => new PathMapperImpl(dir);
Пример #15
0
 public PathMapperImpl(ConstructedVendorSampleDirectory dir)
     : base(dir)
 {
 }
Пример #16
0
 protected override VendorSampleRelocator CreateRelocator(ConstructedVendorSampleDirectory sampleDir) => new STM32SampleRelocator(sampleDir);