Convert( this VisualCCommon.ICommonCompilerSettings settings, Bam.Core.Module module, VSSolutionBuilder.VSSettingsGroup vsSettingsGroup, string condition) { if (settings.NoLogo.GetValueOrDefault(false)) { vsSettingsGroup.AddSetting("SuppressStartupBanner", settings.NoLogo.Value, condition); } if (settings.RuntimeLibrary.HasValue) { vsSettingsGroup.AddSetting("RuntimeLibrary", settings.RuntimeLibrary.Value.ToString(), condition); } if (settings.WarningLevel.HasValue) { if (EWarningLevel.Level0 == settings.WarningLevel.Value) { vsSettingsGroup.AddSetting("WarningLevel", "TurnOffAllWarnings", condition); } else { vsSettingsGroup.AddSetting("WarningLevel", System.String.Format("Level{0}", settings.WarningLevel.Value.ToString("D")), condition); } } if (settings.EnableLanguageExtensions.HasValue) { vsSettingsGroup.AddSetting("DisableLanguageExtensions", !settings.EnableLanguageExtensions.Value, condition); } }
Clone( this VisualCCommon.ICommonCompilerSettings settings, VisualCCommon.ICommonCompilerSettings other) { settings.NoLogo = other.NoLogo; settings.RuntimeLibrary = other.RuntimeLibrary; settings.WarningLevel = other.WarningLevel; }
Defaults( this VisualCCommon.ICommonCompilerSettings settings, Bam.Core.Module module) { settings.NoLogo = true; settings.RuntimeLibrary = ERuntimeLibrary.MultiThreadedDLL; settings.WarningLevel = EWarningLevel.Level1; }
Clone( this VisualCCommon.ICommonCompilerSettings settings, VisualCCommon.ICommonCompilerSettings other) { settings.NoLogo = other.NoLogo; settings.RuntimeLibrary = other.RuntimeLibrary; settings.WarningLevel = other.WarningLevel; settings.EnableLanguageExtensions = other.EnableLanguageExtensions; }
Intersect( this VisualCCommon.ICommonCompilerSettings shared, VisualCCommon.ICommonCompilerSettings other) { shared.NoLogo = shared.NoLogo.Intersect(other.NoLogo); shared.RuntimeLibrary = shared.RuntimeLibrary.Intersect(other.RuntimeLibrary); shared.WarningLevel = shared.WarningLevel.Intersect(other.WarningLevel); shared.EnableLanguageExtensions = shared.EnableLanguageExtensions.Intersect(other.EnableLanguageExtensions); }
Defaults( this VisualCCommon.ICommonCompilerSettings settings, Bam.Core.Module module) { settings.NoLogo = true; settings.RuntimeLibrary = ERuntimeLibrary.MultiThreadedDLL; settings.WarningLevel = EWarningLevel.Level1; settings.EnableLanguageExtensions = true; // only because Windows.h does not compile without this, even with WIN32_LEAN_AND_MEAN }
Delta( this VisualCCommon.ICommonCompilerSettings delta, VisualCCommon.ICommonCompilerSettings lhs, VisualCCommon.ICommonCompilerSettings rhs) { delta.NoLogo = (lhs.NoLogo != rhs.NoLogo) ? lhs.NoLogo : null; delta.RuntimeLibrary = (lhs.RuntimeLibrary != rhs.RuntimeLibrary) ? lhs.RuntimeLibrary : null; delta.WarningLevel = (lhs.WarningLevel != rhs.WarningLevel) ? lhs.WarningLevel : null; }
Delta( this VisualCCommon.ICommonCompilerSettings delta, VisualCCommon.ICommonCompilerSettings lhs, VisualCCommon.ICommonCompilerSettings rhs) { delta.NoLogo = lhs.NoLogo.Complement(rhs.NoLogo); delta.RuntimeLibrary = lhs.RuntimeLibrary.Complement(rhs.RuntimeLibrary); delta.WarningLevel = lhs.WarningLevel.Complement(rhs.WarningLevel); delta.EnableLanguageExtensions = lhs.EnableLanguageExtensions.Complement(rhs.EnableLanguageExtensions); }
Clone( this VisualCCommon.ICommonCompilerSettings settings, VisualCCommon.ICommonCompilerSettings other) { settings.NoLogo = other.NoLogo; settings.RuntimeLibrary = other.RuntimeLibrary; settings.WarningLevel = other.WarningLevel; settings.EnableLanguageExtensions = other.EnableLanguageExtensions; settings.Optimization = other.Optimization; settings.IncreaseObjectFileSectionCount = other.IncreaseObjectFileSectionCount; }
Intersect( this VisualCCommon.ICommonCompilerSettings shared, VisualCCommon.ICommonCompilerSettings other) { shared.NoLogo = shared.NoLogo.Intersect(other.NoLogo); shared.RuntimeLibrary = shared.RuntimeLibrary.Intersect(other.RuntimeLibrary); shared.WarningLevel = shared.WarningLevel.Intersect(other.WarningLevel); shared.EnableLanguageExtensions = shared.EnableLanguageExtensions.Intersect(other.EnableLanguageExtensions); shared.Optimization = shared.Optimization.Intersect(other.Optimization); shared.IncreaseObjectFileSectionCount = shared.IncreaseObjectFileSectionCount.Intersect(other.IncreaseObjectFileSectionCount); }
Defaults( this VisualCCommon.ICommonCompilerSettings settings, Bam.Core.Module module) { settings.NoLogo = true; settings.RuntimeLibrary = ERuntimeLibrary.MultiThreadedDLL; settings.WarningLevel = EWarningLevel.Level1; settings.EnableLanguageExtensions = true; // only because Windows.h does not compile without this, even with WIN32_LEAN_AND_MEAN settings.Optimization = null; // assume that the setting in C.ICommonCompilerSettings is sufficient settings.IncreaseObjectFileSectionCount = false; // don't use large section counts by default }
Delta( this VisualCCommon.ICommonCompilerSettings delta, VisualCCommon.ICommonCompilerSettings lhs, VisualCCommon.ICommonCompilerSettings rhs) { delta.NoLogo = lhs.NoLogo.Complement(rhs.NoLogo); delta.RuntimeLibrary = lhs.RuntimeLibrary.Complement(rhs.RuntimeLibrary); delta.WarningLevel = lhs.WarningLevel.Complement(rhs.WarningLevel); delta.EnableLanguageExtensions = lhs.EnableLanguageExtensions.Complement(rhs.EnableLanguageExtensions); delta.Optimization = lhs.Optimization.Complement(rhs.Optimization); delta.IncreaseObjectFileSectionCount = lhs.IncreaseObjectFileSectionCount.Complement(rhs.IncreaseObjectFileSectionCount); }
Convert( this VisualCCommon.ICommonCompilerSettings settings, Bam.Core.StringArray commandLine) { if (settings.NoLogo.HasValue) { if (settings.NoLogo.Value) { commandLine.Add("-nologo"); } } if (settings.RuntimeLibrary.HasValue) { switch (settings.RuntimeLibrary.Value) { case ERuntimeLibrary.MultiThreaded: commandLine.Add("-MT"); break; case ERuntimeLibrary.MultiThreadedDebug: commandLine.Add("-MTd"); break; case ERuntimeLibrary.MultiThreadedDebugDLL: commandLine.Add("-MDd"); break; case ERuntimeLibrary.MultiThreadedDLL: commandLine.Add("-MD"); break; default: throw new Bam.Core.Exception("Unknown runtime library, {0}", settings.RuntimeLibrary.Value.ToString()); } } if (settings.WarningLevel.HasValue) { commandLine.Add(System.String.Format("-W{0}", settings.WarningLevel.Value.ToString("D"))); } if (settings.EnableLanguageExtensions.HasValue) { if (!settings.EnableLanguageExtensions.Value) { commandLine.Add("-Za"); } } }
Intersect( this VisualCCommon.ICommonCompilerSettings shared, VisualCCommon.ICommonCompilerSettings other) { if (shared.NoLogo != other.NoLogo) { shared.NoLogo = null; } if (shared.RuntimeLibrary != other.RuntimeLibrary) { shared.RuntimeLibrary = null; } if (shared.WarningLevel != other.WarningLevel) { shared.WarningLevel = null; } }
Convert( this VisualCCommon.ICommonCompilerSettings settings, Bam.Core.Module module, VSSolutionBuilder.VSSettingsGroup vsSettingsGroup, string condition) { if (settings.NoLogo.GetValueOrDefault(false)) { vsSettingsGroup.AddSetting("SuppressStartupBanner", settings.NoLogo.Value, condition); } if (settings.RuntimeLibrary.HasValue) { vsSettingsGroup.AddSetting("RuntimeLibrary", settings.RuntimeLibrary.Value.ToString(), condition); } if (settings.WarningLevel.HasValue) { if (EWarningLevel.Level0 == settings.WarningLevel.Value) { vsSettingsGroup.AddSetting("WarningLevel", "TurnOffAllWarnings", condition); } else { vsSettingsGroup.AddSetting("WarningLevel", System.String.Format("Level{0}", settings.WarningLevel.Value.ToString("D")), condition); } } if (settings.EnableLanguageExtensions.HasValue) { vsSettingsGroup.AddSetting("DisableLanguageExtensions", !settings.EnableLanguageExtensions.Value, condition); } if (settings.Optimization.HasValue) { var common_optimization = (settings as C.ICommonCompilerSettings).Optimization; if (common_optimization.HasValue && common_optimization.Value != C.EOptimization.Custom) { throw new Bam.Core.Exception("Compiler specific optimizations can only be set when the common optimization is C.EOptimization.Custom"); } System.Func <string> optimization = () => { switch (settings.Optimization.Value) { case EOptimization.Full: return("Full"); default: throw new Bam.Core.Exception("Unknown compiler optimization type, {0}", settings.Optimization.Value.ToString()); } }; vsSettingsGroup.AddSetting("Optimization", optimization(), condition); } if (settings.IncreaseObjectFileSectionCount.HasValue) { if (settings.IncreaseObjectFileSectionCount.Value) { vsSettingsGroup.AddSetting("AdditionalOptions", "-bigobj", condition); } } }
Convert( this VisualCCommon.ICommonCompilerSettings settings, Bam.Core.StringArray commandLine) { if (settings.NoLogo.HasValue) { if (settings.NoLogo.Value) { commandLine.Add("-nologo"); } } if (settings.RuntimeLibrary.HasValue) { switch (settings.RuntimeLibrary.Value) { case ERuntimeLibrary.MultiThreaded: commandLine.Add("-MT"); break; case ERuntimeLibrary.MultiThreadedDebug: commandLine.Add("-MTd"); break; case ERuntimeLibrary.MultiThreadedDebugDLL: commandLine.Add("-MDd"); break; case ERuntimeLibrary.MultiThreadedDLL: commandLine.Add("-MD"); break; default: throw new Bam.Core.Exception("Unknown runtime library, {0}", settings.RuntimeLibrary.Value.ToString()); } } if (settings.WarningLevel.HasValue) { commandLine.Add(System.String.Format("-W{0}", settings.WarningLevel.Value.ToString("D"))); } if (settings.EnableLanguageExtensions.HasValue) { if (!settings.EnableLanguageExtensions.Value) { commandLine.Add("-Za"); } } if (settings.Optimization.HasValue) { var common_optimization = (settings as C.ICommonCompilerSettings).Optimization; if (common_optimization.HasValue && common_optimization.Value != C.EOptimization.Custom) { throw new Bam.Core.Exception("Compiler specific optimizations can only be set when the common optimization is C.EOptimization.Custom"); } switch (settings.Optimization.Value) { case EOptimization.Full: commandLine.Add("-Ox"); break; default: throw new Bam.Core.Exception("Unknown compiler optimization, {0}", settings.Optimization.Value.ToString()); } } if (settings.IncreaseObjectFileSectionCount.HasValue) { if (settings.IncreaseObjectFileSectionCount.Value) { commandLine.Add("-bigobj"); } } }