Example #1
0
        public static void AddFPModeProperty(CoreSpecificFlags flagsToDefine, MCUFamily family)
        {
            if (family.ConfigurableProperties == null)
            {
                family.ConfigurableProperties = new PropertyList {
                    PropertyGroups = new List <PropertyGroup> {
                        new PropertyGroup()
                    }
                }
            }
            ;
            family.ConfigurableProperties.PropertyGroups[0].Properties.Add(
                new PropertyEntry.Enumerated
            {
                Name           = "Floating point support",
                UniqueID       = "com.sysprogs.bspoptions.arm.floatmode",
                SuggestionList = new PropertyEntry.Enumerated.Suggestion[]
                {
                    new PropertyEntry.Enumerated.Suggestion {
                        InternalValue = "-mfloat-abi=soft", UserFriendlyName = "Software"
                    },
                    new PropertyEntry.Enumerated.Suggestion {
                        InternalValue = "-mfloat-abi=hard", UserFriendlyName = "Hardware"
                    },
                    new PropertyEntry.Enumerated.Suggestion {
                        InternalValue = "", UserFriendlyName = "Unspecified"
                    },
                },
                DefaultEntryIndex = ((flagsToDefine & CoreSpecificFlags.DefaultHardFloat) == CoreSpecificFlags.DefaultHardFloat) ? 1 : 0,
            });

            family.CompilationFlags.COMMONFLAGS += " $$com.sysprogs.bspoptions.arm.floatmode$$";
        }
Example #2
0
        public MCUFamily GenerateFamilyObject(CoreSpecificFlags flagsToGenerate)
        {
            var family = new MCUFamily {
                ID = Definition.Name
            };

            if (!Definition.HasMixedCores)
            {
                if (MCUs.Count == 0)
                {
                    throw new Exception("No MCUs found for " + Definition.Name);
                }

                var core = MCUs[0].Core;

                foreach (var mcu in MCUs)
                {
                    if (mcu.Core != core)
                    {
                        throw new Exception("Different MCUs within " + Definition.Name + " have different core types");
                    }
                }

                AddCoreSpecificFlags(flagsToGenerate, family, core);
            }

            family.CompilationFlags = family.CompilationFlags.Merge(Definition.CompilationFlags);

            List <string> projectFiles = new List <string>();

            CopyFamilyFiles(ref family.CompilationFlags, projectFiles);

            family.AdditionalSourceFiles = projectFiles.Where(f => !IsHeaderFile(f)).ToArray();
            family.AdditionalHeaderFiles = projectFiles.Where(f => IsHeaderFile(f)).ToArray();

            family.AdditionalSystemVars = LoadedBSP.Combine(family.AdditionalSystemVars, Definition.AdditionalSystemVars);

            if (Definition.ConfigurableProperties != null)
            {
                if (family.ConfigurableProperties == null)
                {
                    family.ConfigurableProperties = new PropertyList();
                }

                family.ConfigurableProperties.Import(Definition.ConfigurableProperties);
            }

            return(family);
        }
Example #3
0
        public static void AddCoreSpecificFlags(CoreSpecificFlags flagsToDefine, MCUFamily family, string core)
        {
            CortexCore translatedCore = core switch {
                "cm0plus" => CortexCore.M0Plus,
                "cm0" => CortexCore.M0,
                "cm3" => CortexCore.M3,
                "cm33" => CortexCore.M33_FPU,
                "cm33_nodsp" => CortexCore.M33,
                "cm4" => CortexCore.M4,
                "cm7" => CortexCore.M7,
                _ => CortexCore.Invalid
            };

            AddCoreSpecificFlags(flagsToDefine, family, translatedCore);
        }
    }
Example #4
0
        internal static void AddCoreSpecificFlags(CoreSpecificFlags flagsToDefine, MCUFamily family, CortexCore core)
        {
            string coreName = null;

            switch (core)
            {
            case CortexCore.M0:
                family.CompilationFlags.COMMONFLAGS        = "-mcpu=cortex-m0 -mthumb";
                family.CompilationFlags.PreprocessorMacros = new string[] { "ARM_MATH_CM0" };
                coreName = "M0";
                break;

            case CortexCore.M0Plus:
                family.CompilationFlags.COMMONFLAGS        = "-mcpu=cortex-m0plus -mthumb";
                family.CompilationFlags.PreprocessorMacros = new string[] { "ARM_MATH_CM0PLUS" };
                coreName = "M0";
                break;

            case CortexCore.M3:
                family.CompilationFlags.COMMONFLAGS        = "-mcpu=cortex-m3 -mthumb";
                family.CompilationFlags.PreprocessorMacros = new string[] { "ARM_MATH_CM3" };
                coreName = "M3";
                break;

            case CortexCore.M4:
                family.CompilationFlags.COMMONFLAGS        = "-mcpu=cortex-m4 -mthumb";
                family.CompilationFlags.PreprocessorMacros = new string[] { "ARM_MATH_CM4" };
                family.CompilationFlags.ASFLAGS            = "-mfpu=fpv4-sp-d16";
                coreName = "M4";
                break;

            case CortexCore.M7:
                family.CompilationFlags.COMMONFLAGS        = "-mcpu=cortex-m7 -mthumb";
                family.CompilationFlags.PreprocessorMacros = new string[] { "ARM_MATH_CM7" };
                coreName = "M7";
                break;

            default:
                throw new Exception("Unsupported core type");
            }


            if ((flagsToDefine & CoreSpecificFlags.PrimaryMemory) == CoreSpecificFlags.PrimaryMemory)
            {
                if (core == CortexCore.M0)
                {
                    family.AdditionalSystemVars = new SysVarEntry[] { new SysVarEntry {
                                                                          Key = PrimaryMemoryOptionName, Value = "flash"
                                                                      } }
                }
                ;
                else
                {
                    family.ConfigurableProperties = new PropertyList
                    {
                        PropertyGroups = new List <PropertyGroup>
                        {
                            new PropertyGroup
                            {
                                Properties = new List <PropertyEntry>
                                {
                                    new PropertyEntry.Enumerated
                                    {
                                        Name           = "Execute from",
                                        UniqueID       = PrimaryMemoryOptionName,
                                        SuggestionList = new PropertyEntry.Enumerated.Suggestion[]
                                        {
                                            new PropertyEntry.Enumerated.Suggestion {
                                                InternalValue = "flash", UserFriendlyName = "FLASH"
                                            },
                                            new PropertyEntry.Enumerated.Suggestion {
                                                InternalValue = "sram", UserFriendlyName = "SRAM"
                                            },
                                        }
                                    }
                                }
                            }
                        }
                    };
                }
            }

            if ((flagsToDefine & CoreSpecificFlags.FPU) == CoreSpecificFlags.FPU)
            {
                if (core == CortexCore.M4 || core == CortexCore.M7)
                {
                    if (family.ConfigurableProperties == null)
                    {
                        family.ConfigurableProperties = new PropertyList {
                            PropertyGroups = new List <PropertyGroup> {
                                new PropertyGroup()
                            }
                        }
                    }
                    ;
                    family.ConfigurableProperties.PropertyGroups[0].Properties.Add(
                        new PropertyEntry.Enumerated
                    {
                        Name           = "Floating point support",
                        UniqueID       = "com.sysprogs.bspoptions.arm.floatmode",
                        SuggestionList = new PropertyEntry.Enumerated.Suggestion[]
                        {
                            new PropertyEntry.Enumerated.Suggestion {
                                InternalValue = "-mfloat-abi=soft", UserFriendlyName = "Software"
                            },
                            new PropertyEntry.Enumerated.Suggestion {
                                InternalValue = "-mfloat-abi=hard", UserFriendlyName = "Hardware"
                            },
                            new PropertyEntry.Enumerated.Suggestion {
                                InternalValue = "", UserFriendlyName = "Unspecified"
                            },
                        }
                    });

                    family.CompilationFlags.COMMONFLAGS += " $$com.sysprogs.bspoptions.arm.floatmode$$";
                }
            }

            if (coreName != null)
            {
                family.AdditionalSystemVars = LoadedBSP.Combine(family.AdditionalSystemVars, new SysVarEntry[] { new SysVarEntry {
                                                                                                                     Key = "com.sysprogs.bspoptions.arm.core", Value = coreName
                                                                                                                 } });
            }
        }
Example #5
0
 public override MCUFamily GenerateFamilyObject(CoreSpecificFlags flagsToGenerate, bool allowExcludingStartupFiles = false)
 {
     //STM32MP1 devices use a predefined linker script, so we cannot override the primary memory.
     return(base.GenerateFamilyObject(flagsToGenerate & ~CoreSpecificFlags.PrimaryMemory, allowExcludingStartupFiles));
 }
Example #6
0
        public MCUFamily GenerateFamilyObject(CoreSpecificFlags flagsToGenerate, bool allowExcludingStartupFiles = false)
        {
            var family = new MCUFamily {
                ID = Definition.Name
            };

            if (!Definition.HasMixedCores)
            {
                if (MCUs.Count == 0)
                {
                    throw new Exception("No MCUs found for " + Definition.Name);
                }

                var core = MCUs[0].Core;

                foreach (var mcu in MCUs)
                {
                    if (mcu.Core != core)
                    {
                        throw new Exception("Different MCUs within " + Definition.Name + " have different core types");
                    }
                }

                AddCoreSpecificFlags(flagsToGenerate, family, core);
            }

            family.CompilationFlags = family.CompilationFlags.Merge(Definition.CompilationFlags);

            List <string> projectFiles = new List <string>();

            CopyFamilyFiles(ref family.CompilationFlags, projectFiles);

            family.AdditionalSourceFiles = projectFiles.Where(f => !IsHeaderFile(f)).ToArray();
            family.AdditionalHeaderFiles = projectFiles.Where(f => IsHeaderFile(f)).ToArray();

            family.AdditionalSystemVars = LoadedBSP.Combine(family.AdditionalSystemVars, Definition.AdditionalSystemVars);

            if (Definition.ConfigurableProperties != null || allowExcludingStartupFiles)
            {
                if (family.ConfigurableProperties == null)
                {
                    family.ConfigurableProperties = new PropertyList();
                }

                if (Definition.ConfigurableProperties != null)
                {
                    family.ConfigurableProperties.Import(Definition.ConfigurableProperties);
                }

                if (allowExcludingStartupFiles && MCUs != null)
                {
                    family.ConfigurableProperties.Import(new PropertyList {
                        PropertyGroups = new List <PropertyGroup>()
                        {
                            new PropertyGroup
                            {
                                Properties = new List <PropertyEntry>
                                {
                                    new PropertyEntry.Boolean
                                    {
                                        DefaultValue = false,
                                        ValueForTrue = "1",
                                        Name         = "Exclude the startup file from project",
                                        UniqueID     = IgnoreStartupFileProperty,
                                    }
                                }
                            }
                        }
                    });

                    foreach (var mcu in MCUs)
                    {
                        if (mcu.StartupFile != null)
                        {
                            BSP.MatchedFileConditions.Add(new FileCondition {
                                FilePath = mcu.StartupFile, ConditionToInclude = new Condition.Not {
                                    Argument = new Condition.Equals {
                                        Expression = $"$${IgnoreStartupFileProperty}$$", ExpectedValue = "1"
                                    }
                                }
                            });
                        }
                    }
                }
            }


            return(family);
        }
Example #7
0
        internal static void AddCoreSpecificFlags(CoreSpecificFlags flagsToDefine, MCUFamily family, CortexCore core)
        {
            //WARNING: If the proper

            string coreName = null, freertosPort = null;

            switch (core)
            {
            case CortexCore.M0:
                family.CompilationFlags.COMMONFLAGS        = "-mcpu=cortex-m0 -mthumb";
                family.CompilationFlags.PreprocessorMacros = new string[] { "ARM_MATH_CM0" };
                freertosPort = "ARM_CM0";
                coreName     = "M0";
                break;

            case CortexCore.M0Plus:
                family.CompilationFlags.COMMONFLAGS        = "-mcpu=cortex-m0plus -mthumb";
                family.CompilationFlags.PreprocessorMacros = new string[] { "ARM_MATH_CM0PLUS" };
                freertosPort = "ARM_CM0";
                coreName     = "M0";
                break;

            case CortexCore.M3:
                family.CompilationFlags.COMMONFLAGS        = "-mcpu=cortex-m3 -mthumb";
                family.CompilationFlags.PreprocessorMacros = new string[] { "ARM_MATH_CM3" };
                coreName     = "M3";
                freertosPort = "ARM_CM3";
                break;

            case CortexCore.M33:
                family.CompilationFlags.COMMONFLAGS        = "-mcpu=cortex-m33 -mthumb";
                family.CompilationFlags.PreprocessorMacros = new string[] { "ARM_MATH_CM33" };
                coreName     = "M33";
                freertosPort = "ARM_CM33_NTZ/non_secure";
                break;

            case CortexCore.M33_FPU:
                family.CompilationFlags.COMMONFLAGS        = "-mcpu=cortex-m33 -mthumb -mfpu=fpv5-sp-d16";
                family.CompilationFlags.PreprocessorMacros = new string[] { "ARM_MATH_CM33" };
                coreName     = "M33";
                freertosPort = "ARM_CM33_NTZ/non_secure";
                break;

            case CortexCore.M4:
                family.CompilationFlags.COMMONFLAGS        = "-mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16";
                family.CompilationFlags.PreprocessorMacros = new string[] { "ARM_MATH_CM4" };
                freertosPort = "ARM_CM4F";
                coreName     = "M4";
                break;

            case CortexCore.M4_NOFPU:
                family.CompilationFlags.COMMONFLAGS        = "-mcpu=cortex-m4 -mthumb";
                family.CompilationFlags.PreprocessorMacros = new string[] { "ARM_MATH_CM4" };
                coreName     = "M4";
                freertosPort = "ARM_CM3";
                break;

            case CortexCore.M7:
                family.CompilationFlags.COMMONFLAGS        = "-mcpu=cortex-m7 -mthumb -mfpu=fpv4-sp-d16";
                family.CompilationFlags.PreprocessorMacros = new string[] { "ARM_MATH_CM7" };
                coreName     = "M7";
                freertosPort = "ARM_CM7/r0p1";
                break;

            case CortexCore.R5F:
                family.CompilationFlags.COMMONFLAGS        = "-mcpu=cortex-r5 -mfpu=vfpv3-d16 -mthumb";
                family.CompilationFlags.PreprocessorMacros = new string[] { "ARM_MATH_CR5" };
                break;

            default:
                return;
            }

            if ((flagsToDefine & CoreSpecificFlags.FPU) == CoreSpecificFlags.FPU)
            {
                if (core == CortexCore.M4 || core == CortexCore.M7 || core == CortexCore.R5F || core == CortexCore.M33_FPU)
                {
                    AddFPModeProperty(flagsToDefine, family);
                }
            }

            List <SysVarEntry> vars = new List <SysVarEntry>();

            if (coreName != null)
            {
                vars.Add(new SysVarEntry {
                    Key = "com.sysprogs.bspoptions.arm.core", Value = coreName
                });
            }
            if (freertosPort != null)
            {
                vars.Add(new SysVarEntry {
                    Key = "com.sysprogs.freertos.default_port", Value = freertosPort
                });
            }

            if (vars.Count > 0)
            {
                family.AdditionalSystemVars = LoadedBSP.Combine(family.AdditionalSystemVars, vars.ToArray());
            }
        }