<?xml version="1.0" encoding="utf-8"?>
<ProjectSchemaDefinitions
    xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sys="clr-namespace:System;assembly=mscorlib">

    <ItemType Name="CudaCompile" DisplayName="CUDA C/C++" />

    <FileExtension Name="*.cu" ContentType="CudaCompile" />
    <FileExtension Name="*.cuh" ContentType="CppHeader" />

    <ContentType Name="CudaCompile" DisplayName="CUDA C/C++" ItemType="CudaCompile" />

    <Rule Name="CudaCompile" PageTemplate="tool" DisplayName="CUDA C/C++" Order="12">
        <Rule.DataSource>
            <DataSource Persistence="ProjectFile" ItemType="CudaCompile" />
        </Rule.DataSource>

        <Rule.Categories>
            <Category Name="Common" DisplayName="Common" />
            <Category Name="Device" DisplayName="Device" />
            <Category Name="Host" DisplayName="Host" />
            <Category Name="Command Line" DisplayName="Command Line" Subtype="CommandLine" />
        </Rule.Categories>

        <Rule.Properties>
            <!-- /////////////////////////////////////////////////////////////////////////////////// Common properties -->
            <StringProperty
                Name="CudaToolkitCustomDir"
                Subtype="folder"
                DisplayName="CUDA Toolkit Custom Dir"
                Category="Common"
                Description="Custom path to the CUDA Toolkit."
                IncludeInCommandLine="False">

                <StringProperty.DataSource>
                    <DataSource Persistence="ProjectFile" HasConfigurationCondition="false" Label="Globals" />
                </StringProperty.DataSource>
            </StringProperty>

            <StringListProperty
                Name="AdditionalDeps"
                DisplayName="Source Dependencies"
                Category="Common"
                Description="Add additional source file dependencies.  Dependencies that are #include'd do not have to be explicitly specified here." />

            <StringProperty
                Name="CompileOut"
                DisplayName="Compiler Output (obj/cubin)"
                Category="Common"
                Subcategory="Compiler"
                Description="Sets output as an obj or cubin file."
                Switch="-o " />

            <StringListProperty
                Name="Include"
                DisplayName="Additional Include Directories"
                Category="Common"
                Description="Specifies one or more directories to add to the include path; use semi-colon delimited list if more than one. (-I[path])"
                Switch="-I"
                RendererValueSeparator=";" />

            <BoolProperty
                Name="UseHostInclude"
                DisplayName="Use Host Include Directories"
                Category="Common"
                Description="Use additional include directories used by host compiler for device code."
                IncludeInCommandLine="False" />

            <BoolProperty
                Name="Keep"
                DisplayName="Keep Preprocessed Files"
                Category="Common"
                Description="Specifies that preprocessor files generated by the CUDA compiler are not deleted, i.e., .ptx, .cubin, .cudafe1.c, etc. (--keep)"
                Switch="--keep" />

            <StringProperty
                Name="KeepDir"
                Subtype="folder"
                DisplayName="Keep Directory"
                Category="Common"
                Description="Path to the directory where preprocessor files generated by the CUDA compiler will be kept."
                Switch="--keep-dir " />

            <BoolProperty
                Name="GenerateRelocatableDeviceCode"
                DisplayName="Generate Relocatable Device Code"
                Category="Common"
                Description="Compiles the input file into an object file that contains relocatable device code."
                Switch="-rdc=true" />

            <BoolProperty
                Name="ExtensibleWholeProgramCompilation"
                DisplayName="Enable Extensible Whole Program Compilation"
                Category="Common"
                Description="Enable extensible whole program compilation of device code."
                Switch="-ewp" />

            <EnumProperty
                Name="NvccCompilation"
                DisplayName="NVCC Compilation Type"
                Category="Common"
                Subcategory="Compiler"
                Description="Selected desired output of NVCC compilation (-c/-compile, -cuda, -gpu, -cubin, -ptx, -optix-ir).">

                <EnumValue
                    Name="compile"
                    DisplayName="Generate hybrid object file"
                    Switch="--compile" />

                <EnumValue
                    Name="fatbin"
                    DisplayName="Generate device-only .fatbin file"
                    Switch="-fatbin" />

                <EnumValue
                    Name="cubin"
                    DisplayName="Generate device-only .cubin file"
                    Switch="-cubin" />

                <EnumValue
                    Name="ptx"
                    DisplayName="Generate device-only .ptx file"
                    Switch="-ptx" />

                <EnumValue
                    Name="optix-ir"
                    DisplayName="Generate device-only .optixir file"
                    Switch="-optix-ir" />
            </EnumProperty>

            <EnumProperty
                Name="CudaRuntime"
                DisplayName="CUDA Runtime"
                Category="Common"
                Subcategory="Compiler"
                Description="Specify the type of CUDA runtime library to be used.">

                <EnumValue
                    Name="None"
                    DisplayName="No CUDA runtime library"
                    Switch="-cudart none" />

                <EnumValue
                    Name="Shared"
                    DisplayName="Shared/dynamic CUDA runtime library"
                    Switch="-cudart shared" />

                <EnumValue
                    Name="Static"
                    DisplayName="Static CUDA runtime library"
                    Switch="-cudart static" />
            </EnumProperty>

            <StringProperty
                Name="NvccPath"
                DisplayName="Compiler Path"
                Category="Common"
                ReadOnly="true"
                Description="Designated path to nvcc.exe."
                Visible="false" />

            <StringListProperty
                Name="RequiredIncludes"
                DisplayName="Required Include Directories"
                Category="Common"
                ReadOnly="true"
                Description="This include must exist for CUDA headers to be accessed."
                Switch="-I"
                RendererValueSeparator=";"
                Visible="false" />

            <EnumProperty
                Name="TargetMachinePlatform"
                DisplayName="Target Machine Platform"
                Category="Common"
                Description="Select the platform for the target machine (x86 or x64)."
                Visible="false">

                <EnumValue
                    Name="32"
                    DisplayName="32-bit"
                    Switch="--machine 32" />

                <EnumValue
                    Name="64"
                    DisplayName="64-bit"
                    Switch="--machine 64" />
            </EnumProperty>

            <!-- /////////////////////////////////////////////////////////////////////////////////// Device properties -->

            <BoolProperty
                Name="InterleaveSourceInPTX"
                DisplayName="Interleave Source in PTX"
                Category="Device"
                Description="Insert source code in generated PTX."
                Switch="--source-in-ptx" />

            <StringListProperty
                Name="CodeGeneration"
                DisplayName="Code Generation"
                Category="Device"
                Description="Specifies the names of the NVIDIA GPUs to generate code for and the class of the NVIDIA GPU architectures for which the input files must be compiled.  Specify the architecture and code in the format [arch],[code], multiple arch/code pairs may be specified separated by a ; character if the NVCC Compilation Type is compile (CUDART). Valid values for arch and code are compute_52, compute_60, compute_61, compute_70, compute_75, compute_80, compute_86, compute_89, compute_90, compute_90a, compute_100, compute_100a, compute_120, compute_120a, sm_52, sm_60, sm_61, sm_70, sm_75, sm_80, sm_86, sm_89, sm_90, sm_90a, sm_100, sm_100a, sm_120, sm_120a. Note compute_50, and sm_50 are deprecated."
                Switch="-gencode=[value]"
                RendererValueSeparator=";" />

            <BoolProperty
                Name="EnableVirtualArchInFatbin"
                DisplayName="Enable Virtual Arch in Fatbin"
                Category="Device"
                Description="Enable the encoding of virtual architectures in the fatbin. The default is true."
                IncludeInCommandLine="False" />

            <BoolProperty
                Name="GPUDebugInfo"
                DisplayName="Generate GPU Debug Information"
                Category="Device"
                Description="Specifies whether or not GPU debugging information is generated by the CUDA Compiler. (-G)"
                Switch="-G" />

            <BoolProperty
                Name="GenerateLineInfo"
                DisplayName="Generate Line Number Information"
                Category="Device"
                Description="Generates line number information for device code.  If Generate GPU Debug Information is on (-G), line information is automatically generated. (-lineinfo)"
                Switch="-lineinfo" />

            <IntProperty
                Name="MaxRegCount"
                DisplayName="Max Used Register"
                Category="Device"
                Description="Specify the maximum amount of registers that GPU functions can use. (-maxrregcount)"
                Switch="-maxrregcount=" />

            <BoolProperty
                Name="PtxAsOptionV"
                DisplayName="Verbose PTXAS Output"
                Category="Device"
                Description=""
                Switch="--ptxas-options=-v" />

            <EnumProperty
                Name="SplitCompile"
                DisplayName="Split Compilation"
                Category="Device"
                Description="Enable breaking up and optimizing the code in parallel to speed up compile time. Default means this option is turned off and compilation is single-threaded. Extended split compilation is a more aggressive form of split compilation that further extends parallelism to the compiler backend (ptxjit). This is an experimental feature that currently only works in conjunction with Device Link Time Optimization (available under CUDA Linker &gt; device) and may impact application performance.">
                <EnumValue
                    Name="Default"
                    DisplayName="Default"
                    Switch="" />
                <EnumValue
                    Name="MaxThreads"
                    DisplayName="Max threads"
                    Switch="--split-compile=0" />
                <EnumValue
                    Name="ExtendedMaxThreads"
                    DisplayName="Max threads (extended)"
                    Switch="--split-compile-extended=0" />
                <EnumValue
                    Name="Custom"
                    DisplayName="Custom"
                    Switch="--split-compile=">
                    <Argument
                        Property="SplitCompileCustomThreads"
                        IsRequired="true" />
                </EnumValue>
                <EnumValue
                    Name="ExtendedCustom"
                    DisplayName="Custom (extended)"
                    Switch="--split-compile-extended=">
                    <Argument
                        Property="SplitCompileCustomThreads"
                        IsRequired="true" />
                </EnumValue>
            </EnumProperty>

            <StringProperty
                Name="SplitCompileCustomThreads"
                DisplayName="Number of Split Compilation Threads"
                Category="Device"
                Description="The custom maximum thread count value for split compilation. Ignored unless &quot;Custom&quot; is selected for &quot;Split compilation&quot;."/>

            <BoolProperty
                Name="FastMath"
                DisplayName="Use Fast Math"
                Category="Device"
                Description="Make use of the fast math library."
                Switch="-use_fast_math" />

            <EnumProperty
                Name="FastCompile"
                DisplayName="Use Fast Compilation"
                Category="Device"
                Description="Prioritizes faster compilation over optimizations, intended primarily for speeding up development cycles.">
                <EnumValue
                    Name="Off"
                    DisplayName="Off"
                    Switch="" />
                <EnumValue
                    Name="Max"
                    DisplayName="Fastest"
                    Switch="--Ofast-compile=max" />
            </EnumProperty>

            <!-- /////////////////////////////////////////////////////////////////////////////////// Host properties -->

            <StringProperty
                Name="AdditionalCompilerOptions"
                DisplayName="Additional Compiler Options"
                Category="Host"
                Description="Additional host compiler options that are not supported by the host project properties." />

            <StringListProperty
                Name="Defines"
                DisplayName="Preprocessor Definitions"
                Category="Host"
                Description="Specifies one or more preprocessor defines.  (-D[macro])"
                Switch="-D"
                RendererValueSeparator=";" />

            <BoolProperty
                Name="UseHostDefines"
                DisplayName="Use Host Preprocessor Definitions"
                Category="Host"
                Description="Use defines used by host compiler for device code."
                IncludeInCommandLine="False" />

            <BoolProperty
                Name="Emulation"
                DisplayName="Emulation"
                Category="Host"
                Description="Specifies whether or not to generate emulated code.  (-deviceemu)"
                Switch="-deviceemu -D_DEVICEEMU" />

            <BoolProperty
                Name="HostDebugInfo"
                DisplayName="Generate Host Debug Information"
                Category="Host"
                Description="Specifies whether or not host debugging information is generated by the CUDA compiler. (-g)"
                Switch="-g" />

            <EnumProperty
                Name="DebugInformationFormat"
                DisplayName="Debug Information Format"
                Category="Host"
                Description="Select option for debugging information generated by the compiler; choose Custom to use specific debugging options. (/Z7, /Zi, /ZI)">

                <EnumValue
                    Name="InheritFromHost"
                    DisplayName="&lt;inherit from host&gt;"
                    Switch="" />

                <EnumValue
                    Name="None"
                    DisplayName="No debugging information"
                    Switch="" />

                <EnumValue
                    Name="OldStyle"
                    DisplayName="C7 compatible"
                    Switch="/Z7" />

                <EnumValue
                    Name="ProgramDatabase"
                    DisplayName="Program Database"
                    Switch="/Zi" />

                <EnumValue
                    Name="EditAndContinue"
                    DisplayName="Program Database for Edit And Continue"
                    Switch="/ZI" />
            </EnumProperty>

            <EnumProperty
                Name="Optimization"
                DisplayName="Optimization"
                Category="Host"
                Description="Select option for code optimization; choose Custom to use specific optimization options. (/Od, /O1, /O2, /Ox)">

                <EnumValue
                    Name="InheritFromHost"
                    DisplayName="&lt;inherit from host&gt;"
                    Switch="" />

                <EnumValue
                    Name="Od"
                    DisplayName="Disabled"
                    Switch="/Od" />

                <EnumValue
                    Name="O1"
                    DisplayName="Minimize Size"
                    Switch="/O1" />

                <EnumValue
                    Name="O2"
                    DisplayName="Maximize Speed"
                    Switch="/O2" />

                <EnumValue
                    Name="O3"
                    DisplayName="Full Optimization"
                    Switch="/Ox" />
            </EnumProperty>

            <EnumProperty
                Name="Runtime"
                DisplayName="Runtime Library"
                Category="Host"
                Description="Specify runtime library for linking. (/Mt, /MTd, /MD, /MDd, /ML, /MLd)">

                <EnumValue
                    Name="InheritFromHost"
                    DisplayName="&lt;inherit from host&gt;"
                    Switch="" />

                <EnumValue
                    Name="MT"
                    DisplayName="Multi-Threaded"
                    Switch="/MT" />

                <EnumValue
                    Name="MTd"
                    DisplayName="Multi-Threaded Debug"
                    Switch="/MTd" />

                <EnumValue
                    Name="MD"
                    DisplayName="Multi-Threaded DLL"
                    Switch="/MD" />

                <EnumValue
                    Name="MDd"
                    DisplayName="Multi-threaded Debug DLL"
                    Switch="/MDd" />

                <EnumValue
                    Name="ML"
                    DisplayName="Single-Threaded"
                    Switch="/ML" />

                <EnumValue
                    Name="MLd"
                    DisplayName="Single-Threaded Debug"
                    Switch="/MLd" />
            </EnumProperty>

            <EnumProperty
                Name="RuntimeChecks"
                DisplayName="Basic Runtime Checks"
                Category="Host"
                Description="Perform basic runtime error checks, incompatible with any optimization type other than debug. (/RTCs, /RTCu, RTC1)">

                <EnumValue
                    Name="InheritFromHost"
                    DisplayName="&lt;inherit from host&gt;"
                    Switch="" />

                <EnumValue
                    Name="Default"
                    DisplayName="Default"
                    Switch="" />

                <EnumValue
                    Name="RTCs"
                    DisplayName="Stack Frames"
                    Switch="/RTCs" />

                <EnumValue
                    Name="RTCu"
                    DisplayName="Uninitialized Variables"
                    Switch="/RTCu" />

                <EnumValue
                    Name="RTC1"
                    DisplayName="Both"
                    Switch="/RTC1" />
            </EnumProperty>

            <EnumProperty
                Name="TypeInfo"
                DisplayName="Enable Run-Time Type Info"
                Category="Host"
                Description="Adds code for checking C++ object types at run time (runtime type information). (/GR, /GR-)">

                <EnumValue
                    Name="InheritFromHost"
                    DisplayName="&lt;inherit from host&gt;"
                    Switch="" />

                <EnumValue
                    Name="true"
                    DisplayName="Yes"
                    Switch="/GR" />

                <EnumValue
                    Name="false"
                    DisplayName="No"
                    Switch="/GR-" />
            </EnumProperty>

            <EnumProperty
                Name="Warning"
                DisplayName="Warning Level"
                Category="Host"
                Description="Select how strict you want the compiler to be about checking for potentially suspect constructs. (/W0 - /W4)">

                <EnumValue
                    Name="InheritFromHost"
                    DisplayName="&lt;inherit from host&gt;"
                    Switch="" />

                <EnumValue
                    Name="W0"
                    DisplayName="Off: Turn Off All Warnings"
                    Switch="/W0" />

                <EnumValue
                    Name="W1"
                    DisplayName="Level 1"
                    Switch="/W1" />

                <EnumValue
                    Name="W2"
                    DisplayName="Level 2"
                    Switch="/W2" />

                <EnumValue
                    Name="W3"
                    DisplayName="Level 3"
                    Switch="/W3" />

                <EnumValue
                    Name="W4"
                    DisplayName="Level 4"
                    Switch="/W4" />

                <EnumValue
                    Name="Wall"
                    DisplayName="Enable All Warnings"
                    Switch="/Wall" />
            </EnumProperty>

            <!-- /////////////////////////////////////////////////////////////////////////////////// Command line properties -->

            <StringProperty
                Name="AdditionalOptions"
                DisplayName="Additional Options"
                Category="Command Line"
                Description="Additional Options" />

            <StringProperty
                Name="CommandLineTemplate"
                DisplayName="Command Line"
                Category="Command Line"
                Visible="False"
                IncludeInCommandLine="False" />

        </Rule.Properties>
    </Rule>

    <Rule Name="CudaLink" PageTemplate="tool" DisplayName="CUDA Linker" Order="21">
        <Rule.DataSource>
            <DataSource Persistence="ProjectFile" ItemType="CudaLink" />
        </Rule.DataSource>

        <Rule.Categories>
            <Category Name="General" DisplayName="General" />
            <Category Name="Command Line" DisplayName="Command Line" Subtype="CommandLine" />
        </Rule.Categories>

        <Rule.Properties>
            <!-- /////////////////////////////////////////////////////////////////////////////////// General properties -->

            <BoolProperty
                Name="PerformDeviceLink"
                DisplayName="Perform Device Link"
                Category="General"
                Description="Specifies if an object file generated via -rdc=true will be linked."
                IncludeInCommandLine="False"
                Switch="-dlink" />

            <BoolProperty
                Name="PerformDeviceLinkTimeOptimization"
                DisplayName="Perform Device Link-Time Optimization"
                Category="Device"
                Description="Perform link-time optimization of device code."
                Switch="--dlink-time-opt" />

            <StringProperty
                Name="LinkOut"
                DisplayName="Linker Output"
                Category="General"
                Subcategory="General"
                Description="Sets the name of the linker output object file."
                Subtype="file"
                Switch="-o " />

            <StringListProperty
                Name="AdditionalLibraryDirectories"
                DisplayName="Additional Library Directories"
                Category="General"
                Description="Specifies one or more directories to add to the lib path; use semi-colon delimited list if more than one. (-L[path])"
                Switch="-L"
                RendererValueSeparator=";"
                Subtype="folder" />

            <BoolProperty
                Name="UseHostLibraryDirectories"
                DisplayName="Use Host Library Directories"
                Category="General"
                Description="Specifies if the host library directories will be also be used by nvcc."
                IncludeInCommandLine="False" />

            <StringListProperty
                Name="AdditionalDependencies"
                DisplayName="Additional Dependencies"
                Category="General"
                Description="Specifies additional items to add to the link command line. ([library])"
                RendererValueSeparator=";"
                Subtype="file" />

            <BoolProperty
                Name="UseHostLibraryDependencies"
                DisplayName="Use Host Library Dependencies"
                Category="General"
                Description="Specifies if the host library dependencies will also be used by nvcc."
                IncludeInCommandLine="False" />

            <EnumProperty
                Name="GPUDebugInfo"
                DisplayName="Generate GPU Debug Information"
                Category="General"
                Description="Specifies whether or not GPU debugging information is generated by the CUDA Compiler. (-G)">

                <EnumValue
                    Name="InheritFromProject"
                    DisplayName="&lt;inherit from project&gt;"
                    Switch="" />

                <EnumValue
                    Name="true"
                    DisplayName="Yes"
                    Switch="-G" />

                <EnumValue
                    Name="false"
                    DisplayName="No"
                    Switch="" />
            </EnumProperty>

            <EnumProperty
                Name="DebugInformationFormat"
                DisplayName="Debug Information Format"
                Category="General"
                Description="Select option for debugging information generated by the compiler; choose Custom to use specific debugging options. (/Z7, /Zi, /ZI)">

                <EnumValue
                    Name="InheritFromHost"
                    DisplayName="&lt;inherit from host&gt;"
                    Switch="" />

                <EnumValue
                    Name="None"
                    DisplayName="No debugging information"
                    Switch="" />

                <EnumValue
                    Name="OldStyle"
                    DisplayName="C7 compatible"
                    Switch="/Z7" />

                <EnumValue
                    Name="ProgramDatabase"
                    DisplayName="Program Database"
                    Switch="/Zi" />

                <EnumValue
                    Name="EditAndContinue"
                    DisplayName="Program Database for Edit And Continue"
                    Switch="/ZI" />
            </EnumProperty>

            <EnumProperty
                Name="Optimization"
                DisplayName="Optimization"
                Category="General"
                Description="Select option for code optimization; choose Custom to use specific optimization options. (/Od, /O1, /O2, /Ox)">

                <EnumValue
                    Name="InheritFromProject"
                    DisplayName="&lt;inherit from project&gt;"
                    Switch="" />

                <EnumValue
                    Name="Od"
                    DisplayName="Disabled"
                    Switch="/Od" />

                <EnumValue
                    Name="O1"
                    DisplayName="Minimize Size"
                    Switch="/O1" />

                <EnumValue
                    Name="O2"
                    DisplayName="Maximize Speed"
                    Switch="/O2" />

                <EnumValue
                    Name="O3"
                    DisplayName="Full Optimization"
                    Switch="/Ox" />
            </EnumProperty>

            <!-- /////////////////////////////////////////////////////////////////////////////////// General properties (non-visible) -->

            <StringListProperty
                Name="CodeGeneration"
                DisplayName="Code Generation"
                Category="General"
                Switch="-gencode=[value]"
                RendererValueSeparator=";"
                Visible="false" />

            <EnumProperty
                Name="TargetMachinePlatform"
                DisplayName="Target Machine Platform"
                Category="General"
                Visible="False">

                <EnumValue
                    Name="32"
                    DisplayName="32-bit"
                    Switch="--machine 32" />

                <EnumValue
                    Name="64"
                    DisplayName="64-bit"
                    Switch="--machine 64" />
            </EnumProperty>

            <EnumProperty
                Name="Warning"
                DisplayName="Warning Level"
                Category="General"
                Visible="False">

                <EnumValue
                    Name="InheritFromHost"
                    DisplayName="&lt;inherit from host&gt;"
                    Switch="" />

                <EnumValue
                    Name="W0"
                    DisplayName="Off: Turn Off All Warnings"
                    Switch="/W0" />

                <EnumValue
                    Name="W1"
                    DisplayName="Level 1"
                    Switch="/W1" />

                <EnumValue
                    Name="W2"
                    DisplayName="Level 2"
                    Switch="/W2" />

                <EnumValue
                    Name="W3"
                    DisplayName="Level 3"
                    Switch="/W3" />

                <EnumValue
                    Name="W4"
                    DisplayName="Level 4"
                    Switch="/W4" />

                <EnumValue
                    Name="Wall"
                    DisplayName="Enable All Warnings"
                    Switch="/Wall" />
            </EnumProperty>

            <EnumProperty
                Name="RuntimeChecks"
                DisplayName="Basic Runtime Checks"
                Category="General"
                Visible="False">

                <EnumValue
                    Name="InheritFromHost"
                    DisplayName="&lt;inherit from host&gt;"
                    Switch="" />

                <EnumValue
                    Name="Default"
                    DisplayName="Default"
                    Switch="" />

                <EnumValue
                    Name="RTCs"
                    DisplayName="Stack Frames"
                    Switch="/RTCs" />

                <EnumValue
                    Name="RTCu"
                    DisplayName="Uninitialized Variables"
                    Switch="/RTCu" />

                <EnumValue
                    Name="RTC1"
                    DisplayName="Both"
                    Switch="/RTC1" />
            </EnumProperty>

            <EnumProperty
                Name="Runtime"
                DisplayName="Runtime Library"
                Category="General"
                Visible="False">

                <EnumValue
                    Name="InheritFromHost"
                    DisplayName="&lt;inherit from host&gt;"
                    Switch="" />

                <EnumValue
                    Name="MT"
                    DisplayName="Multi-Threaded"
                    Switch="/MT" />

                <EnumValue
                    Name="MTd"
                    DisplayName="Multi-Threaded Debug"
                    Switch="/MTd" />

                <EnumValue
                    Name="MD"
                    DisplayName="Multi-Threaded DLL"
                    Switch="/MD" />

                <EnumValue
                    Name="MDd"
                    DisplayName="Multi-threaded Debug DLL"
                    Switch="/MDd" />

                <EnumValue
                    Name="ML"
                    DisplayName="Single-Threaded"
                    Switch="/ML" />

                <EnumValue
                    Name="MLd"
                    DisplayName="Single-Threaded Debug"
                    Switch="/MLd" />
            </EnumProperty>

            <EnumProperty
                Name="TypeInfo"
                DisplayName="Enable Run-Time Type Info"
                Category="General"
                Visible="False">

                <EnumValue
                    Name="InheritFromHost"
                    DisplayName="&lt;inherit from host&gt;"
                    Switch="" />

                <EnumValue
                    Name="true"
                    DisplayName="Yes"
                    Switch="/GR" />

                <EnumValue
                    Name="false"
                    DisplayName="No"
                    Switch="/GR-" />
            </EnumProperty>

            <StringProperty
                Name="AdditionalCompilerOptions"
                DisplayName="Additional Compiler Options"
                Category="General"
                Visible="False" />

            <StringListProperty
                Name="Inputs"
                DisplayName="Inputs"
                Category="General"
                Switch=""
                RendererValueSeparator=" "
                Visible="false" />

            <!-- /////////////////////////////////////////////////////////////////////////////////// Command line properties -->

            <StringProperty
                Name="AdditionalOptions"
                DisplayName="Additional Options"
                Category="Command Line"
                Description="Additional Options" />

            <StringProperty
                Name="CommandLineTemplate"
                DisplayName="Command Line"
                Category="Command Line"
                Visible="False"
                IncludeInCommandLine="False" />

        </Rule.Properties>
    </Rule>
</ProjectSchemaDefinitions>
