Esempio n. 1
0
 private static void CopyAndAdjustSamples(DummyBSPBuilder builder, TestFrameworkDefinition.TestFrameworkSample[] samples)
 {
     if (samples == null)
     {
         return;
     }
     foreach (var sample in samples)
     {
         for (int i = 0; i < sample.Files.Length; i++)
         {
             string targetPath = Path.Combine(builder.Directories.OutputDir, sample.Files[i]);
             Directory.CreateDirectory(Path.GetDirectoryName(targetPath));
             File.Copy(Path.Combine(builder.Directories.RulesDir, sample.Files[i]), targetPath);
             sample.Files[i] = $"$$SYS:TESTFW_BASE$$/{builder.FrameworkID}/" + sample.Files[i].Replace('\\', '/');
         }
     }
 }
Esempio n. 2
0
        static void Main(string[] args)
        {
            AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
            if (args.Length < 2)
            {
                throw new Exception("Usage: TestFrameworkGenerator <Rules subdir> <Source directory>");
            }
            var dummyBSPBuilder = new DummyBSPBuilder(new BSPDirectories(args[1], @"..\..\Output\" + args[0], @"..\..\rules\" + args[0]));

            if (Directory.Exists(dummyBSPBuilder.Directories.OutputDir))
            {
                Directory.Delete(dummyBSPBuilder.Directories.OutputDir, true);
            }
            Directory.CreateDirectory(dummyBSPBuilder.Directories.OutputDir);


            var fwObj = XmlTools.LoadObject <TestFrameworkDefinition>(Path.Combine(dummyBSPBuilder.Directories.RulesDir, "TestFramework.xml"));

            dummyBSPBuilder.FrameworkID = fwObj.ID;
            var           rules        = XmlTools.LoadObject <TestFrameworkRules>(Path.Combine(dummyBSPBuilder.Directories.RulesDir, "rules.xml"));
            List <string> projectFiles = new List <string>();
            ToolFlags     flags        = new ToolFlags();

            if (fwObj.Common == null)
            {
                fwObj.Common = new TestFrameworkDefinition.TestPlatformBuild();
            }


            foreach (var job in rules.CopyJobs)
            {
                flags = flags.Merge(job.CopyAndBuildFlags(dummyBSPBuilder, projectFiles, null, ref fwObj.Common.ConfigurableProperties, null));
            }

            Dictionary <string, FileCondition> matchedConditions = new Dictionary <string, FileCondition>(StringComparer.InvariantCultureIgnoreCase);

            foreach (var cond in dummyBSPBuilder.MatchedFileConditions)
            {
                matchedConditions[cond.FilePath] = cond;
            }

            var           platformIndepenentFiles = projectFiles.Where(f => !matchedConditions.ContainsKey(f)).ToList();
            List <string> embeddedFiles           = new List <string>();
            List <string> linuxFiles = new List <string>();

            foreach (var f in projectFiles)
            {
                FileCondition cond;
                if (matchedConditions.TryGetValue(f, out cond))
                {
                    var eq = (cond.ConditionToInclude as Condition.Equals);
                    if (eq?.Expression == "$$platform$$")
                    {
                        dummyBSPBuilder.MatchedFileConditions.Remove(cond);
                        switch (eq.ExpectedValue)
                        {
                        case "embedded":
                            embeddedFiles.Add(f);
                            break;

                        case "linux":
                            linuxFiles.Add(f);
                            break;

                        default:
                            throw new Exception("Invalid platform condition");
                        }
                    }
                    else if (!platformIndepenentFiles.Contains(f))
                    {
                        platformIndepenentFiles.Add(f);
                    }
                }
            }

            fwObj.Common.AdditionalSourceFiles = platformIndepenentFiles.Where(f => !MCUFamilyBuilder.IsHeaderFile(f)).Select(f => dummyBSPBuilder.MakeRelativePath(f)).ToArray();
            fwObj.Common.AdditionalHeaderFiles = platformIndepenentFiles.Where(f => MCUFamilyBuilder.IsHeaderFile(f)).Select(f => dummyBSPBuilder.MakeRelativePath(f)).ToArray();

            fwObj.Common.AdditionalIncludeDirs        = flags.IncludeDirectories?.Select(f => dummyBSPBuilder.MakeRelativePath(f))?.ToArray();
            fwObj.Common.AdditionalPreprocessorMacros = flags.PreprocessorMacros?.Select(f => dummyBSPBuilder.MakeRelativePath(f))?.ToArray();

            if (fwObj.Embedded != null)
            {
                fwObj.Embedded.AdditionalSourceFiles = embeddedFiles.Where(f => !MCUFamilyBuilder.IsHeaderFile(f)).Select(f => dummyBSPBuilder.MakeRelativePath(f)).ToArray();
                fwObj.Embedded.AdditionalHeaderFiles = embeddedFiles.Where(f => MCUFamilyBuilder.IsHeaderFile(f)).Select(f => dummyBSPBuilder.MakeRelativePath(f)).ToArray();
                fwObj.Embedded.AdditionalIncludeDirs = fwObj.Embedded.AdditionalIncludeDirs?.Select(f => dummyBSPBuilder.MakeRelativePath(f))?.ToArray();
            }

            if (fwObj.Linux != null)
            {
                fwObj.Linux.AdditionalSourceFiles = linuxFiles.Where(f => !MCUFamilyBuilder.IsHeaderFile(f)).Select(f => dummyBSPBuilder.MakeRelativePath(f)).ToArray();
                fwObj.Linux.AdditionalHeaderFiles = linuxFiles.Where(f => MCUFamilyBuilder.IsHeaderFile(f)).Select(f => dummyBSPBuilder.MakeRelativePath(f)).ToArray();
                fwObj.Linux.AdditionalIncludeDirs = fwObj.Linux.AdditionalIncludeDirs?.Select(f => dummyBSPBuilder.MakeRelativePath(f))?.ToArray();
            }

            foreach (var cond in dummyBSPBuilder.MatchedFileConditions)
            {
                cond.FilePath = dummyBSPBuilder.MakeRelativePath(cond.FilePath);    //Substitute $$SYS:BSP_ROOT$$ with $$SYS:TESTFW_BASE$$/...
            }
            fwObj.FileConditions = dummyBSPBuilder.MatchedFileConditions.ToArray();

            CopyAndAdjustSamples(dummyBSPBuilder, fwObj.Embedded.Samples);
            CopyAndAdjustSamples(dummyBSPBuilder, fwObj.Common.Samples);

            XmlTools.SaveObject(fwObj, Path.Combine(dummyBSPBuilder.Directories.OutputDir, "TestFramework.xml"));

            string outDir      = dummyBSPBuilder.Directories.OutputDir;
            string archiveName = $"{fwObj.ID.Split('.').Last()}-{fwObj.Version}.vgdbxtfp";

            Console.WriteLine("Building archive...");
            string archiveFile = Path.Combine(dummyBSPBuilder.Directories.OutputDir, archiveName);

            TarPacker.PackDirectoryToTGZ(outDir, archiveFile, fn => Path.GetExtension(fn).ToLower() != ".vgdbxtfp");
        }