internal ToolFlags GetToolFlags(Dictionary <string, string> systemDict, Dictionary <string, string> frameworkDict, IDictionary frameworkIDs) { var flags = new ToolFlags { CXXFLAGS = "-fno-exceptions -ffunction-sections -Os", LDFLAGS = "-Wl,-gc-sections -Wl,-Map," + MapFileName, CFLAGS = "-ffunction-sections -Os" }; if (DataSections) { flags.CXXFLAGS += " -fdata-sections"; flags.CFLAGS += " -fdata-sections"; } var mcuFlags = MCU.ExpandToolFlags(systemDict, null); flags = flags.Merge(mcuFlags); Dictionary <string, string> primaryDict = new Dictionary <string, string>(systemDict); foreach (var fwObj in _Frameworks) { if (fwObj.AdditionalSystemVars != null) { foreach (var sv in fwObj.AdditionalSystemVars) { primaryDict[sv.Key] = sv.Value; } } flags.IncludeDirectories = LoadedBSP.Combine(flags.IncludeDirectories, VariableHelper.ExpandVariables(fwObj.AdditionalIncludeDirs, primaryDict, frameworkDict)); flags.PreprocessorMacros = LoadedBSP.Combine(flags.PreprocessorMacros, VariableHelper.ExpandVariables(fwObj.AdditionalPreprocessorMacros, primaryDict, frameworkDict)?.Where(m => !string.IsNullOrEmpty(m))?.ToArray()); } if (MCU.BSP.BSP.ConditionalFlags != null) { foreach (var cf in MCU.BSP.BSP.ConditionalFlags) { if (cf.FlagCondition.IsTrue(primaryDict, frameworkDict, frameworkIDs)) { flags = flags.Merge(LoadedBSP.ConfiguredMCU.ExpandToolFlags(cf.Flags, primaryDict, frameworkDict)); } } } if (!string.IsNullOrEmpty(_LinkerScript)) { flags.LinkerScript = VariableHelper.ExpandVariables(_LinkerScript, primaryDict, frameworkDict); } return(flags); }