﻿<?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="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>
  <BoolProperty Name="MSVCErrorReport" DisplayName="Visual Studio Errors Reporting" Description="Report errors which Visual Studio can use to parse for file and line information." Category="General" Switch="fdiagnostics-format=msvc" Visible="false" F1Keyword="">
  </BoolProperty>
  <StringProperty Name="GccToolChain" DisplayName="Gcc Tool Chain" Description="Folder path to Gcc Tool Chain." Category="General" Switch="gcc-toolchain " Visible="false" F1Keyword="">
  </StringProperty>
  <StringProperty Name="TargetArch" DisplayName="Target Architecture" Description="Target Architecture" Category="General" Switch="target " Visible="false" F1Keyword="">
  </StringProperty>
  <StringProperty Name="Sysroot" DisplayName="Sysroot" Description="Folder path to the root directory for headers and libraries." Category="General" Switch="-sysroot=" Visible="false" F1Keyword="">
  </StringProperty>
  <StringListProperty Subtype="folder" Name="AdditionalIncludeDirectories" DisplayName="Additional Include Directories" Description="Specifies one or more directories to add to the include path; separate with semi-colons if more than one. (-I[path])." Category="General" Switch="I " F1Keyword="VC.Project.VCClangCompilerTool.AdditionalIncludeDirectories">
  </StringListProperty>
  <EnumProperty Name="DebugInformationFormat" DisplayName="Debug Information Format" Description="Specifies the type of debugging information generated by the compiler." Category="General" F1Keyword="VC.Project.VCClangCompilerTool.DebugInformationFormat">
    <EnumValue Name="None" Switch="g0" DisplayName="None" Description="Produces no debugging information, so compilation may be faster.">
    </EnumValue>
    <EnumValue Name="FullDebug" Switch="g2 -gdwarf-2" DisplayName="Full Debug Information (DWARF2)" Description="Generate DWARF2 debug information.">
    </EnumValue>
    <EnumValue Name="LineNumber" Switch="gline-tables-only" DisplayName="Line Number Information" Description="Generate Line Number information only.">
    </EnumValue>
  </EnumProperty>
  <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="General" Switch="o " F1Keyword="VC.Project.VCClangCompilerTool.ObjectFile">
  </StringProperty>
  <EnumProperty Name="WarningLevel" DisplayName="Warning Level" Description="Select how strict you want the compiler to be about code errors.  Other flags should be added directly to Additional Options. (/w, /Weverything)." Category="General" F1Keyword="VC.Project.VCClangCompilerTool.WarningLevel">
    <EnumValue Name="TurnOffAllWarnings" Switch="w" DisplayName="Turn Off All Warnings" Description="Disables all compiler warnings.">
    </EnumValue>
    <EnumValue Name="EnableAllWarnings" Switch="Wall" DisplayName="EnableAllWarnings" Description="Enables all warnings, including those disabled by default.">
    </EnumValue>
  </EnumProperty>
  <BoolProperty 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="Werror" F1Keyword="VC.Project.VCClangCompilerTool.WarnAsError">
  </BoolProperty>
  <BoolProperty Name="Verbose" DisplayName="Enable Verbose mode" Description="Show commands to run and use verbose output." Category="General" Switch="v" F1Keyword="VC.Project.VCClangCompilerTool.Verbose">
  </BoolProperty>
  <StringProperty Subtype="folder" Name="TrackerLogDirectory" DisplayName="Tracker Log Directory" Description="Tracker Log Directory." Category="General" IncludeInCommandLine="false" Visible="false">
  </StringProperty>
  <EnumProperty Name="Optimization" DisplayName="Optimization" Description="Specifies the optimization level for the application." Category="Optimization" F1Keyword="VC.Project.VCClangCompilerTool.Optimization">
    <EnumValue Name="Custom" Switch="" DisplayName="Custom" Description="Custom optimization.">
    </EnumValue>
    <EnumValue Name="Disabled" Switch="O0" DisplayName="Disabled" Description="Disable optimization.">
    </EnumValue>
    <EnumValue Name="MinSize" Switch="Os" DisplayName="Minimize Size" Description="Optimize for size.">
    </EnumValue>
    <EnumValue Name="MaxSpeed" Switch="O2" DisplayName="Maximize Speed" Description="Optimize for speed.">
    </EnumValue>
    <EnumValue Name="Full" Switch="O3" DisplayName="Full Optimization" Description="Expensive optimizations.">
    </EnumValue>
  </EnumProperty>
  <BoolProperty ReverseSwitch="fno-strict-aliasing" Name="StrictAliasing" DisplayName="Strict Aliasing" Description="Assume the strictest aliasing rules.  An object of one type will never be assumed to reside at the same address as an object of a different type." Category="Optimization" Switch="fstrict-aliasing" F1Keyword="VC.Project.VCClangCompilerTool.StrictAliasing">
  </BoolProperty>
  <EnumProperty Name="ThumbMode" DisplayName="Thumb Mode" Description="Generate code that executes for thumb microarchitecture. This is applicable for arm architecture only." Category="Optimization" Visible="false" F1Keyword="VC.Project.VCClangCompilerTool.ThumbMode">
    <EnumProperty.DataSource>
      <DataSource Persistence="ProjectFile" ItemType="" Label="Configuration" HasConfigurationCondition="true" />
    </EnumProperty.DataSource>
    <EnumValue Name="Thumb" Switch="mthumb" DisplayName="Thumb" Description="Generate Thumb code.">
    </EnumValue>
    <EnumValue Name="ARM" Switch="marm" DisplayName="Arm" Description="Generate Arm code.">
    </EnumValue>
    <EnumValue Name="Disabled" Switch="" DisplayName="Disabled" Description="Option not applicable for chosen platform.">
    </EnumValue>
  </EnumProperty>
  <BoolProperty ReverseSwitch="fno-omit-frame-pointer" Name="OmitFramePointers" DisplayName="Omit Frame Pointer" Description="Suppresses creation of frame pointers on the call stack." Category="Optimization" Switch="fomit-frame-pointer" F1Keyword="VC.Project.VCClangCompilerTool.OmitFramePointers">
  </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.VCClangCompilerTool.ExceptionHandling">
    <EnumValue Name="Disabled" Switch="fno-exceptions" DisplayName="No" Description="Disable exception handling.">
    </EnumValue>
    <EnumValue Name="Enabled" Switch="fexceptions" DisplayName="Yes" Description="Enable exception handling.">
    </EnumValue>
    <EnumValue Name="UnwindTables" Switch="funwind-tables" DisplayName="Unwind Tables" Description="Generates any needed static data, but does not affect the code generated.">
    </EnumValue>
  </EnumProperty>
  <BoolProperty 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.     (ffunction-sections)." Category="Code Generation" Switch="ffunction-sections" F1Keyword="VC.Project.VCClangCompilerTool.EnableFunctionLevelLinking">
  </BoolProperty>
  <BoolProperty Name="DataLevelLinking" DisplayName="Enable Data-Level Linking" Description="Enables linker optimizations to remove unused data by emitting each data item in a separate section." Category="Code Generation" Switch="fdata-sections" F1Keyword="VC.Project.VCClangCompilerTool.DataLevelLinking">
  </BoolProperty>
  <BoolProperty Name="EnableNeonCodegen" DisplayName="Enable Advanced SIMD(Neon)" Description="Enables code generation for NEON floating point hardware. This is applicable for arm architecture only." Category="Code Generation" Switch="mfpu=neon" F1Keyword="VC.Project.VCClangCompilerTool.DataLevelLinking">
  </BoolProperty>
  <EnumProperty Name="FloatABI" DisplayName="Floating-point ABI" Description="Selection option to choose the floating point ABI." Category="Code Generation" F1Keyword="VC.Project.VCClangCompilerTool.FloatABI">
    <EnumValue Name="soft" Switch="mfloat-abi=soft" DisplayName="Soft" Description="'Soft' causes compiler to generate output containing library calls for floating-point operations.">
    </EnumValue>
    <EnumValue Name="softfp" Switch="mfloat-abi=softfp" DisplayName="SoftFP" Description="'SoftFP' allows the generation of code using hardware floating-point instructions, but still uses the soft-float calling conventions.">
    </EnumValue>
    <EnumValue Name="hard" Switch="mfloat-abi=hard" DisplayName="Hard" Description="'Hard' alows generation of floating-point instructions and uses FPU-specific calling conventions.">
    </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. (fstack-protector)." Category="Code Generation" F1Keyword="VC.Project.VCClangCompilerTool.BufferSecurityCheck">
    <EnumValue Name="false" Switch="" DisplayName="Disable Security Check" Description="Disable Security Check.">
    </EnumValue>
    <EnumValue Name="true" Switch="fstack-protector" DisplayName="Enable Security Check" Description="Enable Security Check. (fstack-protector)">
    </EnumValue>
  </EnumProperty>
  <BoolProperty Name="PositionIndependentCode" DisplayName="Position Independent Code" Description="Generate Position Independent Code (PIC) for use in a shared library." Category="Code Generation" Switch="fpic" F1Keyword="VC.Project.VCClangCompilerTool.PIC">
  </BoolProperty>
  <BoolProperty ReverseSwitch="fno-short-enums" Name="UseShortEnums" DisplayName="Use Short Enums" Description="Enum type uses only as many bytes required by input set of possible values." Category="Code Generation" Switch="fshort-enums" F1Keyword="VC.Project.VCClangCompilerTool.UseShortEnums">
  </BoolProperty>
  <EnumProperty Name="RuntimeLibrary" DisplayName="Runtime Library" Description="Specify runtime library for linking.     (MSVC /MT, /MTd, /MD, /MDd switches)" Category="Code Generation" F1Keyword="VC.Project.VCCLCompilerTool.RuntimeLibrary">
    <EnumValue Name="MultiThreaded" Switch="" DisplayName="Multi-threaded" Description="Causes your application to use the multithread, static version of the run-time library.">
    </EnumValue>
    <EnumValue Name="MultiThreadedDebug" Switch="" 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="" 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="" 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>
  <BoolProperty ReverseSwitch="fno-rtti" Name="RuntimeTypeInfo" DisplayName="Enable Run-Time Type Information" Description="Adds code for checking C++ object types at run time (runtime type information).     (frtti, fno-rtti)" Category="Language" Switch="frtti" F1Keyword="VC.Project.VCClangCompilerTool.RuntimeTypeInfo">
  </BoolProperty>
  <EnumProperty Name="CLanguageStandard" DisplayName="C Language Standard" Description="Determines the C language standard." Category="Language" F1Keyword="VC.Project.VCClangCompilerTool.CLanguageStandard">
    <EnumValue Name="Default" Switch="" DisplayName="Default">
    </EnumValue>
    <EnumValue Name="c89" Switch="std=c89" DisplayName="C89" Description="C89 Language Standard.">
    </EnumValue>
    <EnumValue Name="c99" Switch="std=c99" DisplayName="C99" Description="C99 Language Standard.">
    </EnumValue>
    <EnumValue Name="c11" Switch="std=c11" DisplayName="C11" Description="C11 Language Standard.">
    </EnumValue>
    <EnumValue Name="gnu99" Switch="std=gnu99" DisplayName="C99 (GNU Dialect)" Description="C99 (GNU Dialect) Language Standard.">
    </EnumValue>
    <EnumValue Name="gnu11" Switch="std=gnu11" DisplayName="C11 (GNU Dialect)" Description="C11 (GNU Dialect) Language Standard.">
    </EnumValue>
  </EnumProperty>
  <EnumProperty Name="CppLanguageStandard" DisplayName="C++ Language Standard" Description="Determines the C++ language standard." Category="Language" F1Keyword="VC.Project.VCClangCompilerTool.CppLanguageStandard">
    <EnumValue Name="Default" Switch="" DisplayName="Default" Description="">
    </EnumValue>
    <EnumValue Name="c++98" Switch="std=c++98" DisplayName="C++03" Description="C++03 Language Standard.">
    </EnumValue>
    <EnumValue Name="c++11" Switch="std=c++11" DisplayName="C++11" Description="C++11 Language Standard.">
    </EnumValue>
    <EnumValue Name="c++1y" Switch="std=c++1y" DisplayName="C++14" Description="C++14 Language Standard.">
    </EnumValue>
    <EnumValue Name="gnu++98" Switch="std=gnu++98" DisplayName="C++03 (GNU Dialect)" Description="C++03 (GNU Dialect) Language Standard.">
    </EnumValue>
    <EnumValue Name="gnu++11" Switch="std=gnu++11" DisplayName="C++11 (GNU Dialect)" Description="C++11 (GNU Dialect) Language Standard.">
    </EnumValue>
    <EnumValue Name="gnu++1y" Switch="std=gnu++1y" DisplayName="C++14 (GNU Dialect)" Description="C++14 (GNU Dialect) Language Standard.">
    </EnumValue>
  </EnumProperty>
  <StringListProperty Name="PreprocessorDefinitions" DisplayName="Preprocessor Definitions" Description="Defines a preprocessing symbols for your source file. (-D)" Category="Preprocessor" Switch="D " F1Keyword="VC.Project.VCClangCompilerTool.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.VCClangCompilerTool.UndefinePreprocessorDefinitions">
  </StringListProperty>
  <BoolProperty Name="UndefineAllPreprocessorDefinitions" DisplayName="Undefine All Preprocessor Definitions" Description="Undefine all previously defined preprocessor values.  (-undef)" Category="Preprocessor" Switch="undef" F1Keyword="VC.Project.VCClangCompilerTool.UndefineAllPreprocessorDefinitions">
  </BoolProperty>
  <BoolProperty Name="ShowIncludes" DisplayName="Show Includes" Description="Generates a list of include files with compiler output.  (-H)" Category="Preprocessor" Switch="H" F1Keyword="VC.Project.VCClangCompilerTool.ShowIncludes">
  </BoolProperty>
  <EnumProperty Name="PrecompiledHeader" DisplayName="Precompiled Header" Description="Create/Use Precompiled Header:Enables creation or use of a precompiled header during the build." Category="Precompiled Headers" F1Keyword="VC.Project.VCClangCompilerTool.PrecompiledHeader">
    <EnumValue Name="Use" Switch="" DisplayName="Use" Description="Use a Precompiled Header.">
    </EnumValue>
    <EnumValue Name="NotUsing" Switch="" DisplayName="Not using Precompiled Headers" Description="Not using a Precompiled Header.">
    </EnumValue>
  </EnumProperty>
  <StringProperty Subtype="file" Name="PrecompiledHeaderFile" DisplayName="Precompiled Header File" Description="Specifies header file name to use for precompiled header file. This file will be also added to 'Forced Include Files' during build" Category="Precompiled Headers" F1Keyword="VC.Project.VCClangCompilerTool.PrecompiledHeaderFile">
  </StringProperty>
  <StringProperty Name="PrecompiledHeaderOutputFileDirectory" DisplayName="Precompiled Header Output File Directory" Description="Specifies the directory for the generated precompiled header. This directory will be also added to 'Additional Include Directories' during build" Category="Precompiled Headers" F1Keyword="VC.Project.VCClangCompilerTool.PrecompiledHeaderOutputFileDirectory">
  </StringProperty>
  <EnumProperty Name="PrecompiledHeaderCompileAs" DisplayName="Compile Precompiled Header As" Description="Select compile language option for precompiled header file (-x c-header, -x c++-header)." Category="Precompiled Headers" F1Keyword="VC.Project.VCClangCompilerTool.PrecompiledHeaderCompileAs">
    <EnumValue Name="CompileAsC" Switch="x c-header" DisplayName="Compile as C Code" Description="Compile as C Code.">
    </EnumValue>
    <EnumValue Name="CompileAsCpp" Switch="x c++-header" DisplayName="Compile as C++ Code" Description="Compile as C++ Code.">
    </EnumValue>
  </EnumProperty>
  <EnumProperty Name="CompileAs" DisplayName="Compile As" Description="Select compile language option for .c and .cpp files.  'Default' will detect based on .c or .cpp extention. (-x c, -x c++)" Category="Advanced" F1Keyword="VC.Project.VCClangCompilerTool.CompileAs">
    <EnumValue Name="Default" Switch="" DisplayName="Default" Description="Default.">
    </EnumValue>
    <EnumValue Name="CompileAsC" Switch="x c" DisplayName="Compile as C Code" Description="Compile as C Code.">
    </EnumValue>
    <EnumValue Name="CompileAsCpp" Switch="x c++" DisplayName="Compile as C++ Code" Description="Compile as C++ Code.">
    </EnumValue>
  </EnumProperty>
  <StringListProperty Subtype="file" Name="ForcedIncludeFiles" DisplayName="Forced Include Files" Description="one or more forced include files.     (-include [name])" Category="Advanced" Switch="include " F1Keyword="VC.Project.VCClangCompilerTool.ForcedIncludeFiles">
  </StringListProperty>
  <BoolProperty Name="UseMultiToolTask" DisplayName="Multi-processor Compilation" Description="Multi-processor Compilation." Category="Advanced" F1Keyword="VC.Project.VCClangCompilerTool.MultiProcessorCompilation">
    <BoolProperty.DataSource>
      <DataSource Persistence="ProjectFile" ItemType="" Label="" HasConfigurationCondition="true" />
    </BoolProperty.DataSource>
  </BoolProperty>
  <BoolProperty ReverseSwitch="fno-ms-compatibility" Name="MSCompatibility" DisplayName="Microsoft Compatibility Mode" Description="Enable full Microsoft Visual C++ compatibility." Category="Advanced" Switch="fms-compatibility" F1Keyword="VC.Project.VCClangCompilerTool.MSCompatibility">
  </BoolProperty>
  <StringProperty Name="MSCompatibilityVersion" DisplayName="Microsoft Compatibility Mode Version" Description="Dot-separated value representing the Microsoft compiler version number to report in _MSC_VER (0 = don't define it (default))." Category="Advanced" Switch="fms-compatibility-version=" F1Keyword="VC.Project.VCClangCompilerTool.MSCompatibilityVersion">
  </StringProperty>
  <BoolProperty ReverseSwitch="fno-ms-extensions" Name="MSExtensions" DisplayName="Microsoft Extension Support" Description="Accept some non-standard constructs supported by the Microsoft compiler." Category="Advanced" Switch="fms-extensions" F1Keyword="VC.Project.VCClangCompilerTool.MSExtensions">
  </BoolProperty>
  <StringProperty Name="MSCompilerVersion" DisplayName="Microsoft Compiler Version" Description="Microsoft compiler version number to report in _MSC_VER (0 = don't define it (default))." Category="Advanced" Switch="fmsc-version=" F1Keyword="VC.Project.VCClangCompilerTool.MSCompilerVersion">
  </StringProperty>
  <StringProperty Name="AdditionalOptions" DisplayName="Additional Options" Description="Additional Options." Category="Command Line" F1Keyword="vc.project.AdditionalOptionsPage">
  </StringProperty>
  <BoolProperty Name="BuildingInIde" Visible="false">
  </BoolProperty>
</Rule>