Ejemplo n.º 1
0
        protected void OnMenuRebuildBSPTreeClick(object sender, EventArgs e)
        {
            BSPBuilder.Build(Room);

            viewerRooPartitionLines.DataSource = null;
            viewerRooPartitionLines.DataSource = Room.BSPTreeNodes;

            viewerRooSubSectors.DataSource = null;
            viewerRooSubSectors.DataSource = Room.BSPTreeLeaves;

            viewerRooWalls.DataSource = null;
            viewerRooWalls.DataSource = Room.Walls;
        }
Ejemplo n.º 2
0
                public override MCU GenerateDefinition(MCUFamilyBuilder fam, BSPBuilder bspBuilder, bool requirePeripheralRegisters, bool allowIncompleteDefinition = false, MCUFamilyBuilder.CoreSpecificFlags flagsToAdd = MCUFamilyBuilder.CoreSpecificFlags.All)
                {
                    var mcu = base.GenerateDefinition(fam, bspBuilder, requirePeripheralRegisters, allowIncompleteDefinition, flagsToAdd);

                    var layout = ToMemoryLayout(true);
                    var sram   = layout.Memories.First(m => m.Name == "SRAM");

                    mcu.RAMBase = sram.Start;
                    mcu.RAMSize = (int)sram.Size;

                    mcu.MemoryMap = layout.ToMemoryMap();

                    return(mcu);
                }
Ejemplo n.º 3
0
                public override MCU GenerateDefinition(MCUFamilyBuilder fam, BSPBuilder bspBuilder, bool requirePeripheralRegisters, bool allowIncompleteDefinition = false, MCUFamilyBuilder.CoreSpecificFlags flagsToAdd = MCUFamilyBuilder.CoreSpecificFlags.All)
                {
                    var mcu = base.GenerateDefinition(fam, bspBuilder, requirePeripheralRegisters, allowIncompleteDefinition, flagsToAdd);

                    var layout = ToMemoryLayout(fam.BSP.Report);
                    var sram   = layout.Layout.Memories.FirstOrDefault(m => m.Type == MemoryType.RAM && m.IsPrimary);

                    if (sram != null)
                    {
                        mcu.RAMBase = sram.Start;
                        mcu.RAMSize = (int)sram.Size;
                    }

                    mcu.MemoryMap            = layout.Layout.ToMemoryMap();
                    mcu.AdditionalSystemVars = LoadedBSP.Combine(new[] { new SysVarEntry {
                                                                             Key = "com.sysprogs.stm32.hal_device_family", Value = MCU.Define
                                                                         } }, mcu.AdditionalSystemVars);

                    return(mcu);
                }
Ejemplo n.º 4
0
 public STM32MP1FamilyBuilder(BSPBuilder bspBuilder, FamilyDefinition definition)
     : base(bspBuilder, definition)
 {
 }
Ejemplo n.º 5
0
 public NordicFamilyBuilder(BSPBuilder bspBuilder, FamilyDefinition definition)
     : base(bspBuilder, definition)
 {
 }
Ejemplo n.º 6
0
        public string TargetFolder; //if null, defaults to (BSP)\(name of source folder), otherwise specifies relative path within the family subdirectory

        #endregion Fields

        #region Methods

        public ToolFlags CopyAndBuildFlags(BSPBuilder bsp, List<string> projectFiles, string subdir)
        {
            List<ParsedCondition> conditions = null;
            if (SimpleFileConditions != null)
            {
                conditions = new List<ParsedCondition>();
                foreach (var cond in SimpleFileConditions)
                {
                    int idx = cond.IndexOf(':');
                    if (idx == -1)
                        throw new Exception("Invalid simple condition format");

                    Regex rgFile = new Regex(cond.Substring(0, idx), RegexOptions.IgnoreCase);
                    string rawCond = cond.Substring(idx + 1).Trim();
                    Condition parsedCond = ParseCondition(rawCond);
                    conditions.Add(new ParsedCondition { Regex = rgFile, Condition = parsedCond });
                }
            }

            string expandedSourceFolder = SourceFolder;
            bsp.ExpandVariables(ref expandedSourceFolder);

            if (TargetFolder == null)
                TargetFolder = Path.GetFileName(expandedSourceFolder);
            TargetFolder = TargetFolder.Replace('\\', '/');
            if (subdir == null)
                subdir = "";
            string absTarget = Path.Combine(bsp.BSPRoot, subdir, TargetFolder);
            Directory.CreateDirectory(absTarget);

            string folderInsideBSPPrefix = TargetFolder;
            if (!string.IsNullOrEmpty(subdir))
                folderInsideBSPPrefix = subdir + "/" + TargetFolder;
            folderInsideBSPPrefix = folderInsideBSPPrefix.Replace('\\', '/');
            if (folderInsideBSPPrefix == "/")
                folderInsideBSPPrefix = "";
            else if (folderInsideBSPPrefix != "" && !folderInsideBSPPrefix.StartsWith("/"))
                folderInsideBSPPrefix = "/" + folderInsideBSPPrefix;

            var copyMasks = new CopyFilters(FilesToCopy);
            var autoIncludes = new CopyFilters(AutoIncludeMask);
            var projectContents = new CopyFilters(ProjectInclusionMask);
            var filesToCopy = Directory.GetFiles(expandedSourceFolder, "*", SearchOption.AllDirectories).Select(f => f.Substring(expandedSourceFolder.Length + 1)).Where(f => copyMasks.IsMatch(f)).ToArray();
            foreach (var dir in filesToCopy.Select(f => Path.Combine(absTarget, Path.GetDirectoryName(f))).Distinct())
                Directory.CreateDirectory(dir);

            RenameRule[] rules = null;
            if (RenameRules != null)
                rules = RenameRules.Split(';').Select(r =>
                {
                    int idx = r.IndexOf("=>");
                    return new RenameRule { OldName = r.Substring(0, idx), NewName = r.Substring(idx + 2) };
                }).ToArray();

            var includeDirs = filesToCopy.Where(f => autoIncludes.IsMatch(f)).Select(f => Path.GetDirectoryName(f).Replace('\\', '/')).Distinct().Select(d => "$$SYS:BSP_ROOT$$" + folderInsideBSPPrefix + (string.IsNullOrEmpty(d) ? "" : ("/" + d))).ToList();
            foreach (var f in filesToCopy)
            {
                string renamedRelativePath = f;
                string pathInsidePackage = Path.Combine(subdir, TargetFolder, f);
                if (pathInsidePackage.Length > 120)
                {
                    if (!bsp.OnFilePathTooLong(pathInsidePackage))
                        continue;
                }

                string targetFile = Path.Combine(absTarget, f);
                var rule = rules?.FirstOrDefault(r => r.Matches(f));
                if (rule != null)
                {
                    targetFile = Path.Combine(Path.GetDirectoryName(targetFile), rule.NewName);
                    renamedRelativePath = Path.Combine(Path.GetDirectoryName(renamedRelativePath), rule.NewName);
                }

                if (AlreadyCopied)
                {
                    if (!File.Exists(targetFile))
                        throw new Exception(targetFile + " required by a copy job marked as 'Already Copied' does not exist");
                }
                else
                    File.Copy(Path.Combine(expandedSourceFolder, f), targetFile, true);

                File.SetAttributes(targetFile, File.GetAttributes(targetFile) & ~FileAttributes.ReadOnly);
                string encodedPath = "$$SYS:BSP_ROOT$$" + folderInsideBSPPrefix + "/" + renamedRelativePath.Replace('\\', '/');

                if (projectContents.IsMatch(f))
                    projectFiles.Add(encodedPath.Replace('\\', '/'));

                if (conditions != null)
                {
                    foreach (var cond in conditions)
                        if (cond.Regex.IsMatch(f))
                        {
                            bsp.MatchedFileConditions.Add(new FileCondition { ConditionToInclude = cond.Condition, FilePath = encodedPath });
                            cond.UseCount++;
                            break;
                        }
                }
            }

            var unusedConditions = conditions?.Where(c => c.UseCount == 0)?.ToArray();
            if ((unusedConditions?.Length ?? 0) != 0)
                throw new Exception(string.Format("Found {0} unused conditions. Please recheck your rules.", unusedConditions.Length));

            if (Patches != null)
                foreach(var p in Patches)
                {
                    List<string> allLines = File.ReadAllLines(Path.Combine(absTarget, p.FilePath)).ToList();
                    p.Apply(allLines);

                    string targetPath = p.TargetPath;
                    if (targetPath == null)
                        targetPath = p.FilePath;
                    Directory.CreateDirectory(Path.GetDirectoryName(Path.Combine(absTarget, targetPath)));
                    File.WriteAllLines(Path.Combine(absTarget, targetPath), allLines);
                }

            if (GuardedFiles != null)
                foreach (var gf in GuardedFiles)
                {
                    int idx = gf.IndexOf("=>");
                    Regex rgFile = new Regex(gf.Substring(0, idx));
                    string macro = gf.Substring(idx + 2);
                    var fn = Path.Combine(absTarget, filesToCopy.First(f => rgFile.IsMatch(f)));

                    List<string> lines = new List<string>(File.ReadAllLines(fn));
                    int i = 0;
                    //1. Find first #include
                    for (i = 0; i < lines.Count; i++)
                        if (lines[i].Trim().StartsWith("#include"))
                            break;

                    //2. Find first non-preprocessor line
                    for (; i < lines.Count; i++)
                        if (!string.IsNullOrWhiteSpace(lines[i]) && !lines[i].Trim().StartsWith("#include"))
                            break;

                    if (i == lines.Count)
                        throw new Exception("Cannot find a place to insert guard in " + fn);

                    lines.Insert(i, string.Format("#if defined({0}) && {0}", macro));
                    lines.Add("#endif //" + macro);
                    File.WriteAllLines(fn, lines);
                }

            if (AdditionalIncludeDirs != null)
                includeDirs.AddRange(AdditionalIncludeDirs.Split(';'));

            return new ToolFlags
            {
                PreprocessorMacros = (PreprocessorMacros == null) ? null : PreprocessorMacros.Split(';'),
                IncludeDirectories = includeDirs.ToArray()
            };
        }
Ejemplo n.º 7
0
 public Nrf5xRuleGenerator(BSPBuilder nordicBSPBuilder)
 {
     _Builder = nordicBSPBuilder;
 }