SystemIncludePathsCommandLineProcessor(
            object sender,
            Bam.Core.StringArray commandLineBuilder,
            Bam.Core.Option option,
            Bam.Core.Target target)
        {
            var optionCollection = sender as C.ICCompilerOptions;

            if (!optionCollection.IgnoreStandardIncludePaths)
            {
                Bam.Core.Log.Full("System include paths not explicitly added to the build");
                return;
            }
            var compilerTool       = target.Toolset.Tool(typeof(C.ICompilerTool)) as C.ICompilerTool;
            var switchPrefix       = compilerTool.IncludePathCompilerSwitches[0];
            var includePathsOption = option as Bam.Core.ReferenceTypeOption <Bam.Core.DirectoryCollection>;

            foreach (string includePath in includePathsOption.Value)
            {
                if (includePath.Contains(" "))
                {
                    commandLineBuilder.Add(System.String.Format("{0}\"{1}\"", switchPrefix, includePath));
                }
                else
                {
                    commandLineBuilder.Add(System.String.Format("{0}{1}", switchPrefix, includePath));
                }
            }
        }
        TargetLanguageCommandLineProcessor(
            object sender,
            Bam.Core.StringArray commandLineBuilder,
            Bam.Core.Option option,
            Bam.Core.Target target)
        {
            var targetLanguageOption = option as Bam.Core.ValueTypeOption <C.ETargetLanguage>;

            switch (targetLanguageOption.Value)
            {
            case C.ETargetLanguage.Default:
                // do nothing
                break;

            case C.ETargetLanguage.C:
                commandLineBuilder.Add("-x c");
                break;

            case C.ETargetLanguage.Cxx:
                commandLineBuilder.Add("-x c++");
                break;

            default:
                throw new Bam.Core.Exception("Unrecognized target language option");
            }
        }
        OptimizationCommandLineProcessor(
            object sender,
            Bam.Core.StringArray commandLineBuilder,
            Bam.Core.Option option,
            Bam.Core.Target target)
        {
            var optimizationOption = option as Bam.Core.ValueTypeOption <C.EOptimization>;

            switch (optimizationOption.Value)
            {
            case C.EOptimization.Off:
                commandLineBuilder.Add("-O0");
                break;

            case C.EOptimization.Size:
                commandLineBuilder.Add("-Os");
                break;

            case C.EOptimization.Speed:
                commandLineBuilder.Add("-O1");
                break;

            case C.EOptimization.Full:
                commandLineBuilder.Add("-O3");
                break;

            case C.EOptimization.Custom:
                // do nothing
                break;

            default:
                throw new Bam.Core.Exception("Unrecognized optimization option");
            }
        }
Пример #4
0
        VisibilityCommandLineProcessor(
            object sender,
            Bam.Core.StringArray commandLineBuilder,
            Bam.Core.Option option,
            Bam.Core.Target target)
        {
            var enumOption = option as Bam.Core.ValueTypeOption <EVisibility>;

            switch (enumOption.Value)
            {
            case EVisibility.Default:
                commandLineBuilder.Add("-fvisibility=default");
                break;

            case EVisibility.Hidden:
                commandLineBuilder.Add("-fvisibility=hidden");
                break;

            case EVisibility.Internal:
                commandLineBuilder.Add("-fvisibility=internal");
                break;

            case EVisibility.Protected:
                commandLineBuilder.Add("-fvisibility=protected");
                break;

            default:
                throw new Bam.Core.Exception("Unrecognized visibility option");
            }
        }
 ExceptionHandlerCommandLineProcessor(
     object sender,
     Bam.Core.StringArray commandLineBuilder,
     Bam.Core.Option option,
     Bam.Core.Target target)
 {
 }
 LanguageStandardCommandLineProcessor(
     object sender,
     Bam.Core.StringArray commandLineBuilder,
     Bam.Core.Option option,
     Bam.Core.Target target)
 {
 }
        OutputTypeCommandLineProcessor(
            object sender,
            Bam.Core.StringArray commandLineBuilder,
            Bam.Core.Option option,
            Bam.Core.Target target)
        {
            var options    = sender as CCompilerOptionCollection;
            var enumOption = option as Bam.Core.ValueTypeOption <C.ECompilerOutput>;

            switch (enumOption.Value)
            {
            case C.ECompilerOutput.CompileOnly:
            {
                commandLineBuilder.Add("-c");
                var outputPath = options.GetModuleLocation(C.ObjectFile.OutputFile).GetSinglePath();
                // TODO: isn't there an option on the tool for the flag?
                commandLineBuilder.Add(System.String.Format("-o {0}", outputPath));
            }
            break;

            case C.ECompilerOutput.Preprocess:
            {
                commandLineBuilder.Add("-E");
                var outputPath = options.GetModuleLocation(C.ObjectFile.OutputFile).GetSinglePath();
                // TODO: isn't there an option on the tool for the flag?
                commandLineBuilder.Add(System.String.Format("-o {0}", outputPath));
            }
            break;

            default:
                throw new Bam.Core.Exception("Unrecognized option for C.ECompilerOutput");
            }
        }
 ExceptionHandlerCommandLineProcessor(
     object sender,
     Bam.Core.StringArray commandLineBuilder,
     Bam.Core.Option option,
     Bam.Core.Target target)
 {
     ComposerXECommon.CxxCompilerOptionCollection.ExceptionHandlerCommandLineProcessor(sender, commandLineBuilder, option, target);
 }
        CustomOptimizationCommandLineProcessor(
            object sender,
            Bam.Core.StringArray commandLineBuilder,
            Bam.Core.Option option,
            Bam.Core.Target target)
        {
            var customOptimizationOption = option as Bam.Core.ReferenceTypeOption <string>;

            commandLineBuilder.Add(customOptimizationOption.Value);
        }
        DefinesCommandLineProcessor(
            object sender,
            Bam.Core.StringArray commandLineBuilder,
            Bam.Core.Option option,
            Bam.Core.Target target)
        {
            var definesOption = option as Bam.Core.ReferenceTypeOption <C.DefineCollection>;

            foreach (var define in definesOption.Value)
            {
                commandLineBuilder.Add(System.String.Format("-D{0}", define));
            }
        }
        StrictDiagnosticsCommandLineProcessor(
            object sender,
            Bam.Core.StringArray commandLineBuilder,
            Bam.Core.Option option,
            Bam.Core.Target target)
        {
            var boolOption = option as Bam.Core.ValueTypeOption <bool>;

            if (boolOption.Value)
            {
                commandLineBuilder.Add("-Wcheck");
            }
        }
        DisableWarningsCommandLineProcessor(
            object sender,
            Bam.Core.StringArray commandLineBuilder,
            Bam.Core.Option option,
            Bam.Core.Target target)
        {
            var disableWarningsOption = option as Bam.Core.ReferenceTypeOption <Bam.Core.StringArray>;

            foreach (var warning in disableWarningsOption.Value)
            {
                commandLineBuilder.Add(System.String.Format("-Wno-{0}", warning));
            }
        }
        WarningsAsErrorsCommandLineProcessor(
            object sender,
            Bam.Core.StringArray commandLineBuilder,
            Bam.Core.Option option,
            Bam.Core.Target target)
        {
            var warningsAsErrorsOption = option as Bam.Core.ValueTypeOption <bool>;

            if (warningsAsErrorsOption.Value)
            {
                commandLineBuilder.Add("-Werror");
            }
        }
        PositionIndependentCodeCommandLineProcessor(
            object sender,
            Bam.Core.StringArray commandLineBuilder,
            Bam.Core.Option option,
            Bam.Core.Target target)
        {
            var boolOption = option as Bam.Core.ValueTypeOption <bool>;

            if (boolOption.Value)
            {
                commandLineBuilder.Add("-fPIC");
            }
        }
        EnableRemarksCommandLineProcessor(
            object sender,
            Bam.Core.StringArray commandLineBuilder,
            Bam.Core.Option option,
            Bam.Core.Target target)
        {
            var boolOption = option as Bam.Core.ValueTypeOption <bool>;

            if (boolOption.Value)
            {
                commandLineBuilder.Add("-Wremarks");
            }
        }
        DebugSymbolsCommandLineProcessor(
            object sender,
            Bam.Core.StringArray commandLineBuilder,
            Bam.Core.Option option,
            Bam.Core.Target target)
        {
            var debugSymbolsOption = option as Bam.Core.ValueTypeOption <bool>;

            if (debugSymbolsOption.Value)
            {
                commandLineBuilder.Add("-g");
            }
        }
        AdditionalOptionsCommandLineProcessor(
            object sender,
            Bam.Core.StringArray commandLineBuilder,
            Bam.Core.Option option,
            Bam.Core.Target target)
        {
            var stringOption = option as Bam.Core.ReferenceTypeOption <string>;
            var arguments    = stringOption.Value.Split(' ');

            foreach (var argument in arguments)
            {
                commandLineBuilder.Add(argument);
            }
        }
        OmitFramePointerCommandLineProcessor(
            object sender,
            Bam.Core.StringArray commandLineBuilder,
            Bam.Core.Option option,
            Bam.Core.Target target)
        {
            var boolOption = option as Bam.Core.ValueTypeOption <bool>;

            if (boolOption.Value)
            {
                commandLineBuilder.Add("-fomit-frame-pointer");
            }
            else
            {
                commandLineBuilder.Add("-fno-omit-frame-pointer");
            }
        }
        SixtyFourBitCommandLineProcessor(
            object sender,
            Bam.Core.StringArray commandLineBuilder,
            Bam.Core.Option option,
            Bam.Core.Target target)
        {
            var sixtyFourBitOption = option as Bam.Core.ValueTypeOption <bool>;

            if (sixtyFourBitOption.Value)
            {
                commandLineBuilder.Add("-m64");
            }
            else
            {
                commandLineBuilder.Add("-m32");
            }
        }
        InlineFunctionsCommandLineProcessor(
            object sender,
            Bam.Core.StringArray commandLineBuilder,
            Bam.Core.Option option,
            Bam.Core.Target target)
        {
            var boolOption = option as Bam.Core.ValueTypeOption <bool>;

            if (boolOption.Value)
            {
                commandLineBuilder.Add("-finline-functions");
            }
            else
            {
                commandLineBuilder.Add("-fno-inline-functions");
            }
        }
        StrictAliasingCommandLineProcessor(
            object sender,
            Bam.Core.StringArray commandLineBuilder,
            Bam.Core.Option option,
            Bam.Core.Target target)
        {
            var boolOption = option as Bam.Core.ValueTypeOption <bool>;

            if (boolOption.Value)
            {
                commandLineBuilder.Add("-fstrict-aliasing");
            }
            else
            {
                commandLineBuilder.Add("-fno-strict-aliasing");
            }
        }
        IgnoreStandardIncludePathsCommandLineProcessor(
            object sender,
            Bam.Core.StringArray commandLineBuilder,
            Bam.Core.Option option,
            Bam.Core.Target target)
        {
            var ignoreStandardIncludePathsOption = option as Bam.Core.ValueTypeOption <bool>;

            if (ignoreStandardIncludePathsOption.Value)
            {
                commandLineBuilder.Add("-nostdinc");
                var options = sender as C.ICCompilerOptions;
                if (options.TargetLanguage == C.ETargetLanguage.Cxx)
                {
                    commandLineBuilder.Add("-nostdinc++");
                }
            }
        }
        ExceptionHandlerCommandLineProcessor(
            object sender,
            Bam.Core.StringArray commandLineBuilder,
            Bam.Core.Option option,
            Bam.Core.Target target)
        {
            var exceptionHandlerOption = option as Bam.Core.ValueTypeOption <C.Cxx.EExceptionHandler>;

            switch (exceptionHandlerOption.Value)
            {
            case C.Cxx.EExceptionHandler.Disabled:
                commandLineBuilder.Add("-fno-exceptions");
                break;

            case C.Cxx.EExceptionHandler.Asynchronous:
            case C.Cxx.EExceptionHandler.Synchronous:
                commandLineBuilder.Add("-fexceptions");
                break;

            default:
                throw new Bam.Core.Exception("Unrecognized exception handler option");
            }
        }
        IncludePathsCommandLineProcessor(
            object sender,
            Bam.Core.StringArray commandLineBuilder,
            Bam.Core.Option option,
            Bam.Core.Target target)
        {
            var compilerTool       = target.Toolset.Tool(typeof(C.ICompilerTool)) as C.ICompilerTool;
            var switchPrefix       = compilerTool.IncludePathCompilerSwitches[1];
            var includePathsOption = option as Bam.Core.ReferenceTypeOption <Bam.Core.DirectoryCollection>;

            // TODO: convert to var
            foreach (string includePath in includePathsOption.Value)
            {
                if (includePath.Contains(" "))
                {
                    commandLineBuilder.Add(System.String.Format("{0}\"{1}\"", switchPrefix, includePath));
                }
                else
                {
                    commandLineBuilder.Add(System.String.Format("{0}{1}", switchPrefix, includePath));
                }
            }
        }
        CharacterSetCommandLineProcessor(
            object sender,
            Bam.Core.StringArray commandLineBuilder,
            Bam.Core.Option option,
            Bam.Core.Target target)
        {
            var enumOption = option as Bam.Core.ValueTypeOption <C.ECharacterSet>;
            var cOptions   = sender as C.ICCompilerOptions;

            switch (enumOption.Value)
            {
            case C.ECharacterSet.NotSet:
                break;

            case C.ECharacterSet.Unicode:
                cOptions.Defines.Add("_UNICODE");
                cOptions.Defines.Add("UNICODE");
                break;

            case C.ECharacterSet.MultiByte:
                cOptions.Defines.Add("_MBCS");
                break;
            }
        }