Convert( this C.ICxxOnlyCompilerSettings settings, Bam.Core.Module module, VSSolutionBuilder.VSSettingsGroup vsSettingsGroup, string condition) { if (settings.ExceptionHandler.HasValue) { System.Func <string> exceptionHandler = () => { switch (settings.ExceptionHandler.Value) { case C.Cxx.EExceptionHandler.Disabled: return("false"); case C.Cxx.EExceptionHandler.Asynchronous: return("Async"); case C.Cxx.EExceptionHandler.Synchronous: return("Sync"); case C.Cxx.EExceptionHandler.SyncWithCExternFunctions: return("SyncCThrow"); default: throw new Bam.Core.Exception("Unknown exception handler, {0}", settings.ExceptionHandler.Value.ToString()); } }; vsSettingsGroup.AddSetting("ExceptionHandling", exceptionHandler(), condition); } }
Convert( this C.ICxxOnlyCompilerSettings settings, Bam.Core.StringArray commandLine) { if (settings.ExceptionHandler.HasValue) { switch (settings.ExceptionHandler.Value) { case C.Cxx.EExceptionHandler.Disabled: // nothing break; case C.Cxx.EExceptionHandler.Asynchronous: commandLine.Add("-EHa"); break; case C.Cxx.EExceptionHandler.Synchronous: commandLine.Add("-EHsc"); break; case C.Cxx.EExceptionHandler.SyncWithCExternFunctions: commandLine.Add("-EHs"); break; default: throw new Bam.Core.Exception("Unrecognized exception handler option, {0}", settings.ExceptionHandler.Value.ToString()); } } }
public static void Defaults( this C.ICxxOnlyCompilerSettings settings, Bam.Core.Module module) { settings.ExceptionHandler = C.Cxx.EExceptionHandler.Disabled; settings.LanguageStandard = ELanguageStandard.Cxx98; settings.StandardLibrary = EStandardLibrary.NotSet; }
public static void Clone( this C.ICxxOnlyCompilerSettings settings, C.ICxxOnlyCompilerSettings other) { settings.ExceptionHandler = other.ExceptionHandler; settings.LanguageStandard = other.LanguageStandard; settings.StandardLibrary = other.StandardLibrary; }
Clone( this C.ICxxOnlyCompilerSettings settings, C.ICxxOnlyCompilerSettings other) { settings.ExceptionHandler = other.ExceptionHandler; settings.EnableRunTimeTypeInfo = other.EnableRunTimeTypeInfo; settings.LanguageStandard = other.LanguageStandard; settings.StandardLibrary = other.StandardLibrary; }
Intersect( this C.ICxxOnlyCompilerSettings shared, C.ICxxOnlyCompilerSettings other) { shared.ExceptionHandler = shared.ExceptionHandler.Intersect(other.ExceptionHandler); shared.EnableRunTimeTypeInfo = shared.EnableRunTimeTypeInfo.Intersect(other.EnableRunTimeTypeInfo); shared.LanguageStandard = shared.LanguageStandard.Intersect(other.LanguageStandard); shared.StandardLibrary = shared.StandardLibrary.Intersect(other.StandardLibrary); }
Defaults( this C.ICxxOnlyCompilerSettings settings, Bam.Core.Module module) { settings.ExceptionHandler = C.Cxx.EExceptionHandler.Disabled; settings.EnableRunTimeTypeInfo = true; settings.LanguageStandard = ELanguageStandard.Cxx98; settings.StandardLibrary = EStandardLibrary.NotSet; }
public static void Delta( this C.ICxxOnlyCompilerSettings delta, C.ICxxOnlyCompilerSettings lhs, C.ICxxOnlyCompilerSettings rhs) { delta.ExceptionHandler = (lhs.ExceptionHandler != rhs.ExceptionHandler) ? lhs.ExceptionHandler : null; delta.LanguageStandard = (lhs.LanguageStandard != rhs.LanguageStandard) ? lhs.LanguageStandard : null; delta.StandardLibrary = (lhs.StandardLibrary != rhs.StandardLibrary) ? lhs.StandardLibrary : null; }
Delta( this C.ICxxOnlyCompilerSettings delta, C.ICxxOnlyCompilerSettings lhs, C.ICxxOnlyCompilerSettings rhs) { delta.ExceptionHandler = lhs.ExceptionHandler.Complement(rhs.ExceptionHandler); delta.EnableRunTimeTypeInfo = lhs.EnableRunTimeTypeInfo.Complement(rhs.EnableRunTimeTypeInfo); delta.LanguageStandard = lhs.LanguageStandard.Complement(rhs.LanguageStandard); delta.StandardLibrary = lhs.StandardLibrary.Complement(rhs.StandardLibrary); }
Convert( this C.ICxxOnlyCompilerSettings settings, Bam.Core.StringArray commandLine) { if (settings.ExceptionHandler.HasValue) { switch (settings.ExceptionHandler.Value) { case C.Cxx.EExceptionHandler.Disabled: commandLine.Add("-fno-exceptions"); break; case C.Cxx.EExceptionHandler.Asynchronous: case C.Cxx.EExceptionHandler.Synchronous: commandLine.Add("-fexceptions"); break; default: throw new Bam.Core.Exception("Unrecognized exception handler option, {0}", settings.ExceptionHandler.Value.ToString()); } } if (settings.EnableRunTimeTypeInfo.HasValue) { if (settings.EnableRunTimeTypeInfo.Value) { commandLine.Add("-frtti"); } else { commandLine.Add("-fno-rtti"); } } if (settings.LanguageStandard.HasValue) { switch (settings.LanguageStandard.Value) { case C.Cxx.ELanguageStandard.Cxx98: commandLine.Add("-std=c++98"); break; case C.Cxx.ELanguageStandard.GnuCxx98: commandLine.Add("-std=gnu++98"); break; case C.Cxx.ELanguageStandard.Cxx11: commandLine.Add("-std=c++11"); break; default: throw new Bam.Core.Exception("Invalid C++ language standard, {0}", settings.LanguageStandard.Value.ToString()); } } }
public static void Intersect( this C.ICxxOnlyCompilerSettings shared, C.ICxxOnlyCompilerSettings other) { if (shared.ExceptionHandler != other.ExceptionHandler) { shared.ExceptionHandler = null; } if (shared.LanguageStandard != other.LanguageStandard) { shared.LanguageStandard = null; } if (shared.StandardLibrary != other.StandardLibrary) { shared.StandardLibrary = null; } }
Convert( this C.ICxxOnlyCompilerSettings settings, Bam.Core.StringArray commandLine) { if (settings.ExceptionHandler.HasValue) { switch (settings.ExceptionHandler.Value) { case C.Cxx.EExceptionHandler.Disabled: // nothing break; case C.Cxx.EExceptionHandler.Asynchronous: commandLine.Add("-EHa"); break; case C.Cxx.EExceptionHandler.Synchronous: commandLine.Add("-EHsc"); break; case C.Cxx.EExceptionHandler.SyncWithCExternFunctions: commandLine.Add("-EHs"); break; default: throw new Bam.Core.Exception("Unrecognized exception handler option, {0}", settings.ExceptionHandler.Value.ToString()); } } if (settings.EnableRunTimeTypeInfo.HasValue) { if (settings.EnableRunTimeTypeInfo.Value) { commandLine.Add("-GR"); } else { commandLine.Add("-GR-"); } } // CL automatically supports language standards // No different standard library }
Convert( this C.ICxxOnlyCompilerSettings settings, Bam.Core.Module module, VSSolutionBuilder.VSSettingsGroup vsSettingsGroup, string condition) { if (settings.ExceptionHandler.HasValue) { System.Func <string> exceptionHandler = () => { switch (settings.ExceptionHandler.Value) { case C.Cxx.EExceptionHandler.Disabled: return("false"); case C.Cxx.EExceptionHandler.Asynchronous: return("Async"); case C.Cxx.EExceptionHandler.Synchronous: return("Sync"); case C.Cxx.EExceptionHandler.SyncWithCExternFunctions: return("SyncCThrow"); default: throw new Bam.Core.Exception("Unknown exception handler, {0}", settings.ExceptionHandler.Value.ToString()); } }; vsSettingsGroup.AddSetting("ExceptionHandling", exceptionHandler(), condition); } if (settings.EnableRunTimeTypeInfo.HasValue) { vsSettingsGroup.AddSetting("RuntimeTypeInfo", settings.EnableRunTimeTypeInfo.Value, condition); } // CL automatically supports language standards // No different standard library }
Convert( this C.ICxxOnlyCompilerSettings settings, Bam.Core.Module module, XcodeBuilder.Configuration configuration) { if (settings.ExceptionHandler.HasValue) { switch (settings.ExceptionHandler.Value) { case C.Cxx.EExceptionHandler.Disabled: configuration["GCC_ENABLE_CPP_EXCEPTIONS"] = new XcodeBuilder.UniqueConfigurationValue("NO"); break; case C.Cxx.EExceptionHandler.Asynchronous: case C.Cxx.EExceptionHandler.Synchronous: configuration["GCC_ENABLE_CPP_EXCEPTIONS"] = new XcodeBuilder.UniqueConfigurationValue("YES"); break; default: throw new Bam.Core.Exception("Unrecognized exception handler option, {0}", settings.ExceptionHandler.Value.ToString()); } } if (settings.EnableRunTimeTypeInfo.HasValue) { configuration["GCC_ENABLE_CPP_RTTI"] = new XcodeBuilder.UniqueConfigurationValue(settings.EnableRunTimeTypeInfo.Value ? "YES" : "NO"); } if (settings.LanguageStandard.HasValue) { XcodeBuilder.UniqueConfigurationValue standard = null; switch (settings.LanguageStandard.Value) { case C.Cxx.ELanguageStandard.Cxx98: standard = new XcodeBuilder.UniqueConfigurationValue("c++98"); break; case C.Cxx.ELanguageStandard.GnuCxx98: standard = new XcodeBuilder.UniqueConfigurationValue("gnu++98"); break; case C.Cxx.ELanguageStandard.Cxx03: standard = new XcodeBuilder.UniqueConfigurationValue("c++03"); break; case C.Cxx.ELanguageStandard.GnuCxx03: throw new Bam.Core.Exception("Clang does not support the language standard gnu++03"); case C.Cxx.ELanguageStandard.Cxx11: standard = new XcodeBuilder.UniqueConfigurationValue("c++11"); break; case C.Cxx.ELanguageStandard.GnuCxx11: standard = new XcodeBuilder.UniqueConfigurationValue("gnu++11"); break; case C.Cxx.ELanguageStandard.Cxx14: standard = new XcodeBuilder.UniqueConfigurationValue("c++14"); break; case C.Cxx.ELanguageStandard.GnuCxx14: standard = new XcodeBuilder.UniqueConfigurationValue("gnu++14"); break; default: throw new Bam.Core.Exception("Invalid C++ language standard, {0}", settings.LanguageStandard.Value.ToString()); } configuration["CLANG_CXX_LANGUAGE_STANDARD"] = standard; } if (settings.StandardLibrary.HasValue) { switch (settings.StandardLibrary.Value) { case C.Cxx.EStandardLibrary.NotSet: break; case C.Cxx.EStandardLibrary.libstdcxx: configuration["CLANG_CXX_LIBRARY"] = new XcodeBuilder.UniqueConfigurationValue("libstdc++"); break; case C.Cxx.EStandardLibrary.libcxx: configuration["CLANG_CXX_LIBRARY"] = new XcodeBuilder.UniqueConfigurationValue("libc++"); break; default: throw new Bam.Core.Exception("Invalid C++ standard library, {0}", settings.StandardLibrary.Value.ToString()); } } }
Convert( this C.ICxxOnlyCompilerSettings settings, Bam.Core.StringArray commandLine) { if (settings.ExceptionHandler.HasValue) { switch (settings.ExceptionHandler.Value) { case C.Cxx.EExceptionHandler.Disabled: commandLine.Add("-fno-exceptions"); break; case C.Cxx.EExceptionHandler.Asynchronous: case C.Cxx.EExceptionHandler.Synchronous: commandLine.Add("-fexceptions"); break; default: throw new Bam.Core.Exception("Unrecognized exception handler option, {0}", settings.ExceptionHandler.Value.ToString()); } } if (settings.LanguageStandard.HasValue) { switch (settings.LanguageStandard.Value) { case C.Cxx.ELanguageStandard.Cxx98: commandLine.Add("-std=c++98"); break; case C.Cxx.ELanguageStandard.GnuCxx98: commandLine.Add("-std=gnu++98"); break; case C.Cxx.ELanguageStandard.Cxx11: commandLine.Add("-std=c++11"); break; default: throw new Bam.Core.Exception("Invalid C++ language standard, {0}", settings.LanguageStandard.Value.ToString()); } } if (settings.StandardLibrary.HasValue) { switch (settings.StandardLibrary.Value) { case C.Cxx.EStandardLibrary.NotSet: break; case C.Cxx.EStandardLibrary.libstdcxx: commandLine.Add("-stdlib=libstdc++"); break; case C.Cxx.EStandardLibrary.libcxx: commandLine.Add("-stdlib=libc++"); break; default: throw new Bam.Core.Exception("Invalid C++ standard library {0}", settings.StandardLibrary.Value.ToString()); } } }