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);
}