﻿<?xml version="1.0" encoding="utf-8"?>
<!--Copyright, Microsoft Corporation, All rights reserved.-->
<Rule
   Name="CL"
   PageTemplate="tool"
   DisplayName="C/C++"
   SwitchPrefix="/"
   Order="10"
   xmlns="http://schemas.microsoft.com/build/2009/properties"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:sys="clr-namespace:System;assembly=mscorlib">
  <Rule.Categories>
    <Category
       Name="General"
       DisplayName="General" />
    <Category
       Name="Optimization"
       DisplayName="Optimization" />
    <Category
       Name="Preprocessor"
       DisplayName="Preprocessor" />
    <Category
       Name="Code Generation"
       DisplayName="Code Generation" />
    <Category
       Name="Language"
       DisplayName="Language" />
    <Category
       Name="Precompiled Headers"
       DisplayName="Precompiled Headers" />
    <Category
       Name="Output Files"
       DisplayName="Output Files" />
    <Category
       Name="Browse Information"
       DisplayName="Browse Information" />
    <Category
       Name="External Includes"
       DisplayName="External Includes" />
    <Category
       Name="Advanced"
       DisplayName="Advanced" />
    <Category
       Name="All Options"
       DisplayName="All Options"
       Subtype="Search" />
    <Category
       Name="Command Line"
       DisplayName="Command Line"
       Subtype="CommandLine" />
  </Rule.Categories>
  <Rule.DataSource>
    <DataSource
       Persistence="ProjectFile"
       ItemType="ClCompile"
       Label=""
       HasConfigurationCondition="true" />
  </Rule.DataSource>
  <StringListProperty
     Subtype="folder"
     Name="AdditionalIncludeDirectories"
     DisplayName="Additional Include Directories"
     Description="Specifies one or more directories to add to the include path. Separate with ';' if more than one.     (/I[path])"
     Category="General"
     Switch="I"
     F1Keyword="VC.Project.VCCLCompilerTool.AdditionalIncludeDirectories">
  </StringListProperty>
  <BoolProperty
     Name="ScanSourceForModuleDependencies"
     DisplayName="Scan Sources for Module Dependencies"
     Description="Makes the build scan all c++ sources, not just module interface and header unit sources, for module and header units dependencies and build the full dependencies graph."
     Category="General"
     IncludeInCommandLine="false"
     F1Keyword="VC.Project.VCCLCompilerTool.ScanSourceForModuleDependencies">
  </BoolProperty>
  <EnumProperty
     Name="DebugInformationFormat"
     DisplayName="Debug Information Format"
     Description="Specifies the type of debugging information generated by the compiler.  This requires compatible linker settings.    (/Z7, /Zi, /ZI)"
     Category="General"
     F1Keyword="VC.Project.VCCLCompilerTool.DebugInformationFormat">
    <EnumValue
       Name="None"
       Switch=""
       DisplayName="None"
       Description="Produces no debugging information, so compilation may be faster.">
    </EnumValue>
    <EnumValue
       Name="OldStyle"
       Switch="Z7"
       DisplayName="C7 compatible"
       Description="Select the type of debugging information created for your program and whether this information is kept in object (.obj) files or in a program database (PDB).">
    </EnumValue>
    <EnumValue
       Name="ProgramDatabase"
       Switch="Zi"
       DisplayName="Program Database"
       Description="Produces a program database (PDB) that contains type information and symbolic debugging information for use with the debugger. The symbolic debugging information includes the names and types of variables, as well as functions and line numbers. ">
    </EnumValue>
    <EnumValue
       Name="EditAndContinue"
       Switch="ZI"
       DisplayName="Program Database for Edit And Continue"
       Description="Produces a program database, as described above, in a format that supports the Edit and Continue feature.">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     Name="SupportJustMyCode"
     DisplayName="Support Just My Code Debugging"
     Description="Adds supporting code for enabling Just My Code debugging in this compilation unit.  (/JMC)"
     Category="General"
     Switch="JMC"
     F1Keyword="VC.Project.VCCLCompilerTool.SupportJustMyCode">
  </BoolProperty>
  <BoolProperty
     Name="SuppressStartupBanner"
     DisplayName="Suppress Startup Banner"
     Description="Suppresses the display of the sign-on banner when the compiler starts up and display of informational messages during compiling."
     Category="General"
     Switch="nologo"
     F1Keyword="VC.Project.VCCLCompilerTool.SuppressStartupBanner">
  </BoolProperty>
  <EnumProperty
     Name="WarningLevel"
     DisplayName="Warning Level"
     Description="Select how strict you want the compiler to be about code errors.     (/W0 - /W4)"
     Category="General"
     F1Keyword="VC.Project.VCCLCompilerTool.WarningLevel">
    <EnumValue
       Name="TurnOffAllWarnings"
       Switch="W0"
       DisplayName="Turn Off All Warnings"
       Description="Level 0 disables all warnings.">
    </EnumValue>
    <EnumValue
       Name="Level1"
       Switch="W1"
       DisplayName="Level1"
       Description="Level 1 displays severe warnings. Level 1 is the default warning level at the command line.">
    </EnumValue>
    <EnumValue
       Name="Level2"
       Switch="W2"
       DisplayName="Level2"
       Description="Level 2 displays all level 1 warnings and warnings less severe than level 1.">
    </EnumValue>
    <EnumValue
       Name="Level3"
       Switch="W3"
       DisplayName="Level3"
       Description="Level 3 displays all level 2 warnings and all other warnings recommended for production purposes.">
    </EnumValue>
    <EnumValue
       Name="Level4"
       Switch="W4"
       DisplayName="Level4"
       Description="Level 4 displays all level 3 warnings plus informational warnings, which in most cases can be safely ignored.">
    </EnumValue>
    <EnumValue
       Name="EnableAllWarnings"
       Switch="Wall"
       DisplayName="EnableAllWarnings"
       Description="Enables all warnings, including those disabled by default.">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     ReverseSwitch="WX-"
     Name="TreatWarningAsError"
     DisplayName="Treat Warnings As Errors"
     Description="Treats all compiler warnings as errors. For a new project, it may be best to use /WX in all compilations; resolving all warnings will ensure the fewest possible hard-to-find code defects."
     Category="General"
     Switch="WX"
     F1Keyword="VC.Project.VCCLCompilerTool.WarnAsError">
  </BoolProperty>
  <StringProperty
     Name="WarningVersion"
     DisplayName="Warning Version"
     Description="Hide warnings introduced after a specific version of the compiler.     (/Wv:xx[.yy[.zzzzz]])"
     Category="General"
     Switch="Wv:"
     F1Keyword="VC.Project.VCCLCompilerTool.WarningVersion">
  </StringProperty>
  <EnumProperty
     Name="DiagnosticsFormat"
     DisplayName="Diagnostics Format"
     Description="Enables rich diagnostics, with column information and source context in diagnostic messages."
     Category="General"
     F1Keyword="VC.Project.VCCLCompilerTool.DiagnosticsFormat">
    <EnumValue
       Name="Caret"
       Switch="diagnostics:caret"
       DisplayName="Caret"
       Description="Provides column information in the diagnostic message, as well as outputting the relevant line of source code with a caret indicating the offending column.">
    </EnumValue>
    <EnumValue
       Name="Column"
       Switch="diagnostics:column"
       DisplayName="Column Info"
       Description="Additionally provides the column number within the line where the diagnostic is issued, where applicable.">
    </EnumValue>
    <EnumValue
       Name="Classic"
       Switch="diagnostics:classic"
       DisplayName="Classic"
       Description="Retains the prior, concise diagnostic messages with the line number.">
    </EnumValue>
  </EnumProperty>
  <StringProperty
     Subtype="folder"
     Name="TrackerLogDirectory"
     DisplayName="Tracker Log Directory"
     Description="Tracker Log Directory."
     Category="General"
     IncludeInCommandLine="false"
     Visible="false">
  </StringProperty>
  <BoolProperty
     Name="MultiProcessorCompilation"
     DisplayName="Multi-processor Compilation"
     Description="Multi-processor Compilation."
     Category="General"
     Switch="MP"
     F1Keyword="VC.Project.VCCLCompilerTool.MultiProcessorCompilation">
    <Argument
       Property="ProcessorNumber"
       IsRequired="false" />
  </BoolProperty>
  <BoolProperty
     Name="EnableASAN"
     DisplayName="Enable Address Sanitizer"
     Description="Compiles and links program with AddressSanitizer. Currently available for x86 and x64 builds."
     Category="General"
     Switch="fsanitize=address"
     F1Keyword="VC.Project.VCCLCompilerTool.EnableASAN">
    <BoolProperty.DataSource>
      <DataSource
         Persistence="ProjectFile"
         ItemType=""
         Label="Configuration"
         HasConfigurationCondition="true" />
    </BoolProperty.DataSource>
  </BoolProperty>
  <EnumProperty
     Name="Optimization"
     DisplayName="Optimization"
     Description="Select option for code optimization; choose Custom to use specific optimization options.     (/Od, /O1, /O2)"
     Category="Optimization"
     F1Keyword="VC.Project.VCCLCompilerTool.Optimization">
    <EnumValue
       Name="Custom"
       Switch=""
       DisplayName="Custom"
       Description="Custom optimization.">
    </EnumValue>
    <EnumValue
       Name="Disabled"
       Switch="Od"
       DisplayName="Disabled"
       Description="Disable optimization.">
    </EnumValue>
    <EnumValue
       Name="MinSpace"
       Switch="O1"
       DisplayName="Maximum Optimization (Favor Size)"
       Description="Equivalent to /Og /Os /Oy /Ob2 /Gs /GF /Gy">
    </EnumValue>
    <EnumValue
       Name="MaxSpeed"
       Switch="O2"
       DisplayName="Maximum Optimization (Favor Speed)"
       Description="Equivalent to /Og /Oi /Ot /Oy /Ob2 /Gs /GF /Gy">
    </EnumValue>
    <EnumValue
       Name="Full"
       Switch="Ox"
       DisplayName="Optimizations (Favor Speed)"
       Description="Equivalent to /Og /Oi /Ot /Oy /Ob2">
    </EnumValue>
  </EnumProperty>
  <EnumProperty
     Name="InlineFunctionExpansion"
     DisplayName="Inline Function Expansion"
     Description="Select the level of inline function expansion for the build.     (/Ob1, /Ob2)"
     Category="Optimization"
     F1Keyword="VC.Project.VCCLCompilerTool.InlineFunctionExpansion">
    <EnumValue
       Name="Default"
       Switch=""
       DisplayName="Default">
    </EnumValue>
    <EnumValue
       Name="Disabled"
       Switch="Ob0"
       DisplayName="Disabled"
       Description="Disables inline expansion, which is on by default.">
    </EnumValue>
    <EnumValue
       Name="OnlyExplicitInline"
       Switch="Ob1"
       DisplayName="Only __inline"
       Description="Expands only functions marked as inline, __inline, __forceinline or __inline or, in a C++ member function, defined within a class declaration.">
    </EnumValue>
    <EnumValue
       Name="AnySuitable"
       Switch="Ob2"
       DisplayName="Any Suitable"
       Description="Expands functions marked as inline or __inline and any other function that the compiler chooses (expansion occurs at the compiler's discretion, often referred to as auto-inlining).">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     Name="IntrinsicFunctions"
     DisplayName="Enable Intrinsic Functions"
     Description="Enables intrinsic functions.  Using intrinsic functions generates faster, but possibly larger, code.     (/Oi)"
     Category="Optimization"
     Switch="Oi"
     F1Keyword="VC.Project.VCCLCompilerTool.EnableIntrinsicFunctions">
  </BoolProperty>
  <EnumProperty
     Name="FavorSizeOrSpeed"
     DisplayName="Favor Size Or Speed"
     Description="Whether to favor code size or code speed; 'Global Optimization' must be turned on.     (/Ot, /Os)"
     Category="Optimization"
     F1Keyword="VC.Project.VCCLCompilerTool.FavorSizeOrSpeed">
    <EnumValue
       Name="Size"
       Switch="Os"
       DisplayName="Favor small code"
       Description="Favor Small Code. Minimizes the size of EXEs and DLLs by instructing the compiler to favor size over speed.">
    </EnumValue>
    <EnumValue
       Name="Speed"
       Switch="Ot"
       DisplayName="Favor fast code"
       Description="Favor Fast Code. Maximizes the speed of EXEs and DLLs by instructing the compiler to favor speed over size. (This is the default.) ">
    </EnumValue>
    <EnumValue
       Name="Neither"
       Switch=""
       DisplayName="Neither"
       Description="No size nor speed optimization.">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     ReverseSwitch="Oy-"
     Name="OmitFramePointers"
     DisplayName="Omit Frame Pointers"
     Description="Suppresses creation of frame pointers on the call stack."
     Category="Optimization"
     Switch="Oy"
     F1Keyword="VC.Project.VCCLCompilerTool.OmitFramePointers">
  </BoolProperty>
  <BoolProperty
     Name="EnableFiberSafeOptimizations"
     DisplayName="Enable Fiber-Safe Optimizations"
     Description="Enables memory space optimization when using fibers and thread local storage access.     (/GT)"
     Category="Optimization"
     Switch="GT"
     F1Keyword="VC.Project.VCCLCompilerTool.EnableFiberSafeOptimizations">
  </BoolProperty>
  <StringListProperty
     Name="PreprocessorDefinitions"
     DisplayName="Preprocessor Definitions"
     Description="Defines a preprocessing symbols for your source file."
     Category="Preprocessor"
     Switch="D "
     F1Keyword="VC.Project.VCCLCompilerTool.PreprocessorDefinitions">
  </StringListProperty>
  <StringListProperty
     Name="UndefinePreprocessorDefinitions"
     DisplayName="Undefine Preprocessor Definitions"
     Description="Specifies one or more preprocessor undefines.     (/U[macro])"
     Category="Preprocessor"
     Switch="U"
     F1Keyword="VC.Project.VCCLCompilerTool.UndefinePreprocessorDefinitions">
  </StringListProperty>
  <BoolProperty
     Name="UndefineAllPreprocessorDefinitions"
     DisplayName="Undefine All Preprocessor Definitions"
     Description="Undefine all previously defined preprocessor values.     (/u)"
     Category="Preprocessor"
     Switch="u"
     F1Keyword="VC.Project.VCCLCompilerTool.UndefineAllPreprocessorDefinitions">
  </BoolProperty>
  <BoolProperty
     Name="PreprocessToFile"
     DisplayName="Preprocess to a File"
     Description="Preprocesses C and C++ source files and writes the preprocessed output to a file. This option suppresses compilation, thus it does not produce an .obj file."
     Category="Preprocessor"
     Switch="P"
     F1Keyword="VC.Project.VCCLCompilerTool.GeneratePreprocessedFile">
  </BoolProperty>
  <StringProperty
     Name="PreprocessOutputPath"
     DisplayName="Preprocess Output Path"
     Description="Specify the output path for the preprocesser. The default location is the same as the source file(s)."
     Category="Preprocessor"
     Switch="Fi"
     Visible="false">
  </StringProperty>
  <BoolProperty
     Name="PreprocessSuppressLineNumbers"
     DisplayName="Preprocess Suppress Line Numbers"
     Description="Preprocess without #line directives."
     Category="Preprocessor"
     Switch="EP"
     F1Keyword="VC.Project.VCCLCompilerTool.GeneratePreprocessedFileNoLines">
  </BoolProperty>
  <BoolProperty
     Name="PreprocessKeepComments"
     DisplayName="Keep Comments"
     Description="Suppresses comment strip from source code; requires that one of the 'Preprocessing' options be set.     (/C)"
     Category="Preprocessor"
     Switch="C"
     F1Keyword="VC.Project.VCCLCompilerTool.KeepComments">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="GF-"
     Name="StringPooling"
     DisplayName="Enable String Pooling"
     Description="Enables the compiler to create a single read-only copy of identical strings in the program image and in memory during execution, resulting in smaller programs, an optimization called string pooling. /O1, /O2, and /ZI  automatically set /GF option. "
     Category="Code Generation"
     Switch="GF"
     F1Keyword="VC.Project.VCCLCompilerTool.StringPooling">
  </BoolProperty>
  <EnumProperty
     Name="ExceptionHandling"
     DisplayName="Enable C++ Exceptions"
     Description="Specifies the model of exception handling to be used by the compiler."
     Category="Code Generation"
     F1Keyword="VC.Project.VCCLCompilerTool.ExceptionHandling">
    <EnumValue
       Name="Async"
       Switch="EHa"
       DisplayName="Yes with SEH Exceptions"
       Description="The exception-handling model that catches asynchronous (structured) and synchronous (C++) exceptions. (/EHa)">
    </EnumValue>
    <EnumValue
       Name="Sync"
       Switch="EHsc"
       DisplayName="Yes"
       Description="The exception-handling model that catches C++ exceptions only and tells the compiler to assume that extern C functions never throw a C++ exception. (/EHsc)">
    </EnumValue>
    <EnumValue
       Name="SyncCThrow"
       Switch="EHs"
       DisplayName="Yes with Extern C functions"
       Description="The exception-handling model that catches C++ exceptions only and tells the compiler to assume that extern C functions do throw an exception. (/EHs)">
    </EnumValue>
    <EnumValue
       Name="false"
       Switch=""
       DisplayName="No"
       Description="No exception handling.">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     Name="SmallerTypeCheck"
     DisplayName="Smaller Type Check"
     Description="Enable checking for conversion to smaller types, incompatible with any optimization type other than debug.     (/RTCc)"
     Category="Code Generation"
     Switch="RTCc"
     F1Keyword="VC.Project.VCCLCompilerTool.SmallerTypeCheck">
  </BoolProperty>
  <EnumProperty
     Name="RuntimeLibrary"
     DisplayName="Runtime Library"
     Description="Specify runtime library for linking.     (/MT, /MTd, /MD, /MDd)"
     Category="Code Generation"
     F1Keyword="VC.Project.VCCLCompilerTool.RuntimeLibrary">
    <EnumValue
       Name="MultiThreaded"
       Switch="MT"
       DisplayName="Multi-threaded"
       Description="Causes your application to use the multithread, static version of the run-time library.">
    </EnumValue>
    <EnumValue
       Name="MultiThreadedDebug"
       Switch="MTd"
       DisplayName="Multi-threaded Debug"
       Description="Defines _DEBUG and _MT. This option also causes the compiler to place the library name LIBCMTD.lib into the .obj file so that the linker will use LIBCMTD.lib to resolve external symbols.">
    </EnumValue>
    <EnumValue
       Name="MultiThreadedDLL"
       Switch="MD"
       DisplayName="Multi-threaded DLL"
       Description="Causes your application to use the multithread- and DLL-specific version of the run-time library. Defines _MT and _DLL and causes the compiler to place the library name MSVCRT.lib into the .obj file.">
    </EnumValue>
    <EnumValue
       Name="MultiThreadedDebugDLL"
       Switch="MDd"
       DisplayName="Multi-threaded Debug DLL"
       Description="Defines _DEBUG, _MT, and _DLL and causes your application to use the debug multithread- and DLL-specific version of the run-time library. It also causes the compiler to place the library name MSVCRTD.lib into the .obj file.">
    </EnumValue>
  </EnumProperty>
  <EnumProperty
     Name="StructMemberAlignment"
     DisplayName="Struct Member Alignment"
     Description="Specifies 1, 2, 4, 8, or 16-byte boundaries for struct member alignment.     (/Zp[num])"
     Category="Code Generation"
     F1Keyword="VC.Project.VCCLCompilerTool.StructMemberAlignment">
    <EnumValue
       Name="1Byte"
       Switch="Zp1"
       DisplayName="1 Byte"
       Description="Packs structures on 1-byte boundaries. Same as /Zp.">
    </EnumValue>
    <EnumValue
       Name="2Bytes"
       Switch="Zp2"
       DisplayName="2 Bytes"
       Description="Packs structures on 2-byte boundaries.">
    </EnumValue>
    <EnumValue
       Name="4Bytes"
       Switch="Zp4"
       DisplayName="4 Byte"
       Description="Packs structures on 4-byte boundaries.">
    </EnumValue>
    <EnumValue
       Name="8Bytes"
       Switch="Zp8"
       DisplayName="8 Bytes"
       Description="Packs structures on 8-byte boundaries (default).">
    </EnumValue>
    <EnumValue
       Name="16Bytes"
       Switch="Zp16"
       DisplayName="16 Bytes"
       Description="Packs structures on 16-byte boundaries.">
    </EnumValue>
    <EnumValue
       Name="Default"
       Switch=""
       DisplayName="Default"
       Description="Default alignment settings.">
    </EnumValue>
  </EnumProperty>
  <EnumProperty
     Name="BufferSecurityCheck"
     DisplayName="Security Check"
     Description="The Security Check helps detect stack-buffer over-runs, a common attempted attack upon a program's security.  .  (/GS-, /GS)"
     Category="Code Generation"
     F1Keyword="VC.Project.VCCLCompilerTool.BufferSecurityCheck">
    <EnumValue
       Name="false"
       Switch="GS-"
       DisplayName="Disable Security Check"
       Description="Disable Security Check. (/GS-)">
    </EnumValue>
    <EnumValue
       Name="true"
       Switch="GS"
       DisplayName="Enable Security Check"
       Description="Enable Security Check. (/GS)">
    </EnumValue>
  </EnumProperty>
  <EnumProperty
     Name="ControlFlowGuard"
     DisplayName="Control Flow Guard"
     Description="Guard security check helps detect attempts to dispatch to illegal block of code. (/guard:cf)"
     Category="Code Generation"
     F1Keyword="VC.Project.VCCLCompilerTool.ControlFlowGuard">
    <EnumValue
       Name="Guard"
       Switch="guard:cf"
       DisplayName="Yes"
       Description="Enable Security Check with Guard (/guard:cf)">
    </EnumValue>
    <EnumValue
       Name="false"
       Switch=""
       DisplayName="No">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     ReverseSwitch="Gy-"
     Name="FunctionLevelLinking"
     DisplayName="Enable Function-Level Linking"
     Description="Allows the compiler to package individual functions in the form of packaged functions (COMDATs). Required for edit and continue to work.     (/Gy)"
     Category="Code Generation"
     Switch="Gy"
     F1Keyword="VC.Project.VCCLCompilerTool.EnableFunctionLevelLinking">
  </BoolProperty>
  <EnumProperty
     Name="EnableEnhancedInstructionSet"
     DisplayName="Enable Enhanced Instruction Set"
     Description="Enable use of instructions found on processors that support enhanced instruction sets. If no option is specified, the compiler will use instructions found on processors that support SSE2. Use of enhanced instructions can be disabled with /arch:IA32.   (/arch:SSE, /arch:SSE2, /arch:AVX, /arch:AVX2, /arch:AVX512, /arch:IA32, /arch:ARMv7VE, /arch:VFPv4, /arch:[armv8.0-armv8.8],)"
     Category="Code Generation"
     F1Keyword="VC.Project.VCCLCompilerTool.EnableEnhancedInstructionSet">
    <EnumValue
       Name="StreamingSIMDExtensions"
       Switch="arch:SSE"
       DisplayName="Streaming SIMD Extensions (X86)"
       Description="Streaming SIMD Extensions (X86). (/arch:SSE)">
    </EnumValue>
    <EnumValue
       Name="StreamingSIMDExtensions2"
       Switch="arch:SSE2"
       DisplayName="Streaming SIMD Extensions 2 (X86)"
       Description="Streaming SIMD Extensions 2 (X86). (/arch:SSE2)">
    </EnumValue>
    <EnumValue
       Name="AdvancedVectorExtensions"
       Switch="arch:AVX"
       DisplayName="Advanced Vector Extensions (X86/X64)"
       Description="Advanced Vector Extensions (X86/X64). (/arch:AVX)">
    </EnumValue>
    <EnumValue
       Name="AdvancedVectorExtensions2"
       Switch="arch:AVX2"
       DisplayName="Advanced Vector Extensions 2 (X86/X64)"
       Description="Advanced Vector Extensions 2 (X86/X64). (/arch:AVX2)">
    </EnumValue>
    <EnumValue
       Name="AdvancedVectorExtensions512"
       Switch="arch:AVX512"
       DisplayName="Advanced Vector Extensions 512 (X86/X64)"
       Description="Advanced Vector Extensions 512. (X86/X64) (/arch:AVX512)">
    </EnumValue>
    <EnumValue
       Name="AdvancedVectorExtensions101"
       Switch="arch:AVX10.1"
       DisplayName="Advanced Vector Extensions AVX10.1 (X86/X64)"
       Description="Advanced Vector Extensions 10.1. (X86/X64) (/arch:AVX10.1)">
    </EnumValue>
    <EnumValue
       Name="VirtualizationExtensions"
       Switch="arch:ARMv7VE"
       DisplayName="Virtualization Extensions (ARM)"
       Description="Virtualization Extensions (ARM). (/arch:ARMv7VE)">
    </EnumValue>
    <EnumValue
       Name="ARMVFPv4Instructions"
       Switch="arch:VFPv4"
       DisplayName="ARM VFPv4 instructions (ARM)"
       Description="ARM VFPv4 instructions (ARM). (/arch:VFPv4)">
    </EnumValue>
    <EnumValue
       Name="CPUExtensionRequirementsARMv80"
       Switch="arch:armv8.0"
       DisplayName="CPU extension requirements ARMv8.0-A (ARM64)"
       Description="CPU extension requirements ARMv8.0-A (ARM64). (/arch:armv8.0)">
    </EnumValue>
    <EnumValue
       Name="CPUExtensionRequirementsARMv81"
       Switch="arch:armv8.1"
       DisplayName="CPU extension requirements ARMv8.1-A (ARM64)"
       Description="CPU extension requirements ARMv8.1-A (ARM64). (/arch:armv8.1)">
    </EnumValue>
    <EnumValue
       Name="CPUExtensionRequirementsARMv82"
       Switch="arch:armv8.2"
       DisplayName="CPU extension requirements ARMv8.2-A (ARM64)"
       Description="CPU extension requirements ARMv8.2-A (ARM64). (/arch:armv8.2)">
    </EnumValue>
    <EnumValue
       Name="CPUExtensionRequirementsARMv83"
       Switch="arch:armv8.3"
       DisplayName="CPU extension requirements ARMv8.3-A (ARM64)"
       Description="CPU extension requirements ARMv8.3-A (ARM64). (/arch:armv8.3)">
    </EnumValue>
    <EnumValue
       Name="CPUExtensionRequirementsARMv84"
       Switch="arch:armv8.4"
       DisplayName="CPU extension requirements ARMv8.4-A (ARM64)"
       Description="CPU extension requirements ARMv8.4-A (ARM64). (/arch:armv8.4)">
    </EnumValue>
    <EnumValue
       Name="CPUExtensionRequirementsARMv85"
       Switch="arch:armv8.5"
       DisplayName="CPU extension requirements ARMv8.5-A (ARM64)"
       Description="CPU extension requirements ARMv8.5-A (ARM64). (/arch:armv8.5)">
    </EnumValue>
    <EnumValue
       Name="CPUExtensionRequirementsARMv86"
       Switch="arch:armv8.6"
       DisplayName="CPU extension requirements ARMv8.6-A (ARM64)"
       Description="CPU extension requirements ARMv8.6-A (ARM64). (/arch:armv8.6)">
    </EnumValue>
    <EnumValue
       Name="CPUExtensionRequirementsARMv87"
       Switch="arch:armv8.7"
       DisplayName="CPU extension requirements ARMv8.7-A (ARM64)"
       Description="CPU extension requirements ARMv8.7-A (ARM64). (/arch:armv8.7)">
    </EnumValue>
    <EnumValue
       Name="CPUExtensionRequirementsARMv88"
       Switch="arch:armv8.8"
       DisplayName="CPU extension requirements ARMv8.8-A (ARM64)"
       Description="CPU extension requirements ARMv8.8-A (ARM64). (/arch:armv8.8)">
    </EnumValue>
    <EnumValue
       Name="NoExtensions"
       Switch="arch:IA32"
       DisplayName="No Enhanced Instructions"
       Description="No Enhanced Instructions. (/arch:IA32)">
    </EnumValue>
    <EnumValue
       Name="NotSet"
       Switch=""
       DisplayName="Not Set"
       Description="Not Set.">
    </EnumValue>
  </EnumProperty>
  <EnumProperty
     Name="FloatingPointModel"
     DisplayName="Floating Point Model"
     Description="Sets the floating point model.     (/fp:precise, /fp:strict, /fp:fast)"
     Category="Code Generation"
     F1Keyword="VC.Project.VCCLCompilerTool.floatingPointModel">
    <EnumValue
       Name="Precise"
       Switch="fp:precise"
       DisplayName="Precise"
       Description="Default. Improves the consistency of floating-point tests for equality and inequality.">
    </EnumValue>
    <EnumValue
       Name="Strict"
       Switch="fp:strict"
       DisplayName="Strict"
       Description="The strictest floating-point model. /fp:strict causes fp_contract to be OFF and fenv_access to be ON. /fp:except is implied and can be disabled by explicitly specifying /fp:except-. When used with /fp:except-, /fp:strict enforces strict floating-point semantics but without respect for exceptional events.">
    </EnumValue>
    <EnumValue
       Name="Fast"
       Switch="fp:fast"
       DisplayName="Fast"
       Description="Creates the fastest code in the majority of cases. ">
    </EnumValue>
    <EnumValue
       Name="Default"
       Switch=""
       DisplayName="Default"
       Description="Default.">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     ReverseSwitch="fp:except-"
     Name="FloatingPointExceptions"
     DisplayName="Enable Floating Point Exceptions"
     Description="Reliable floating-point exception model. Exceptions will be raised immediately after they are triggered.      (/fp:except)"
     Category="Code Generation"
     Switch="fp:except"
     F1Keyword="VC.Project.VCCLCompilerTool.FloatingPointExceptions">
  </BoolProperty>
  <BoolProperty
     Name="IntelJCCErratum"
     DisplayName="Enable Intel JCC Erratum Mitigation"
     Description=" Software mitigation for the performance impact caused by the Intel JCC erratum microcode update.       (/QIntel-jcc-erratum)"
     Category="Code Generation"
     Switch="QIntel-jcc-erratum"
     F1Keyword="VC.Project.VCCLCompilerTool.IntelJCCErratum">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="guard:ehcont-"
     Name="GuardEHContMetadata"
     DisplayName="Enable EH Continuation Metadata"
     Description="Generates a sorted list of all the valid exception handling continuation targets for a binary, used during runtime for RIP validation. Currently available for x64 builds.  (/guard:ehcont)"
     Category="Code Generation"
     Switch="guard:ehcont"
     F1Keyword="VC.Project.VCCLCompilerTool.GuardEHContMetadata">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="GR-"
     Name="RuntimeTypeInfo"
     DisplayName="Enable Run-Time Type Information"
     Description="Adds code for checking C++ object types at run time (runtime type information).     (/GR, /GR-)"
     Category="Language"
     Switch="GR"
     F1Keyword="VC.Project.VCCLCompilerTool.RuntimeTypeInfo">
  </BoolProperty>
  <EnumProperty
     Name="LanguageStandard"
     DisplayName="C++ Language Standard"
     Description="Determines the C++ language standard the compiler will enforce. It is recommended to use the latest version when possible. (/std:c++14, /std:c++17, /std:c++20, /std:c++23preview, /std:c++latest)"
     Category="Language"
     F1Keyword="VC.Project.VCCLCompilerTool.CppLanguageStandard">
    <EnumValue
       Name="Default"
       Switch=""
       DisplayName="Default (ISO C++14 Standard)">
    </EnumValue>
    <EnumValue
       Name="stdcpp14"
       Switch="std:c++14"
       DisplayName="ISO C++14 Standard">
    </EnumValue>
    <EnumValue
       Name="stdcpp17"
       Switch="std:c++17"
       DisplayName="ISO C++17 Standard">
    </EnumValue>
    <EnumValue
       Name="stdcpp20"
       Switch="std:c++20"
       DisplayName="ISO C++20 Standard">
    </EnumValue>
    <EnumValue
       Name="stdcpp23"
       Switch="std:c++23preview"
       DisplayName="Preview - ISO C++23 Standard">
    </EnumValue>
    <EnumValue
       Name="stdcpplatest"
       Switch="std:c++latest"
       DisplayName="Preview - Features from the Latest C++ Working Draft">
    </EnumValue>
  </EnumProperty>
  <EnumProperty
     Name="LanguageStandard_C"
     DisplayName="C Language Standard"
     Description="Determines the C language standard the compiler will enforce. It is recommended to use the latest version when possible. (/std:c11, /std:c17, /std:clatest)"
     Category="Language"
     F1Keyword="VC.Project.VCCLCompilerTool.CLanguageStandard">
    <EnumValue
       Name="Default"
       Switch=""
       DisplayName="Default (Legacy MSVC)">
    </EnumValue>
    <EnumValue
       Name="stdc11"
       Switch="std:c11"
       DisplayName="ISO C11 Standard">
    </EnumValue>
    <EnumValue
       Name="stdc17"
       Switch="std:c17"
       DisplayName="ISO C17 (2018) Standard">
    </EnumValue>
    <EnumValue
       Name="stdclatest"
       Switch="std:clatest"
       DisplayName="Preview - Features from the Latest C Working Draft">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     Name="BuildStlModules"
     DisplayName="Build ISO C++23 Standard Library Modules"
     Description="Enables automatic build of std and std.compat modules when using /std:c++latest."
     Category="Language"
     IncludeInCommandLine="false"
     F1Keyword="VC.Project.VCCLCompilerTool.BuildStlModules">
  </BoolProperty>
  <EnumProperty
     Name="PrecompiledHeader"
     DisplayName="Precompiled Header"
     Description="Create/Use Precompiled Header : Enables creation or use of a precompiled header during the build.     (/Yc, /Yu)"
     Category="Precompiled Headers"
     F1Keyword="VC.Project.VCCLCompilerTool.UsePrecompiledHeader">
    <EnumValue
       Name="Create"
       Switch="Yc"
       DisplayName="Create"
       Description="Instructs the compiler to create a precompiled header (.pch) file that represents the state of compilation at a certain point.">
      <Argument
         Property="PrecompiledHeaderFile"
         IsRequired="false" />
    </EnumValue>
    <EnumValue
       Name="Use"
       Switch="Yu"
       DisplayName="Use"
       Description="Instructs the compiler to use an existing precompiled header (.pch) file in the current compilation.">
      <Argument
         Property="PrecompiledHeaderFile"
         IsRequired="false" />
    </EnumValue>
    <EnumValue
       Name="NotUsing"
       Switch=""
       DisplayName="Not Using Precompiled Headers"
       Description="Not using precompiled headers. ">
    </EnumValue>
  </EnumProperty>
  <StringProperty
     Subtype="file"
     Name="PrecompiledHeaderFile"
     DisplayName="Precompiled Header File"
     Description="Specifies header file name to use when creating or using a precompiled header file. (/Yc[name], /Yu[name])"
     Category="Precompiled Headers"
     F1Keyword="VC.Project.VCCLCompilerTool.PrecompiledHeaderThrough">
  </StringProperty>
  <StringProperty
     Subtype="file"
     Name="PrecompiledHeaderOutputFile"
     DisplayName="Precompiled Header Output File"
     Description="Specifies the path and/or name of the generated precompiled header file. (/Fp[name])"
     Category="Precompiled Headers"
     Switch="Fp"
     F1Keyword="VC.Project.VCCLCompilerTool.PrecompiledHeaderFile">
  </StringProperty>
  <EnumProperty
     Name="AssemblerOutput"
     DisplayName="Assembler Output"
     Description="Specifies the contents of assembly language output file.     (/FA, /FAc, /FAs, /FAcs)"
     Category="Output Files"
     F1Keyword="VC.Project.VCCLCompilerTool.AssemblerOutput">
    <EnumValue
       Name="NoListing"
       Switch=""
       DisplayName="No Listing"
       Description="No listing. ">
    </EnumValue>
    <EnumValue
       Name="AssemblyCode"
       Switch="FA"
       DisplayName="Assembly-Only Listing"
       Description="Assembly code; .asm">
    </EnumValue>
    <EnumValue
       Name="AssemblyAndMachineCode"
       Switch="FAc"
       DisplayName="Assembly With Machine Code"
       Description="Machine and assembly code; .cod">
    </EnumValue>
    <EnumValue
       Name="AssemblyAndSourceCode"
       Switch="FAs"
       DisplayName="Assembly With Source Code"
       Description="Source and assembly code; .asm">
    </EnumValue>
    <EnumValue
       Name="All"
       Switch="FAcs"
       DisplayName="Assembly, Machine Code and Source"
       Description="Assembly, machine code and source code; .cod">
    </EnumValue>
  </EnumProperty>
  <StringProperty
     Subtype="file"
     Name="AssemblerListingLocation"
     DisplayName="ASM List Location"
     Description="Specifies relative path and/or name for ASM listing file; can be file or directory name.     (/Fa[name])"
     Category="Output Files"
     Switch="Fa"
     F1Keyword="VC.Project.VCCLCompilerTool.AssemblerListingLocation">
  </StringProperty>
  <StringProperty
     Subtype="file"
     Name="ObjectFileName"
     DisplayName="Object File Name"
     Description="Specifies a name to override the default object file name; can be file or directory name.     (/Fo[name])"
     Category="Output Files"
     Switch="Fo"
     F1Keyword="VC.Project.VCCLCompilerTool.ObjectFile">
  </StringProperty>
  <EnumProperty
     Name="CallingConvention"
     DisplayName="Calling Convention"
     Description="Select the default calling convention for your application (can be overridden by function).     (/Gd, /Gr, /Gz, /Gv)"
     Category="Advanced"
     F1Keyword="VC.Project.VCCLCompilerTool.CallingConvention">
    <EnumValue
       Name="Cdecl"
       Switch="Gd"
       DisplayName="__cdecl"
       Description="Specifies the __cdecl calling convention for all functions except C++ member functions and functions marked __stdcall or __fastcall.">
    </EnumValue>
    <EnumValue
       Name="FastCall"
       Switch="Gr"
       DisplayName="__fastcall"
       Description="Specifies the __fastcall calling convention for all functions except C++ member sfunctions and functions marked __cdecl or __stdcall. All __fastcall functions must have prototypes.">
    </EnumValue>
    <EnumValue
       Name="StdCall"
       Switch="Gz"
       DisplayName="__stdcall"
       Description="Specifies the __stdcall calling convention for all functions except C++ member functions and functions marked __cdecl or __fastcall. All __stdcall functions must have prototypes.">
    </EnumValue>
    <EnumValue
       Name="VectorCall"
       Switch="Gv"
       DisplayName="__vectorcall"
       Description="Specifies the __vectorcall calling convention for all functions except C++ member functions and functions marked __cdecl, __fastcall, or __stdcall. All __vectorcall functions must have prototypes.">
    </EnumValue>
  </EnumProperty>
  <EnumProperty
     Name="CompileAs"
     DisplayName="Compile As"
     Description="Select compile language option for .c and .cpp files.     (/TC, /TP, /interface, /internalPartition, /exportHeader)"
     Category="Advanced"
     F1Keyword="VC.Project.VCCLCompilerTool.CompileAs">
    <EnumValue
       Name="Default"
       Switch=""
       DisplayName="Default"
       Description="Default.">
    </EnumValue>
    <EnumValue
       Name="CompileAsC"
       Switch="TC"
       DisplayName="Compile as C Code"
       Description="Compile as C Code.">
    </EnumValue>
    <EnumValue
       Name="CompileAsCpp"
       Switch="TP"
       DisplayName="Compile as C++ Code"
       Description="Compile as C++ Code.">
    </EnumValue>
    <EnumValue
       Name="CompileAsCppModule"
       Switch="interface "
       DisplayName="Compile as C++ Module Code"
       Description="Compile as C++ Module Interace.">
    </EnumValue>
    <EnumValue
       Name="CompileAsCppModuleInternalPartition"
       Switch="internalPartition "
       DisplayName="Compile as C++ Module Internal Partition"
       Description="Compile as C++ Module Internal Partition.">
    </EnumValue>
    <EnumValue
       Name="CompileAsHeaderUnit"
       Switch="exportHeader "
       DisplayName="Compile as C++ Header Unit"
       Description="Compile as C++ Header Unit.">
    </EnumValue>
  </EnumProperty>
  <StringListProperty
     Subtype="file"
     Name="ForcedIncludeFiles"
     DisplayName="Forced Include File"
     Description="one or more forced include files.     (/FI[name])"
     Category="Advanced"
     Switch="FI"
     F1Keyword="VC.Project.VCCLCompilerTool.ForcedIncludeFiles">
  </StringListProperty>
  <BoolProperty
     Name="ShowIncludes"
     DisplayName="Show Includes"
     Description="Generates a list of include files with compiler output.     (/showIncludes)"
     Category="Advanced"
     Switch="showIncludes"
     F1Keyword="VC.Project.VCCLCompilerTool.ShowIncludes">
  </BoolProperty>
  <BoolProperty
     Name="OmitDefaultLibName"
     DisplayName="Omit Default Library Name"
     Description="Do not include default library names in .obj files.     (/Zl)"
     Category="Advanced"
     Switch="Zl"
     F1Keyword="VC.Project.VCCLCompilerTool.OmitDefaultLibName">
  </BoolProperty>
  <StringProperty
     Name="AdditionalOptions"
     DisplayName="Additional Options"
     Description="Additional Options."
     Category="Command Line"
     F1Keyword="vc.project.AdditionalOptionsPage">
  </StringProperty>
  <BoolProperty
     Name="BuildingInIde"
     Visible="false">
  </BoolProperty>
</Rule>