//---------------------------------------------- static void Main(string[] args) { if (args.Length < 1) { throw new Exception("Usage: EFM32.exe <Atmel SW package directory>"); } var bspBuilder = new AtmelBSPBuilder(new BSPDirectories(args[0], @"..\..\Output", @"..\..\rules")); var devices = BSPGeneratorTools.ReadMCUDevicesFromCommaDelimitedCSVFile(bspBuilder.Directories.RulesDir + @"\McuAtmel.csv", "Device Name", "Flash (kBytes)", "SRAM (kBytes)", "CPU", true); RemoveDuplicateMCU(ref devices); List <MCUFamilyBuilder> allFamilies = new List <MCUFamilyBuilder>(); foreach (var fn in Directory.GetFiles(bspBuilder.Directories.RulesDir + @"\Families", "*.xml")) { allFamilies.Add(new MCUFamilyBuilder(bspBuilder, XmlTools.LoadObject <FamilyDefinition>(fn))); } var rejects = BSPGeneratorTools.AssignMCUsToFamilies(devices, allFamilies); List <MCUFamily> familyDefinitions = new List <MCUFamily>(); List <MCU> mcuDefinitions = new List <MCU>(); List <EmbeddedFramework> frameworks = new List <EmbeddedFramework>(); List <MCUFamilyBuilder.CopiedSample> exampleDirs = new List <MCUFamilyBuilder.CopiedSample>(); CopyAddSourceFiles(bspBuilder.Directories.InputDir); bool noPeripheralRegisters = args.Contains("/noperiph"); List <KeyValuePair <string, string> > macroToHeaderMap = new List <KeyValuePair <string, string> >(); var commonPseudofamily = new MCUFamilyBuilder(bspBuilder, XmlTools.LoadObject <FamilyDefinition>(bspBuilder.Directories.RulesDir + @"\CommonFiles.xml")); //Embedded Frameworks var AddFrW = GenereteAddFrameWorks(bspBuilder.Directories, "ServicesFrimwork.txt"); commonPseudofamily.Definition.AdditionalFrameworks = commonPseudofamily.Definition.AdditionalFrameworks.Concat(AddFrW).ToArray(); AddFrW = GenereteAddFrameWorksDir(bspBuilder.Directories, "sam"); commonPseudofamily.Definition.AdditionalFrameworks = commonPseudofamily.Definition.AdditionalFrameworks.Concat(AddFrW).ToArray(); AddFrW = GenereteAddFrameWorksDir(bspBuilder.Directories, "sam0"); commonPseudofamily.Definition.AdditionalFrameworks = commonPseudofamily.Definition.AdditionalFrameworks.Concat(AddFrW).ToArray(); foreach (var fw in commonPseudofamily.GenerateFrameworkDefinitions()) { frameworks.Add(fw); } var flags = new ToolFlags(); List <string> projectFiles = new List <string>(); commonPseudofamily.CopyFamilyFiles(ref flags, projectFiles); foreach (var sample in commonPseudofamily.CopySamples()) { exampleDirs.Add(sample); } foreach (var fam in allFamilies) { var rejectedMCUs = fam.RemoveUnsupportedMCUs(true); if (rejectedMCUs.Length != 0) { Console.WriteLine("Unsupported {0} MCUs:", fam.Definition.Name); foreach (var mcu in rejectedMCUs) { Console.WriteLine("\t{0}", mcu.Name); } } fam.AttachStartupFiles(ParseStartupFiles(fam.Definition.StartupFileDir, fam)); var famObj = fam.GenerateFamilyObject(true); famObj.AdditionalSourceFiles = LoadedBSP.Combine(famObj.AdditionalSourceFiles, projectFiles.Where(f => !MCUFamilyBuilder.IsHeaderFile(f)).ToArray()); famObj.AdditionalHeaderFiles = LoadedBSP.Combine(famObj.AdditionalHeaderFiles, projectFiles.Where(f => MCUFamilyBuilder.IsHeaderFile(f)).ToArray()); famObj.AdditionalSystemVars = LoadedBSP.Combine(famObj.AdditionalSystemVars, commonPseudofamily.Definition.AdditionalSystemVars); famObj.CompilationFlags = famObj.CompilationFlags.Merge(flags); famObj.CompilationFlags.PreprocessorMacros = LoadedBSP.Combine(famObj.CompilationFlags.PreprocessorMacros, new string[] { "$$com.sysprogs.bspoptions.primary_memory$$_layout" }); familyDefinitions.Add(famObj); var memoryLayouts = fam.GenerateLinkerScripts(false); if (!noPeripheralRegisters) { fam.AttachPeripheralRegisters(ParsePeripheralRegisters(bspBuilder.Directories.OutputDir, fam)); } foreach (var mcu in fam.MCUs) { var mcuDef = mcu.GenerateDefinition(fam, bspBuilder, !noPeripheralRegisters); var layout = memoryLayouts[mcu.Name]; var ram = layout.Memories.First(m => m.Type == MemoryType.RAM); var flash = layout.Memories.First(m => m.Type == MemoryType.FLASH); mcuDef.RAMBase = ram.Start; mcuDef.RAMSize = (int)ram.Size; mcuDef.FLASHBase = flash.Start; mcuDef.FLASHSize = (int)flash.Size; mcuDefinitions.Add(mcuDef); } foreach (var fw in fam.GenerateFrameworkDefinitions()) { frameworks.Add(fw); } foreach (var sample in fam.CopySamples()) { exampleDirs.Add(sample); } } BoardSupportPackage bsp = new BoardSupportPackage { PackageID = "com.sysprogs.arm.atmel.sam-cortex", PackageDescription = "Atmel ARM Cortex Devices", GNUTargetID = "arm-eabi", GeneratedMakFileName = "atmel.mak", MCUFamilies = familyDefinitions.ToArray(), 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(), PackageVersion = "3.35.2" }; bspBuilder.Save(bsp, true); }
//---------------------------------------------- static void Main(string[] args) { if (args.Length < 1) throw new Exception("Usage: EFM32.exe <Atmel SW package directory>"); var bspBuilder = new AtmelBSPBuilder(new BSPDirectories(args[0], @"..\..\Output", @"..\..\rules")); var devices = BSPGeneratorTools.ReadMCUDevicesFromCommaDelimitedCSVFile(bspBuilder.Directories.RulesDir + @"\McuAtmel.csv", "Device Name", "Flash (kBytes)", "SRAM (kBytes)", "CPU", true); RemoveDuplicateMCU(ref devices); List<MCUFamilyBuilder> allFamilies = new List<MCUFamilyBuilder>(); foreach (var fn in Directory.GetFiles(bspBuilder.Directories.RulesDir + @"\Families", "*.xml")) allFamilies.Add(new MCUFamilyBuilder(bspBuilder, XmlTools.LoadObject<FamilyDefinition>(fn))); var rejects = BSPGeneratorTools.AssignMCUsToFamilies(devices, allFamilies); List<MCUFamily> familyDefinitions = new List<MCUFamily>(); List<MCU> mcuDefinitions = new List<MCU>(); List<EmbeddedFramework> frameworks = new List<EmbeddedFramework>(); List<MCUFamilyBuilder.CopiedSample> exampleDirs = new List<MCUFamilyBuilder.CopiedSample>(); CopyAddSourceFiles(bspBuilder.Directories.InputDir); bool noPeripheralRegisters = args.Contains("/noperiph"); List<KeyValuePair<string, string>> macroToHeaderMap = new List<KeyValuePair<string, string>>(); var commonPseudofamily = new MCUFamilyBuilder(bspBuilder, XmlTools.LoadObject<FamilyDefinition>(bspBuilder.Directories.RulesDir + @"\CommonFiles.xml")); //Embedded Frameworks var AddFrW = GenereteAddFrameWorks(bspBuilder.Directories, "ServicesFrimwork.txt"); commonPseudofamily.Definition.AdditionalFrameworks = commonPseudofamily.Definition.AdditionalFrameworks.Concat(AddFrW).ToArray(); AddFrW = GenereteAddFrameWorksDir(bspBuilder.Directories, "sam"); commonPseudofamily.Definition.AdditionalFrameworks = commonPseudofamily.Definition.AdditionalFrameworks.Concat(AddFrW).ToArray(); AddFrW =GenereteAddFrameWorksDir(bspBuilder.Directories, "sam0"); commonPseudofamily.Definition.AdditionalFrameworks = commonPseudofamily.Definition.AdditionalFrameworks.Concat(AddFrW).ToArray(); foreach (var fw in commonPseudofamily.GenerateFrameworkDefinitions()) frameworks.Add(fw); var flags = new ToolFlags(); List<string> projectFiles = new List<string>(); commonPseudofamily.CopyFamilyFiles(ref flags, projectFiles); foreach (var sample in commonPseudofamily.CopySamples()) exampleDirs.Add(sample); foreach (var fam in allFamilies) { var rejectedMCUs = fam.RemoveUnsupportedMCUs(true); if (rejectedMCUs.Length != 0) { Console.WriteLine("Unsupported {0} MCUs:", fam.Definition.Name); foreach (var mcu in rejectedMCUs) Console.WriteLine("\t{0}", mcu.Name); } fam.AttachStartupFiles(ParseStartupFiles(fam.Definition.StartupFileDir, fam)); var famObj = fam.GenerateFamilyObject(true); famObj.AdditionalSourceFiles = LoadedBSP.Combine(famObj.AdditionalSourceFiles, projectFiles.Where(f => !MCUFamilyBuilder.IsHeaderFile(f)).ToArray()); famObj.AdditionalHeaderFiles = LoadedBSP.Combine(famObj.AdditionalHeaderFiles, projectFiles.Where(f => MCUFamilyBuilder.IsHeaderFile(f)).ToArray()); famObj.AdditionalSystemVars = LoadedBSP.Combine(famObj.AdditionalSystemVars, commonPseudofamily.Definition.AdditionalSystemVars); famObj.CompilationFlags = famObj.CompilationFlags.Merge(flags); famObj.CompilationFlags.PreprocessorMacros = LoadedBSP.Combine(famObj.CompilationFlags.PreprocessorMacros, new string[] { "$$com.sysprogs.bspoptions.primary_memory$$_layout" }); familyDefinitions.Add(famObj); fam.GenerateLinkerScripts(false); if (!noPeripheralRegisters) fam.AttachPeripheralRegisters(ParsePeripheralRegisters(bspBuilder.Directories.OutputDir , fam)); foreach (var mcu in fam.MCUs) mcuDefinitions.Add(mcu.GenerateDefinition(fam, bspBuilder, !noPeripheralRegisters)); foreach (var fw in fam.GenerateFrameworkDefinitions()) frameworks.Add(fw); foreach (var sample in fam.CopySamples()) exampleDirs.Add(sample); } BoardSupportPackage bsp = new BoardSupportPackage { PackageID = "com.sysprogs.arm.atmel.sam-cortex", PackageDescription = "Atmel ARM Cortex Devices", GNUTargetID = "arm-eabi", GeneratedMakFileName = "atmel.mak", MCUFamilies = familyDefinitions.ToArray(), 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(), PackageVersion = "1.0" }; bspBuilder.Save(bsp, true); }