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);
            }
        }
예제 #2
0
        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;
     }
 }
예제 #12
0
        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
        }
예제 #13
0
        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());
                }
            }
        }