static void Main(string[] args) { if (args.Length < 1) { throw new Exception("Usage: rm57x.exe <RM57x generated HAL directory>"); } string DirSDK = args[0]; var bspBuilder = new RM57xBSPBuilder(new BSPDirectories(args[0], @"..\..\Output", @"..\..\rules")); bool noPeripheralRegisters = args.Contains("/noperiph"); bool noPack = args.Contains("/nopack"); MCUFamilyBuilder famBuilder = new MCUFamilyBuilder(bspBuilder, XmlTools.LoadObject <FamilyDefinition>(Path.Combine(bspBuilder.Directories.RulesDir, "families\\rm57x.xml"))); //string deviceDefinitionFile = @"DeviceDefinitions/CC_3220.xml"; foreach (var name in new[] { "RM57L843ZWT" }) { famBuilder.MCUs.Add(new MCUBuilder { Core = CortexCore.R5F, FlashSize = 4096 * 1024, RAMSize = 512 * 1024, Name = name, //MCUDefinitionFile = deviceDefinitionFile, StartupFile = null }); } List <EmbeddedFramework> frameworks = new List <EmbeddedFramework>(); List <MCUFamilyBuilder.CopiedSample> exampleDirs = new List <MCUFamilyBuilder.CopiedSample>(); MCUFamilyBuilder commonPseudofamily = new MCUFamilyBuilder(bspBuilder, XmlTools.LoadObject <FamilyDefinition>(bspBuilder.Directories.RulesDir + @"\CommonFiles.xml")); var famObj = famBuilder.GenerateFamilyObject(MCUFamilyBuilder.CoreSpecificFlags.All & ~MCUFamilyBuilder.CoreSpecificFlags.PrimaryMemory); List <string> projectFiles = new List <string>(); commonPseudofamily.CopyFamilyFiles(ref famObj.CompilationFlags, projectFiles); famObj.AdditionalSourceFiles = famObj.AdditionalSourceFiles.Concat(projectFiles).ToArray(); foreach (var fw in commonPseudofamily.GenerateFrameworkDefinitions()) { frameworks.Add(fw); } foreach (var sample in commonPseudofamily.CopySamples()) { exampleDirs.Add(sample); } if (!noPeripheralRegisters) { famBuilder.AttachPeripheralRegisters(ParsePeripheralRegisters(famBuilder.Definition.PrimaryHeaderDir)); } List <MCU> mcuDefinitions = new List <MCU>(); foreach (var mcuDef in famBuilder.MCUs) { var mcu = mcuDef.GenerateDefinition(famBuilder, bspBuilder, !noPeripheralRegisters, true); mcuDefinitions.Add(mcu); } BoardSupportPackage bsp = new BoardSupportPackage { PackageID = "com.sysprogs.arm.ti.rm57x", PackageDescription = "TI RM57Lx Devices", GNUTargetID = "arm-eabi", GeneratedMakFileName = "rm57x.mak", MCUFamilies = new[] { famObj }, SupportedMCUs = mcuDefinitions.ToArray(), Frameworks = frameworks.ToArray(), Examples = exampleDirs.Where(s => !s.IsTestProjectSample).Select(s => s.RelativePath).ToArray(), TestExamples = exampleDirs.Where(s => s.IsTestProjectSample).Select(s => s.RelativePath).ToArray(), FileConditions = bspBuilder.MatchedFileConditions.ToArray(), ConditionalFlags = commonPseudofamily.Definition.ConditionalFlags, PackageVersion = "1.0" }; bspBuilder.Save(bsp, !noPack); //StandaloneBSPValidator.Program.Main(new[] { "..\\..\\cc3220.validatejob", "f:\\bsptest" }); }
static void Main(string[] args) { if (args.Length < 1) { throw new Exception("Usage: rm57x.exe <RM57x generated HAL directory>"); } string DirSDK = args[0]; using (var bspBuilder = new RM57xBSPBuilder(new BSPDirectories(args[0], @"..\..\Output", @"..\..\rules", @"..\..\log"))) { var xml = new XmlDocument(); xml.Load(Path.Combine(bspBuilder.Directories.InputDir, "NonRTOS\\NonRTOS.hcg")); var deviceID = xml.DocumentElement.SelectSingleNode("DEVICE/device")?.InnerText ?? throw new Exception("Failed to extract the device ID"); var familyID = xml.DocumentElement.SelectSingleNode("DEVICE/family")?.InnerText ?? throw new Exception("Failed to extract the family ID"); CortexCore core; bool isBigEndian = false; bool isThumb = true; switch (deviceID) { case "RM57L843ZWT": core = CortexCore.R5; break; case "TMS570LS1224PGE": core = CortexCore.R4; isBigEndian = true; isThumb = false; break; default: throw new Exception($"Unknown ARM Cortex core for {deviceID}. Please update the logic above."); } bool noPeripheralRegisters = args.Contains("/noperiph"); bool noPack = args.Contains("/nopack"); var nonRTOSDir = Path.GetFullPath(Path.Combine(bspBuilder.Directories.InputDir, "NonRTOS")); var linkerScriptPath = Directory.GetFiles(nonRTOSDir, "*.ld", SearchOption.AllDirectories)[0]; MCUFamilyBuilder famBuilder = new MCUFamilyBuilder(bspBuilder, XmlTools.LoadObject <FamilyDefinition>(Path.Combine(bspBuilder.Directories.RulesDir, "families\\rm57x.xml"))); famBuilder.Definition.Name = familyID; if (isBigEndian) { famBuilder.Definition.CompilationFlags.COMMONFLAGS += " -mbig-endian -mbe32"; } //string deviceDefinitionFile = @"DeviceDefinitions/CC_3220.xml"; var memories = LinkerScriptTools.ScanLinkerScriptForMemories(linkerScriptPath); famBuilder.MCUs.Add(new MCUBuilder { Core = core, FPU = FPUType.DP, FlashSize = (int)memories.First(m => m.Name == "FLASH").Size, RAMSize = (int)memories.First(m => m.Name == "RAM").Size, Name = deviceID, //MCUDefinitionFile = deviceDefinitionFile, StartupFile = null }); List <EmbeddedFramework> frameworks = new List <EmbeddedFramework>(); List <MCUFamilyBuilder.CopiedSample> exampleDirs = new List <MCUFamilyBuilder.CopiedSample>(); MCUFamilyBuilder commonPseudofamily = new MCUFamilyBuilder(bspBuilder, XmlTools.LoadObject <FamilyDefinition>(bspBuilder.Directories.RulesDir + @"\CommonFiles.xml")); var famObj = famBuilder.GenerateFamilyObject(MCUFamilyBuilder.CoreSpecificFlags.All & ~MCUFamilyBuilder.CoreSpecificFlags.PrimaryMemory); List <string> projectFiles = new List <string>(); commonPseudofamily.CopyFamilyFiles(ref famObj.CompilationFlags, projectFiles); famObj.AdditionalSourceFiles = famObj.AdditionalSourceFiles.Concat(projectFiles).ToArray(); if (!Directory.Exists(Path.Combine(bspBuilder.Directories.InputDir, "FreeRTOS"))) { Console.WriteLine("Missing FreeRTOS directory. Skipping FreeRTOS framework and project sample..."); commonPseudofamily.Definition.AdditionalFrameworks = commonPseudofamily.Definition.AdditionalFrameworks.Where(f => !f.ID.Contains("freertos")).ToArray(); commonPseudofamily.Definition.SmartSamples = commonPseudofamily.Definition.SmartSamples.Where(f => f.EmbeddedSample.Name.IndexOf("freertos", StringComparison.InvariantCultureIgnoreCase) == -1).ToArray(); } foreach (var fw in commonPseudofamily.GenerateFrameworkDefinitions()) { frameworks.Add(fw); } foreach (var sample in commonPseudofamily.CopySamples()) { exampleDirs.Add(sample); } if (!noPeripheralRegisters) { famBuilder.AttachPeripheralRegisters(ParsePeripheralRegisters(famBuilder.Definition.PrimaryHeaderDir, deviceID)); } if (!isThumb) { famObj.CompilationFlags.COMMONFLAGS = famObj.CompilationFlags.COMMONFLAGS.Replace("-mthumb", "-marm"); } List <MCU> mcuDefinitions = new List <MCU>(); foreach (var mcuDef in famBuilder.MCUs) { var mcu = mcuDef.GenerateDefinition(famBuilder, bspBuilder, !noPeripheralRegisters, true); mcu.AdditionalSystemVars = (mcu.AdditionalSystemVars ?? new SysVarEntry[0]).Concat(new[] { new SysVarEntry { Key = "com.sysprogs.linker_script", Value = linkerScriptPath.Substring(nonRTOSDir.Length + 1).Replace('\\', '/') }, CreateHeaderFileVariable(nonRTOSDir, "common.h"), CreateHeaderFileVariable(nonRTOSDir, "gio.h"), CreateHeaderFileVariable(nonRTOSDir, "het.h"), }).ToArray(); mcuDefinitions.Add(mcu); } ApplyKnownPatches(bspBuilder.Directories.OutputDir); BoardSupportPackage bsp = new BoardSupportPackage { PackageID = "com.sysprogs.arm.ti." + deviceID, PackageDescription = $"TI {deviceID} Device", GNUTargetID = "arm-eabi", GeneratedMakFileName = familyID + ".mak", MCUFamilies = new[] { famObj }, SupportedMCUs = mcuDefinitions.ToArray(), Frameworks = frameworks.ToArray(), Examples = exampleDirs.Where(s => !s.IsTestProjectSample).Select(s => s.RelativePath).ToArray(), TestExamples = exampleDirs.Where(s => s.IsTestProjectSample).Select(s => s.RelativePath).ToArray(), FileConditions = bspBuilder.MatchedFileConditions.Values.ToArray(), ConditionalFlags = commonPseudofamily.Definition.ConditionalFlags, PackageVersion = "1.0" }; bspBuilder.Save(bsp, !noPack); //StandaloneBSPValidator.Program.Main(new[] { "..\\..\\cc3220.validatejob", "f:\\bsptest" }); } }