Index: clang/tools/driver/CMakeLists.txt =================================================================== --- clang/tools/driver/CMakeLists.txt +++ clang/tools/driver/CMakeLists.txt @@ -61,10 +61,6 @@ if(NOT CLANG_LINKS_TO_CREATE) set(CLANG_LINKS_TO_CREATE clang++ clang-cl clang-cpp) - - if (MSVC) - list(APPEND CLANG_LINKS_TO_CREATE ../msbuild-bin/cl) - endif() endif() foreach(link ${CLANG_LINKS_TO_CREATE}) Index: llvm/CMakeLists.txt =================================================================== --- llvm/CMakeLists.txt +++ llvm/CMakeLists.txt @@ -229,7 +229,9 @@ set(CPACK_NSIS_MODIFY_PATH "ON") set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL "ON") set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS - "ExecWait '$INSTDIR/tools/msbuild/install.bat'") + "ExecWait '$INSTDIR/tools/msbuild/install.bat' + WriteRegStr HKLM 'Software\\\\${CPACK_PACKAGE_INSTALL_REGISTRY_KEY}' 'Version' '${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}' + ") set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "ExecWait '$INSTDIR/tools/msbuild/uninstall.bat'") if( CMAKE_CL_64 ) Index: llvm/tools/msbuild/.gitignore =================================================================== --- /dev/null +++ llvm/tools/msbuild/.gitignore @@ -0,0 +1,2 @@ +bin +obj Index: llvm/tools/msbuild/CMakeLists.txt =================================================================== --- llvm/tools/msbuild/CMakeLists.txt +++ /dev/null @@ -1,69 +0,0 @@ -if (MSVC) - # CPack will install a registry key in this format that we wish to reference. - set(REG_KEY "${CPACK_PACKAGE_INSTALL_REGISTRY_KEY}") - set(LIB_PATH_VERSION "${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}") - - foreach (platform "Win32" "x64") - set(prop_file_in "Microsoft.Cpp.Win32.llvm.props.in") - set(prop_file_v100 "Microsoft.Cpp.${platform}.LLVM-vs2010.props") - set(prop_file_v110 "Microsoft.Cpp.${platform}.LLVM-vs2012.props") - set(prop_file_v110_xp "Microsoft.Cpp.${platform}.LLVM-vs2012_xp.props") - set(prop_file_v120 "toolset-vs2013.props") - set(prop_file_v120_xp "toolset-vs2013_xp.props") - set(prop_file_v140 "toolset-vs2014.props") - set(prop_file_v140_xp "toolset-vs2014_xp.props") - - if (platform STREQUAL "Win32") - set(mflag "m32") - else() - set(mflag "m64") - endif() - set(VS_VERSION "v100") - set(MSC_VERSION "1600") - configure_file(${prop_file_in} ${platform}/${prop_file_v100}) - set(VS_VERSION "v110") - set(MSC_VERSION "1700") - configure_file(${prop_file_in} ${platform}/${prop_file_v110}) - set(VS_VERSION "v110_xp") - configure_file(${prop_file_in} ${platform}/${prop_file_v110_xp}) - set(VS_VERSION "v120") - set(MSC_VERSION "1800") - configure_file(${prop_file_in} ${platform}/${prop_file_v120}) - set(VS_VERSION "v120_xp") - configure_file(${prop_file_in} ${platform}/${prop_file_v120_xp}) - set(VS_VERSION "v140") - set(MSC_VERSION "1900") - configure_file(${prop_file_in} ${platform}/${prop_file_v140}) - set(VS_VERSION "v140_xp") - configure_file(${prop_file_in} ${platform}/${prop_file_v140_xp}) - set(VS_VERSION) - set(MSC_VERSION) - set(mflag) - - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${platform}/${prop_file_v100}" DESTINATION tools/msbuild/${platform}) - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${platform}/${prop_file_v110}" DESTINATION tools/msbuild/${platform}) - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${platform}/${prop_file_v110_xp}" DESTINATION tools/msbuild/${platform}) - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${platform}/${prop_file_v120}" DESTINATION tools/msbuild/${platform}) - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${platform}/${prop_file_v120_xp}" DESTINATION tools/msbuild/${platform}) - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${platform}/${prop_file_v140}" DESTINATION tools/msbuild/${platform}) - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${platform}/${prop_file_v140_xp}" DESTINATION tools/msbuild/${platform}) - - install(FILES "Microsoft.Cpp.Win32.LLVM-vs2010.targets" DESTINATION "tools/msbuild/${platform}" RENAME "Microsoft.Cpp.${platform}.LLVM-vs2010.targets") - install(FILES "Microsoft.Cpp.Win32.LLVM-vs2012.targets" DESTINATION "tools/msbuild/${platform}" RENAME "Microsoft.Cpp.${platform}.LLVM-vs2012.targets") - install(FILES "Microsoft.Cpp.Win32.LLVM-vs2012_xp.targets" DESTINATION "tools/msbuild/${platform}" RENAME "Microsoft.Cpp.${platform}.LLVM-vs2012_xp.targets") - install(FILES "toolset-vs2013.targets" DESTINATION "tools/msbuild/${platform}") - install(FILES "toolset-vs2013_xp.targets" DESTINATION "tools/msbuild/${platform}") - install(FILES "toolset-vs2014.targets" DESTINATION "tools/msbuild/${platform}") - install(FILES "toolset-vs2014_xp.targets" DESTINATION "tools/msbuild/${platform}") - endforeach() - - set(LIB_PATH_VERSION) - set(REG_KEY) - - install(DIRECTORY . - DESTINATION tools/msbuild - FILES_MATCHING - PATTERN "*.bat" - PATTERN ".svn" EXCLUDE - ) -endif() Index: llvm/tools/msbuild/LLVM.Cpp.Common.props =================================================================== --- /dev/null +++ llvm/tools/msbuild/LLVM.Cpp.Common.props @@ -0,0 +1,66 @@ +<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <!-- The general order of executing an MSBuild file is roughly: + 1) vcxproj file + 2) ├─ Import Microsoft.Cpp.props + 3) │ └─ Import Toolset specific props (e.g. $(VCTargets)Platforms\Win32\PlatformToolsets\llvm\Toolset.props) + 4) │ └─ Import This File (Clang.Cpp.Common.props) + 5) │─ Core logic of vcxproj (define files, override properties, etc) + 6) └─ Import Microsoft.Cpp.targets + 7) │─ Import Toolset specific targets file (e.g. $(VCTargets)Platforms\Win32\PlatformToolsets\llvm\Toolset.targets) + 8) └─ Run the compiler. + The important thing is that we have hooks at 3, 4, and 7. 3 and 4 give + us the ability to provide initial values for toolchain settings (where + is the compiler, what values are considered "default" for a given + setting, etc), 7 gives us the ability to act on anything that the user + has overridden (such as warning or erroring on incompatible settings, + mapping settings to other settings, etc). + --> + + <PropertyGroup> + <!-- This initializes the values in Properties > General > Output Directory. + Builds will fail without this. --> + <OutDirWasSpecified Condition=" '$(OutDir)'!='' AND '$(OutDirWasSpecified)'=='' ">true</OutDirWasSpecified> + <OutDirWasSpecified Condition=" '$(OutDir)'=='' AND '$(OutDirWasSpecified)'=='' ">false</OutDirWasSpecified> + + <IntDir Condition="'$(IntDir)'=='' AND '$(IntermediateOutputPath)'!=''">$(IntermediateOutputPath)</IntDir> + <IntDir Condition="'$(IntDir)'=='' AND '$(IntermediateOutputPath)'==''">$(Configuration)\</IntDir> + <OutDir Condition="'$(OutDir)'=='' AND '$(SolutionDir)' != ''">$(SolutionDir)$(Configuration)\</OutDir> + <OutDir Condition="'$(OutDir)'=='' AND '$(SolutionDir)' == ''">$(IntDir)</OutDir> + </PropertyGroup> + + <PropertyGroup> + <!-- Short names for platform toolsets (added to project name in Solution Explorer) --> + <_PlatformToolsetShortNameFor_llvm>llvm</_PlatformToolsetShortNameFor_llvm> + <_PlatformToolsetFriendlyNameFor_llvm>LLVM</_PlatformToolsetFriendlyNameFor_llvm> + </PropertyGroup> + + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.WindowsSDK.props" Condition="Exists('$(VCTargetsPath)\Microsoft.Cpp.WindowsSDK.props')"/> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Common.props" /> + + <!-- Find an installed LLVM and set up our paths. --> + <PropertyGroup> + <LLVMInstallDir>$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\LLVM@LLVM)</LLVMInstallDir> + <LLVMInstallDir Condition="'$(LLVMInstallDir)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\LLVM@LLVM)</LLVMInstallDir> + + <!-- Tell MSBuild that instead of invoking cl.exe, it should invoke clang-cl.exe from the install dir. --> + <CLToolExe>clang-cl.exe</CLToolExe> + <CLToolPath>$(LLVMInstallDir)bin</CLToolPath> + + <!-- Set some paths (such as include paths) that are common to all platforms. This is the same as what + the default paths for cl will use. + --> + <IncludePath Condition="'$(IncludePath)' == ''">$(IncludePath);$(VC_IncludePath);$(WindowsSDK_IncludePath);</IncludePath> + <LibraryWPath Condition="'$(LibraryWPath)' == ''">$(WindowsSDK_MetadataPath);</LibraryWPath> + <SourcePath Condition="'$(SourcePath)' == ''">$(VC_SourcePath);</SourcePath> + </PropertyGroup> + + + <!-- Set values which are reflected in the property UI by default. The user can override these + by editing the vcxproj file (or making changes via the UI, which has the same effect). + --> + <ItemDefinitionGroup> + <ClCompile> + <AdditionalOptions>-m$(PlatformArchitecture) %(AdditionalOptions)</AdditionalOptions> + </ClCompile> + </ItemDefinitionGroup> +</Project> Index: llvm/tools/msbuild/LLVM.Cpp.Common.targets =================================================================== --- /dev/null +++ llvm/tools/msbuild/LLVM.Cpp.Common.targets @@ -0,0 +1,86 @@ +<!-- This file exists to replace the compiler and linker UI pages. The code in here is forked + from VCTargets/Microsoft.CppBuild.targets with only the compiler and linker pages replaced. +--> +<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$(VCTargetsPath)\Microsoft.CppCommon.targets" /> + + <!-- By default MSBuild will add its own settings UI. Disable this and use our forked version + instead. The code below is mostly a straight fork from the common Microsoft build file, + with only cl.xml replaced with clang-cl.xml. --> + <PropertyGroup> + <UseDefaultProjectTools>false</UseDefaultProjectTools> + <UseDefaultPropertyPageSchemas>false</UseDefaultPropertyPageSchemas> + <UseDefaultGeneralPropertyPageSchema>false</UseDefaultGeneralPropertyPageSchema> + </PropertyGroup> + + <ItemGroup> + <!-- Property pages that always apply --> + <PropertyPageSchema Include=" + $(VCTargetsPath)$(LangID)\ProjectItemsSchema.xml; + $(VCTargetsPath)$(LangID)\midl.xml; + $(VCTargetsPath)$(LangID)\build_events.xml; + $(VCTargetsPath)$(LangID)\custom_build_tool.xml; + $(VCTargetsPath)$(LangID)\custom_build_step.xml; + "/> + <PropertyPageSchema Include="$(VCTargetsPath)$(LangID)\general_file.xml"> + <Context>File</Context> + </PropertyPageSchema> + + <DesktopDebuggerPages Include="$(VCTargetsPath)$(LangID)\debugger_local_windows.xml" /> + + <!-- Debuggers --> + <DebuggerPages Condition="'$(_ApplicableDebuggers)' == 'Desktop'" Include="@(DesktopDebuggerPages)" /> + + <!-- We always need debuggers general page as soon as we have at least one debugger --> + <PropertyPageSchema Condition="'@(DebuggerPages)' != ''" Include="$(VCTargetsPath)$(LangID)\debugger_general.xml" /> + <PropertyPageSchema Include="@(DebuggerPages)" /> + + <!-- Property sheet specific property pages --> + <PropertyPageSchema Include="$(VCTargetsPath)$(LangID)\usermacros.xml"> + <Context>PropertySheet</Context> + </PropertyPageSchema> + + <!-- Switch view between project property based directories and environment variables --> + <PropertyPageSchema Condition="'$(UseEnv)' != 'true'" Include="$(VCTargetsPath)$(LangID)\directories.xml" /> + <PropertyPageSchema Condition="'$(UseEnv)' == 'true'" Include="$(VCTargetsPath)$(LangID)\envvars.xml" /> + + <!-- Non-Utility project property pages --> + <PropertyPageSchema Condition="'$(ConfigurationType)' != 'Utility'" Include="$(VCTargetsPath)$(LangID)\mt.xml;"> + <Context>Project;PropertySheet</Context> + </PropertyPageSchema> + + <PropertyPageSchema Condition="'$(ConfigurationType)' != 'Utility'" Include="$(VCTargetsPath)$(LangID)\clang-cl.xml"/> + <PropertyPageSchema Condition="'$(ConfigurationType)' != 'Utility'" Include="$(VCTargetsPath)$(LangID)\link.xml"/> + <PropertyPageSchema Condition="'$(ConfigurationType)' != 'Utility'" Include="$(VCTargetsPath)$(LangID)\lib.xml"/> + + <PropertyPageSchema Condition="'$(ConfigurationType)' != 'Utility'" Include=" + $(VCTargetsPath)$(LangID)\alink.xml; + $(VCTargetsPath)$(LangID)\rc.xml; + $(VCTargetsPath)$(LangID)\resgen.xml; + "/> + </ItemGroup> + + <ItemGroup> + <PropertyPageSchema Include="$(VCTargetsPath)$(LangID)\general.xml"> + <Context>Project</Context> + </PropertyPageSchema> + <PropertyPageSchema Include="$(VCTargetsPath)$(LangID)\general_ps.xml"> + <Context>PropertySheet</Context> + </PropertyPageSchema> + <PropertyPageSchema Include="$(VCTargetsPath)$(LangID)\folder.xml"> + <Context>File;BrowseObject</Context> + </PropertyPageSchema> + </ItemGroup> + + <ItemGroup Condition="('$(ConfigurationType)' == 'Application' or '$(ConfigurationType)' == 'DynamicLibrary')"> + <ProjectTools Include="Link"/> + <ProjectTools Include="CustomBuildStep"/> + </ItemGroup> + + <!-- Tools that show up in the IDE property pages for lib project--> + <ItemGroup Condition="'$(ConfigurationType)' == 'StaticLibrary'"> + <ProjectTools Include="Lib"/> + <ProjectTools Include="CustomBuildStep"/> + </ItemGroup> + +</Project> Index: llvm/tools/msbuild/Microsoft.Cpp.Win32.LLVM-vs2010.targets =================================================================== --- llvm/tools/msbuild/Microsoft.Cpp.Win32.LLVM-vs2010.targets +++ /dev/null @@ -1,2 +0,0 @@ -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> -</Project> Index: llvm/tools/msbuild/Microsoft.Cpp.Win32.LLVM-vs2012.targets =================================================================== --- llvm/tools/msbuild/Microsoft.Cpp.Win32.LLVM-vs2012.targets +++ /dev/null @@ -1,3 +0,0 @@ -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <Import Project="$(VCTargetsPath)\Microsoft.CppCommon.targets" /> -</Project> Index: llvm/tools/msbuild/Microsoft.Cpp.Win32.LLVM-vs2012_xp.targets =================================================================== --- llvm/tools/msbuild/Microsoft.Cpp.Win32.LLVM-vs2012_xp.targets +++ /dev/null @@ -1,21 +0,0 @@ -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <!-- Force TargetFrameworkVersion to v4.0 to support XP--> - <PropertyGroup> - <TargetFrameworkVersion>v4.0</TargetFrameworkVersion> - <BeforeClCompileTargets>NoSupportCodeAnalysisXP;$(BeforeClCompileTargets)</BeforeClCompileTargets> - </PropertyGroup> - - <Import Project="$(VCTargetsPath)\Microsoft.CppCommon.targets" /> - - <Target Name="NoSupportCodeAnalysisXP" Condition="'$(ErrorNoSupportCodeAnalysisXP)' != 'false'"> - <VCMessage Condition="'$(DesignTimeBuild)' != 'true' and '@(ClCompile->AnyHaveMetadataValue('EnablePREfast', 'true'))'=='true'" Code="MSB8026" Type="Error"/> - </Target> - - <PropertyGroup> - <PrepareForBuildDependsOn>CheckWindowsSDK71A;$(PrepareForBuildDependsOn)</PrepareForBuildDependsOn> - </PropertyGroup> - - <Target Name="CheckWindowsSDK71A"> - <VCMessage Code="MSB8003" Type="Warning" Arguments="WindowsSdkDir_71A" Condition="'$(WindowsSdkDir_71A)'=='' and '$(UseEnv)' != 'true'" /> - </Target> -</Project> Index: llvm/tools/msbuild/Microsoft.Cpp.Win32.llvm.props.in =================================================================== --- llvm/tools/msbuild/Microsoft.Cpp.Win32.llvm.props.in +++ /dev/null @@ -1,18 +0,0 @@ -<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <Import Project="$(VCTargetsPath)\Platforms\$(Platform)\PlatformToolsets\@VS_VERSION@\Microsoft.Cpp.$(Platform).@VS_VERSION@.props" Condition="Exists('$(VCTargetsPath)\Platforms\$(Platform)\PlatformToolsets\@VS_VERSION@\Microsoft.Cpp.$(Platform).@VS_VERSION@.props')"/> - <Import Project="$(VCTargetsPath)\Platforms\$(Platform)\PlatformToolsets\@VS_VERSION@\Toolset.props" Condition="Exists('$(VCTargetsPath)\Platforms\$(Platform)\PlatformToolsets\@VS_VERSION@\Toolset.props')"/> - - <PropertyGroup> - <LLVMInstallDir>$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\LLVM\@REG_KEY@)</LLVMInstallDir> - <LLVMInstallDir Condition="'$(LLVMInstallDir)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\LLVM\@REG_KEY@)</LLVMInstallDir> - <ExecutablePath>$(LLVMInstallDir)\msbuild-bin;$(ExecutablePath)</ExecutablePath> - <LibraryPath>$(LLVMInstallDir)\lib\clang\@LIB_PATH_VERSION@\lib\windows;$(LibraryPath)</LibraryPath> - </PropertyGroup> - - <ItemDefinitionGroup> - <ClCompile> - <!-- Set the value of _MSC_VER to claim for compatibility --> - <AdditionalOptions>-@mflag@ -fmsc-version=@MSC_VERSION@ %(AdditionalOptions)</AdditionalOptions> - </ClCompile> - </ItemDefinitionGroup> -</Project> Index: llvm/tools/msbuild/Platformx64/Toolset.props =================================================================== --- /dev/null +++ llvm/tools/msbuild/Platformx64/Toolset.props @@ -0,0 +1,11 @@ +<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$(VCTargetsPath)\LLVM.Cpp.Common.props"/> + + <PropertyGroup> + <ExecutablePath Condition="'$(ExecutablePath)' == ''">$(VC_ExecutablePath_x64);$(WindowsSDK_ExecutablePath);$(VS_ExecutablePath);$(MSBuild_ExecutablePath);$(FxCopDir);$(PATH);</ExecutablePath> + <ReferencePath Condition="'$(ReferencePath)' == ''">$(VC_ReferencesPath_x64);</ReferencePath> + <LibraryPath Condition="'$(LibraryPath)' == ''">$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64</LibraryPath> + <ExcludePath Condition="'$(ExcludePath)' == ''">$(VC_IncludePath);$(WindowsSDK_IncludePath);$(MSBuild_ExecutablePath);$(VC_LibraryPath_x64);</ExcludePath> + <DebugCppRuntimeFilesPath Condition="'$(DebugCppRuntimeFilesPath)' == ''">$(VCToolsInstallDir)redist\Debug_NonRedist\x64</DebugCppRuntimeFilesPath> + </PropertyGroup> +</Project> Index: llvm/tools/msbuild/Platformx64/Toolset.targets =================================================================== --- /dev/null +++ llvm/tools/msbuild/Platformx64/Toolset.targets @@ -0,0 +1,3 @@ +<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$(VCTargetsPath)\LLVM.Cpp.Common.targets"/> +</Project> Index: llvm/tools/msbuild/Platformx86/Toolset.props =================================================================== --- /dev/null +++ llvm/tools/msbuild/Platformx86/Toolset.props @@ -0,0 +1,11 @@ +<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$(VCTargetsPath)\LLVM.Cpp.Common.props"/> + + <PropertyGroup> + <ExecutablePath Condition="'$(ExecutablePath)' == ''">$(VC_ExecutablePath_x86);$(WindowsSDK_ExecutablePath);$(VS_ExecutablePath);$(MSBuild_ExecutablePath);$(SystemRoot)\SysWow64;$(FxCopDir);$(PATH);</ExecutablePath> + <ReferencePath Condition="'$(ReferencePath)' == ''">$(VC_ReferencesPath_x86);</ReferencePath> + <LibraryPath Condition="'$(LibraryPath)' == ''">$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(NETFXKitsDir)Lib\um\x86</LibraryPath> + <ExcludePath Condition="'$(ExcludePath)' == ''">$(VC_IncludePath);$(WindowsSDK_IncludePath);$(MSBuild_ExecutablePath);$(VC_LibraryPath_x86);</ExcludePath> + <DebugCppRuntimeFilesPath Condition="'$(DebugCppRuntimeFilesPath)' == ''">$(VCToolsInstallDir)redist\Debug_NonRedist\x86</DebugCppRuntimeFilesPath> + </PropertyGroup> +</Project> Index: llvm/tools/msbuild/Platformx86/Toolset.targets =================================================================== --- /dev/null +++ llvm/tools/msbuild/Platformx86/Toolset.targets @@ -0,0 +1,3 @@ +<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$(VCTargetsPath)\LLVM.Cpp.Common.targets"/> +</Project> Index: llvm/tools/msbuild/clang-cl.xml =================================================================== --- /dev/null +++ llvm/tools/msbuild/clang-cl.xml @@ -0,0 +1,346 @@ +<?xml version="1.0" encoding="utf-8"?> +<Rule Name="clang-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="Ignored" DisplayName="MSVC (Ignored)"/> + <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="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 semi-colons if more than one. (/I[path])" Category="General" Switch="I" F1Keyword="VC.Project.VCCLCompilerTool.AdditionalIncludeDirectories"> + </StringListProperty> + <EnumProperty Name="DebugInformationFormat" DisplayName="Debug Information Format" Description="Specifies the type of debugging information generated by the compiler. This requires compatible linker settings. (/Z7)" 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> + </EnumProperty> + <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 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="Select option for code optimization; choose Custom to use specific optimization options. (/Od, /O1, /O2, /Ox)" 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="Minimize Size" Description="Equivalent to /Og /Os /Oy /Ob2 /Gs /GF /Gy"> + </EnumValue> + <EnumValue Name="MaxSpeed" Switch="O2" DisplayName="Maximize Speed" Description="Equivalent to /Og /Oi /Ot /Oy /Ob2 /Gs /GF /Gy"> + </EnumValue> + <EnumValue Name="Full" Switch="Ox" DisplayName="Full Optimization" 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> + <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> + <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> + <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, or 8-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, e.g., the SSE, SSE2, AVX, and AVX2 enhancements to IA-32; AVX and AVX2 to x64. Currently /arch:SSE and /arch:SSE2 are only available when building for the x86 architecture. 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:IA32)" Category="Code Generation" F1Keyword="VC.Project.VCCLCompilerTool.EnableEnhancedInstructionSet"> + <EnumValue Name="StreamingSIMDExtensions" Switch="arch:SSE" DisplayName="Streaming SIMD Extensions" Description="Streaming SIMD Extensions. (/arch:SSE)"> + </EnumValue> + <EnumValue Name="StreamingSIMDExtensions2" Switch="arch:SSE2" DisplayName="Streaming SIMD Extensions 2" Description="Streaming SIMD Extensions 2. (/arch:SSE2)"> + </EnumValue> + <EnumValue Name="AdvancedVectorExtensions" Switch="arch:AVX" DisplayName="Advanced Vector Extensions" Description="Advanced Vector Extensions. (/arch:AVX)"> + </EnumValue> + <EnumValue Name="AdvancedVectorExtensions2" Switch="arch:AVX2" DisplayName="Advanced Vector Extensions 2" Description="Advanced Vector Extensions 2. (/arch:AVX2)"> + </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> + </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 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. (/std:c++14, /std:c++17, /std:c++latest)" Category="Language" F1Keyword="VC.Project.VCCLCompilerTool.CppLanguageStandard"> + <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="stdcpplatest" Switch="std:c++latest" DisplayName="ISO C++ Latest Draft Standard"> + </EnumValue> + </EnumProperty> + <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> + <BoolProperty Name="UseUnicodeForAssemblerListing" DisplayName="Use Unicode For Assembler Listing" Description="Causes the output file to be created in UTF-8 format. " Category="Output Files" Switch="FAu" F1Keyword="VC.Project.VCCLCompilerTool.UseUnicodeForAssemblerListing"> + </BoolProperty> + <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)" 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> + </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> + + <!-- Silently discarded options go here --> + <StringListProperty Subtype="folder" Name="AdditionalUsingDirectories" DisplayName="Additional #using Directories" Description="This option is silently discarded by clang-cl. (/AI[path])" Category="Ignored" Switch="AI" F1Keyword="VC.Project.VCCLCompilerTool.AdditionalUsingDirectories"> + </StringListProperty> + <BoolProperty Name="WinRTNoStdLib" DisplayName="No Standard WinRT Libraries" Description="This option is silently discarded by clang-cl. (/ZW:nostdlib)" Category="Ignored" Switch="ZW:nostdlib" Visible="false"> + </BoolProperty> + <StringProperty Name="WarningVersion" DisplayName="Warning Version" Description="This option is silently discarded by clang-cl. (/Wv:)" Category="Ignored" Switch="Wv:" F1Keyword="VC.Project.VCCLCompilerTool.WarningVersion"> + </StringProperty> + <EnumProperty Name="DiagnosticsFormat" DisplayName="Diagnostics Format" Description="This option is silently discarded by clang-cl. (/diagnostics:)" Category="Ignored" 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> + <BoolProperty Name="MultiProcessorCompilation" DisplayName="Multi-processor Compilation" Description="This option is silently discarded by clang-cl. (/MP)" Category="Ignored" Switch="MP" F1Keyword="VC.Project.VCCLCompilerTool.MultiProcessorCompilation"> + </BoolProperty> + <BoolProperty ReverseSwitch="Oy-" Name="OmitFramePointers" DisplayName="Omit Frame Pointers" Description="This option is silently discarded by clang-cl. (/Oy)" Category="Ignored" Switch="Oy" F1Keyword="VC.Project.VCCLCompilerTool.OmitFramePointers"> + </BoolProperty> + <BoolProperty Name="IgnoreStandardIncludePath" DisplayName="Ignore Standard Include Paths" Description="This option is silently discarded by clang-cl. (/X)" Category="Ignored" Switch="X" F1Keyword="VC.Project.VCCLCompilerTool.IgnoreStandardIncludePath"> + </BoolProperty> + <BoolProperty ReverseSwitch="GF-" Name="StringPooling" DisplayName="Enable String Pooling" Description="This option is silently discarded by clang-cl. (/GF)" Category="Ignored" Switch="GF" F1Keyword="VC.Project.VCCLCompilerTool.StringPooling"> + </BoolProperty> + <BoolProperty ReverseSwitch="Gm-" Name="MinimalRebuild" DisplayName="Enable Minimal Rebuild" Description="This option is silently discarded by clang-cl. (/Gm)" Category="Ignored" Switch="Gm" F1Keyword="VC.Project.VCCLCompilerTool.MinimalRebuild"> + </BoolProperty> + <BoolProperty Name="DisableLanguageExtensions" DisplayName="Disable Language Extensions" Description="This option is silently discarded by clang-cl. (/Za)" Category="Ignored" Switch="Za" F1Keyword="VC.Project.VCCLCompilerTool.DisableLanguageExtensions"> + </BoolProperty> + <BoolProperty Name="RemoveUnreferencedCodeData" DisplayName="Remove unreferenced code and data" Description="This option is silently discarded by clang-cl. (/Zc:inline)" Category="Ignored" Switch="Zc:inline" F1Keyword="VC.Project.VCCLCompilerTool.RemoveUnreferencedCodeData"> + </BoolProperty> + <BoolProperty ReverseSwitch="Zc:rvalueCast-" Name="EnforceTypeConversionRules" DisplayName="Enforce type conversion rules" Description="This option is silently discarded by clang-cl. (/Zc:rvalueCast)" Category="Ignored" Switch="Zc:rvalueCast" F1Keyword="VC.Project.VCCLCompilerTool.EnforceTypeConversionRules"> + </BoolProperty> + <BoolProperty Name="ExpandAttributedSource" DisplayName="Expand Attributed Source" Description="This option is silently discarded by clang-cl. (/Fx)" Category="Ignored" Switch="Fx" F1Keyword="VC.Project.VCCLCompilerTool.ExpandAttributedSource"> + </BoolProperty> + <StringProperty Subtype="file" Name="ProgramDataBaseFileName" DisplayName="Program Database File Name" Description="This option is silently discarded by clang-cl. (/Fd[name])" Category="Ignored" Switch="Fd" F1Keyword="VC.Project.VCCLCompilerTool.ProgramDataBaseFileName"> + </StringProperty> + <StringListProperty Name="DisableSpecificWarnings" DisplayName="Disable Specific Warnings" Description="This option is silently discarded by clang-cl. (/wd)" Category="Ignored" Switch="wd" F1Keyword="VC.Project.VCCLCompilerTool.DisableSpecificWarnings"> + </StringListProperty> + <StringListProperty Subtype="file" Name="ForcedUsingFiles" DisplayName="Forced #using File" Description="This option is silently discarded by clang-cl. (/FU)" Category="Ignored" Switch="FU" F1Keyword="VC.Project.VCCLCompilerTool.ForcedUsingFiles"> + </StringListProperty> + <StringProperty Subtype="file" Name="PREfastLog" DisplayName="Code Analysis Log" Description="This option is silently discarded by clang-cl. (/analyze:log)" Category="Ignored" Switch="analyze:log " Visible="false" F1Keyword="VC.Project.VCCLCompilerTool.EnablePREfast"> + </StringProperty> + <StringListProperty Name="PREfastAdditionalOptions" DisplayName="Additional Code Analysis Native options" Description="This option is silently discarded by clang-cl. (/analyze:)" Category="Ignored" Switch="analyze:" Visible="false" F1Keyword="VC.Project.VCCLCompilerTool.PREfastAdditionalOptions"> + </StringListProperty> + <StringListProperty Name="PREfastAdditionalPlugins" DisplayName="Additional Code Analysis Native plugins" Description="This option is silently discarded by clang-cl. (/analyze:plugin)" Category="Ignored" Switch="analyze:plugin" Visible="false" F1Keyword="VC.Project.VCCLCompilerTool.PREfastAdditionalPlugins"> + </StringListProperty> + <BoolProperty Name="UseFullPaths" DisplayName="Use Full Paths" Description="This option is silently discarded by clang-cl. (/FC)" Category="Ignored" Switch="FC" F1Keyword="VC.Project.VCCLCompilerTool.UseFullPaths"> + </BoolProperty> + <EnumProperty Name="ErrorReporting" DisplayName="Internal Compiler Error Reporting" Description="This option is silently discarded by clang-cl. (/errorReport:)" Category="Ignored" F1Keyword="VC.Project.VCCLCompilerTool.ErrorReporting"> + <EnumValue Name="None" Switch="errorReport:none" DisplayName="Do Not Send Report" Description="Reports about internal compiler errors will not be collected or sent to Microsoft."> + </EnumValue> + <EnumValue Name="Prompt" Switch="errorReport:prompt" DisplayName="Prompt Immediately" Description="Prompts you to send a report when you receive an internal compiler error."> + </EnumValue> + <EnumValue Name="Queue" Switch="errorReport:queue" DisplayName="Queue For Next Login" Description="Queues the error report. When you log in with administrator privileges, a pop-up window is displayed and allows you to report any failures since the last time you were logged in (you will not be prompted to send reports for failures more than once every three days). queue is the default when compiling an application at the command line."> + </EnumValue> + <EnumValue Name="Send" Switch="errorReport:send" DisplayName="Send Automatically" Description="Automatically sends reports of internal compiler errors to Microsoft. To enable this option, you must first agree to Microsoft%27s data collection policy. The first time you specify /errorReport:send on a computer, a compiler message will refer you to a website that contains Microsoft%27s data collection policy."> + </EnumValue> + </EnumProperty> + <StringListProperty Name="TreatSpecificWarningsAsErrors" DisplayName="Treat Specific Warnings As Errors" Description="This option is silently discarded by clang-cl. (/we)" Category="Ignored" Switch="we" F1Keyword="VC.Project.VCCLCompilerTool.TreatSpecificWarningsAsErrors"> + </StringListProperty> + + <!-- Warn-and-ignore options go here --> + <BoolProperty Name="EnableFiberSafeOptimizations" DisplayName="Enable Fiber-Safe Optimizations" Description="This option is unsupported by clang-cl. (/GT)" Category="Ignored" Switch="GT" F1Keyword="VC.Project.VCCLCompilerTool.EnableFiberSafeOptimizations"> + </BoolProperty> + <BoolProperty Name="WholeProgramOptimization" DisplayName="Whole Program Optimization" Description="This option is unsupported by clang-cl. (/GL)" Category="Ignored" Switch="GL" F1Keyword="VC.Project.VCCLWCECompilerTool.WholeProgramOptimization"> + </BoolProperty> + <BoolProperty Name="SmallerTypeCheck" DisplayName="Smaller Type Check" Description="This option is unsupported by clang-cl. (/RTCc)" Category="Ignored" Switch="RTCc" F1Keyword="VC.Project.VCCLCompilerTool.SmallerTypeCheck"> + </BoolProperty> + <EnumProperty Name="BasicRuntimeChecks" DisplayName="Basic Runtime Checks" Description="This option is unsupported by clang-cl. (/RTCs, /RTCu, /RTC1)" Category="Ignored" F1Keyword="VC.Project.VCCLCompilerTool.BasicRuntimeChecks"> + <EnumValue Name="StackFrameRuntimeCheck" Switch="RTCs" DisplayName="Stack Frames" Description="Enables stack frame run-time error checking."> + </EnumValue> + <EnumValue Name="UninitializedLocalUsageCheck" Switch="RTCu" DisplayName="Uninitialized variables" Description="Reports when a variable is used without having been initialized."> + </EnumValue> + <EnumValue Name="EnableFastChecks" Switch="RTC1" DisplayName="Both (/RTC1, equiv. to /RTCsu)" Description="Equivalent of /RTCsu."> + </EnumValue> + <EnumValue Name="Default" Switch="" DisplayName="None" Description="Do not perform additional runtime checks."> + </EnumValue> + </EnumProperty> + <BoolProperty ReverseSwitch="Qpar-" Name="EnableParallelCodeGeneration" DisplayName="Enable Parallel Code Generation" Description="This option is unsupported by clang-cl. (/Qpar)" Category="Ignored" Switch="Qpar" F1Keyword="VC.Project.VCCLCompilerTool.EnableParallelCodeGeneration"> + </BoolProperty> + <BoolProperty Name="CreateHotpatchableImage" DisplayName="Create Hotpatchable Image" Description="This option is unsupported by clang-cl. (/hotpatch)" Category="Ignored" Switch="hotpatch" F1Keyword="VC.Project.VCCLCompilerTool.CreateHotpatchableImage"> + </BoolProperty> + <BoolProperty ReverseSwitch="Zc:wchar_t-" Name="TreatWChar_tAsBuiltInType" DisplayName="Treat WChar_t As Built in Type" Description="This option is unsupported by clang-cl, and will generate a warning if disabled. (/Zc:wchar_t)" Category="Ignored" Switch="Zc:wchar_t" F1Keyword="VC.Project.VCCLCompilerTool.TreatWChar_tAsBuiltInType"> + </BoolProperty> + <BoolProperty ReverseSwitch="Zc:forScope-" Name="ForceConformanceInForLoopScope" DisplayName="Force Conformance in For Loop Scope" Description="This option is unsupported by clang-cl, and will generate a warning if disabled. (/Zc:forScope)" Category="Ignored" Switch="Zc:forScope" F1Keyword="VC.Project.VCCLCompilerTool.ForceConformanceInForLoopScope"> + </BoolProperty> + <BoolProperty Name="GenerateXMLDocumentationFiles" DisplayName="Generate XML Documentation Files" Description="This option is unsupported by clang-cl. (/doc)" Category="Ignored" Switch="doc" F1Keyword="VC.Project.VCCLCompilerTool.GenerateXMLDocumentationFiles"> + </BoolProperty> + <BoolProperty Name="BrowseInformation" DisplayName="Enable Browse Information" Description="This option is unsupported by clang-cl. (/FR)" Category="Ignored" Switch="FR" F1Keyword="VC.Project.VCCLCompilerTool.BrowseInformation"> + </BoolProperty> + <BoolProperty ReverseSwitch="analyze-" Name="EnablePREfast" DisplayName="Enable Code Analysis" Description="This option is unsupported by clang-cl. (/analyze)" Category="Ignored" Switch="analyze" Visible="false" F1Keyword="VC.Project.VCCLCompilerTool.EnablePREfast"> + </BoolProperty> + + <!-- Incompatible options go here --> + <EnumProperty Name="CompileAsManaged" DisplayName="Common Language RunTime Support" Description="This switch is incompatible with clang-cl. (/clr)" Category="Ignored" F1Keyword="VC.Project.VCCLCompilerTool.CompileAsManaged"> + <EnumValue Name="false" Switch="" DisplayName="No Common Language RunTime Support" Description="No Common Language RunTime Support"> + </EnumValue> + <EnumValue Name="true" Switch="clr" DisplayName="Common Language RunTime Support" Description="Creates metadata for your application that can be consumed by other CLR applications, and allows your application to consume types and data in the metadata of other CLR components."> + </EnumValue> + <EnumValue Name="Pure" Switch="clr:pure" DisplayName="Pure MSIL Common Language RunTime Support" Description="Produces an MSIL-only output file with no native executable code, although it can contain native types compiled to MSIL."> + </EnumValue> + <EnumValue Name="Safe" Switch="clr:safe" DisplayName="Safe MSIL Common Language RunTime Support" Description="Produces an MSIL-only (no native executable code) and verifiable output file."> + </EnumValue> + </EnumProperty> + <BoolProperty Name="CompileAsWinRT" DisplayName="Consume Windows Runtime Extension" Description="This switch is incompatible with clang-cl. (/ZW)" Category="Ignored" Switch="ZW" F1Keyword="VC.Project.VCCLCompilerTool.CompileAsWinRT"> + </BoolProperty> + <BoolProperty ReverseSwitch="openmp-" Name="OpenMPSupport" DisplayName="Open MP Support" Description="This switch is incompatible with clang-cl. (/openmp)" Category="Ignored" Switch="openmp" F1Keyword="VC.Project.VCCLCompilerTool.OpenMP"> + </BoolProperty> + <BoolProperty Name="EnableModules" DisplayName="Enable C++ Modules (experimental)" Description="This switch is incompatible with clang-cl. (/experimental:module)" Category="Ignored" Switch="experimental:module" F1Keyword="VC.Project.VCCLCompilerTool.ModulesSupport"> + </BoolProperty> + +</Rule> Index: llvm/tools/msbuild/install.bat =================================================================== --- llvm/tools/msbuild/install.bat +++ llvm/tools/msbuild/install.bat @@ -6,110 +6,40 @@ REM Change to the directory of this batch file. cd /d %~dp0 -REM Loop over the two platforms in awkward batch file fashion. -set PLATFORM=None -:PLATFORMLOOPHEAD -IF %PLATFORM% == x64 GOTO PLATFORMLOOPEND -IF %PLATFORM% == Win32 SET PLATFORM=x64 -IF %PLATFORM% == None SET PLATFORM=Win32 +REM Older versions of VS would look for these files in the Program Files\MSBuild directory +REM but with VS2017 it seems to look for these directly in the Visual Studio instance. +REM This means we'll need to do a little extra work to properly detect all the various +REM instances, but in reality we can probably sidestep all of this by just wrapping this +REM in a vsix and calling it a day, as that should handle everything for us. +SET VCTargets=%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets -REM Search for the MSBuild toolsets directory. - -SET D="%ProgramFiles%\MSBuild\Microsoft.Cpp\v4.0\Platforms\%PLATFORM%\PlatformToolsets" -IF EXIST %D% GOTO FOUND_V100 -SET D="%ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\Platforms\%PLATFORM%\PlatformToolsets" -IF EXIST %D% GOTO FOUND_V100 - -:TRY_V110 -SET D="%ProgramFiles%\MSBuild\Microsoft.Cpp\v4.0\V110\Platforms\%PLATFORM%\PlatformToolsets" -IF EXIST %D% GOTO FOUND_V110 -SET D="%ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\V110\Platforms\%PLATFORM%\PlatformToolsets" -IF EXIST %D% GOTO FOUND_V110 - -:TRY_V120 -SET D="%ProgramFiles%\MSBuild\Microsoft.Cpp\v4.0\V120\Platforms\%PLATFORM%\PlatformToolsets" -IF EXIST %D% GOTO FOUND_V120 -SET D="%ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\V120\Platforms\%PLATFORM%\PlatformToolsets" -IF EXIST %D% GOTO FOUND_V120 - -:TRY_V140 -SET D="%ProgramFiles%\MSBuild\Microsoft.Cpp\v4.0\V140\Platforms\%PLATFORM%\PlatformToolsets" -IF EXIST %D% GOTO FOUND_V140 -SET D="%ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\V140\Platforms\%PLATFORM%\PlatformToolsets" -IF EXIST %D% GOTO FOUND_V140 - -:TRY_V150 - -GOTO PLATFORMLOOPHEAD - -:PLATFORMLOOPEND -IF %SUCCESS% == 1 goto DONE -echo Failed to find MSBuild toolsets directory. -goto FAILED - - -:FOUND_V100 -REM Routine for installing v100 toolchain. -IF NOT EXIST %D%\LLVM-vs2010 mkdir %D%\LLVM-vs2010 +ECHO Installing Common Files +copy llvm\LLVM.Cpp.Common.props "%VCTargets%" IF NOT %ERRORLEVEL% == 0 GOTO FAILED -copy %PLATFORM%\Microsoft.Cpp.%PLATFORM%.LLVM-vs2010.props %D%\LLVM-vs2010 +copy llvm\LLVM.Cpp.Common.targets "%VCTargets%" IF NOT %ERRORLEVEL% == 0 GOTO FAILED -copy %PLATFORM%\Microsoft.Cpp.%PLATFORM%.LLVM-vs2010.targets %D%\LLVM-vs2010 -IF NOT %ERRORLEVEL% == 0 GOTO FAILED -set SUCCESS=1 -GOTO TRY_V110 -:FOUND_V110 -REM Routine for installing v110 toolchain. -IF NOT EXIST %D%\LLVM-vs2012 mkdir %D%\LLVM-vs2012 -IF NOT %ERRORLEVEL% == 0 GOTO FAILED -copy %PLATFORM%\Microsoft.Cpp.%PLATFORM%.LLVM-vs2012.props %D%\LLVM-vs2012 +ECHO Installing x64 Platform Toolset +SET PlatformToolsets=%VCTargets%\Platforms\x64\PlatformToolsets +IF NOT EXIST "%PlatformToolsets%\llvm" mkdir "%PlatformToolsets%\llvm" IF NOT %ERRORLEVEL% == 0 GOTO FAILED -copy %PLATFORM%\Microsoft.Cpp.%PLATFORM%.LLVM-vs2012.targets %D%\LLVM-vs2012 +copy llvm\PlatformX64\Toolset.props "%PlatformToolsets%\llvm" IF NOT %ERRORLEVEL% == 0 GOTO FAILED -IF NOT EXIST %D%\LLVM-vs2012_xp mkdir %D%\LLVM-vs2012_xp +copy llvm\PlatformX64\Toolset.targets "%PlatformToolsets%\llvm" IF NOT %ERRORLEVEL% == 0 GOTO FAILED -copy %PLATFORM%\Microsoft.Cpp.%PLATFORM%.LLVM-vs2012_xp.props %D%\LLVM-vs2012_xp -IF NOT %ERRORLEVEL% == 0 GOTO FAILED -copy %PLATFORM%\Microsoft.Cpp.%PLATFORM%.LLVM-vs2012_xp.targets %D%\LLVM-vs2012_xp -IF NOT %ERRORLEVEL% == 0 GOTO FAILED -set SUCCESS=1 -GOTO TRY_V120 -:FOUND_V120 -REM Routine for installing v120 toolchain. -IF NOT EXIST %D%\LLVM-vs2013 mkdir %D%\LLVM-vs2013 -IF NOT %ERRORLEVEL% == 0 GOTO FAILED -copy %PLATFORM%\toolset-vs2013.props %D%\LLVM-vs2013\toolset.props +ECHO Installing Win32 Platform Toolset +SET PlatformToolsets=%VCTargets%\Platforms\Win32\PlatformToolsets +IF NOT EXIST "%PlatformToolsets%\llvm" mkdir "%PlatformToolsets%\llvm" IF NOT %ERRORLEVEL% == 0 GOTO FAILED -copy %PLATFORM%\toolset-vs2013.targets %D%\LLVM-vs2013\toolset.targets +copy llvm\PlatformX86\Toolset.props "%PlatformToolsets%\llvm" IF NOT %ERRORLEVEL% == 0 GOTO FAILED -IF NOT EXIST %D%\LLVM-vs2013_xp mkdir %D%\LLVM-vs2013_xp +copy llvm\PlatformX86\Toolset.targets "%PlatformToolsets%\llvm" IF NOT %ERRORLEVEL% == 0 GOTO FAILED -copy %PLATFORM%\toolset-vs2013_xp.props %D%\LLVM-vs2013_xp\toolset.props -IF NOT %ERRORLEVEL% == 0 GOTO FAILED -copy %PLATFORM%\toolset-vs2013_xp.targets %D%\LLVM-vs2013_xp\toolset.targets -IF NOT %ERRORLEVEL% == 0 GOTO FAILED -set SUCCESS=1 -GOTO TRY_V140 -:FOUND_V140 -REM Routine for installing v140 toolchain. -IF NOT EXIST %D%\LLVM-vs2014 mkdir %D%\LLVM-vs2014 -IF NOT %ERRORLEVEL% == 0 GOTO FAILED -copy %PLATFORM%\toolset-vs2014.props %D%\LLVM-vs2014\toolset.props +ECHO Installing C++ Settings UI +copy llvm\clang-cl.xml "%VCTargets%\1033" IF NOT %ERRORLEVEL% == 0 GOTO FAILED -copy %PLATFORM%\toolset-vs2014.targets %D%\LLVM-vs2014\toolset.targets -IF NOT %ERRORLEVEL% == 0 GOTO FAILED -IF NOT EXIST %D%\LLVM-vs2014_xp mkdir %D%\LLVM-vs2014_xp -IF NOT %ERRORLEVEL% == 0 GOTO FAILED -copy %PLATFORM%\toolset-vs2014_xp.props %D%\LLVM-vs2014_xp\toolset.props -IF NOT %ERRORLEVEL% == 0 GOTO FAILED -copy %PLATFORM%\toolset-vs2014_xp.targets %D%\LLVM-vs2014_xp\toolset.targets -IF NOT %ERRORLEVEL% == 0 GOTO FAILED -set SUCCESS=1 -GOTO TRY_V150 - :DONE echo Done! Index: llvm/tools/msbuild/license.txt =================================================================== --- /dev/null +++ llvm/tools/msbuild/license.txt @@ -0,0 +1,39 @@ +==================== +LLVM Release License +==================== +University of Illinois/NCSA +Open Source License + +Copyright (c) 2007-2018 University of Illinois at Urbana-Champaign. +All rights reserved. + +Developed by: + + LLVM Team + + University of Illinois at Urbana-Champaign + + http://llvm.org + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal with the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimers. + + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimers in the documentation and/or other materials provided with the distribution. + + * Neither the names of the LLVM Team, University of Illinois at Urbana-Champaign, nor the names of its contributors may be used to endorse or promote products derived from this Software without specific prior written permission. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE SOFTWARE. + +==================== +The LLVM software contains code written by third parties. Such software will have its own individual LICENSE.TXT file in the directory in which it appears. This file will describe the copyrights, license, and restrictions which apply +to that code. + +The disclaimer of warranty in the University of Illinois Open Source License applies to all code in the LLVM Distribution, and nothing in any of the other licenses gives permission to use the names of the LLVM Team or the University of Illinois to endorse or promote products derived from this Software. + +The following pieces of software have additional or alternate copyrights, licenses, and/or restrictions: + +Program Directory +------- --------- +<none yet> + Index: llvm/tools/msbuild/llvm.csproj =================================================================== --- /dev/null +++ llvm/tools/msbuild/llvm.csproj @@ -0,0 +1,102 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <MinimumVisualStudioVersion>15.0</MinimumVisualStudioVersion> + <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath> + </PropertyGroup> + <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectTypeGuids>{82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <ProjectGuid>{62530D9E-1B24-4C31-8DC9-AE47E9E5DC53}</ProjectGuid> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>llvm</RootNamespace> + <AssemblyName>llvm</AssemblyName> + <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> + <GeneratePkgDefFile>false</GeneratePkgDefFile> + <IncludeAssemblyInVSIXContainer>false</IncludeAssemblyInVSIXContainer> + <IncludeDebugSymbolsInVSIXContainer>false</IncludeDebugSymbolsInVSIXContainer> + <IncludeDebugSymbolsInLocalVSIXDeployment>false</IncludeDebugSymbolsInLocalVSIXDeployment> + <CopyBuildOutputToOutputDirectory>false</CopyBuildOutputToOutputDirectory> + <CopyOutputSymbolsToOutputDirectory>false</CopyOutputSymbolsToOutputDirectory> + <StartAction>Program</StartAction> + <StartProgram Condition="'$(DevEnvDir)' != ''">$(DevEnvDir)devenv.exe</StartProgram> + <StartArguments>/rootsuffix Exp</StartArguments> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\Release\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <ItemGroup> + <Content Include="LLVM.Cpp.Common.props"> + <IncludeInVSIX>true</IncludeInVSIX> + <InstallRoot>VCTargets</InstallRoot> + </Content> + <Content Include="license.txt"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + <IncludeInVSIX>true</IncludeInVSIX> + </Content> + <Content Include="LLVM.Cpp.Common.targets"> + <IncludeInVSIX>true</IncludeInVSIX> + <InstallRoot>VCTargets</InstallRoot> + </Content> + <None Include="source.extension.vsixmanifest"> + <SubType>Designer</SubType> + </None> + <Content Include="Platformx64\Toolset.props"> + <IncludeInVSIX>true</IncludeInVSIX> + <InstallRoot>VCTargets</InstallRoot> + <VSIXSubPath>Platforms\x64\PlatformToolsets\llvm</VSIXSubPath> + </Content> + <Content Include="Platformx64\Toolset.targets"> + <IncludeInVSIX>true</IncludeInVSIX> + <InstallRoot>VCTargets</InstallRoot> + <VSIXSubPath>Platforms\x64\PlatformToolsets\llvm</VSIXSubPath> + </Content> + <Content Include="Platformx86\Toolset.props"> + <IncludeInVSIX>true</IncludeInVSIX> + <InstallRoot>VCTargets</InstallRoot> + <VSIXSubPath>Platforms\Win32\PlatformToolsets\llvm</VSIXSubPath> + </Content> + <Content Include="Platformx86\Toolset.targets"> + <IncludeInVSIX>true</IncludeInVSIX> + <InstallRoot>VCTargets</InstallRoot> + <VSIXSubPath>Platforms\Win32\PlatformToolsets\llvm</VSIXSubPath> + </Content> + </ItemGroup> + <ItemGroup> + <Content Include="clang-cl.xml"> + <IncludeInVSIX>true</IncludeInVSIX> + <InstallRoot>VCTargets</InstallRoot> + <VSIXSubPath>1033</VSIXSubPath> + </Content> + </ItemGroup> + <ItemGroup> + <Folder Include="Properties\" /> + </ItemGroup> + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> + <Import Project="$(VSToolsPath)\VSSDK\Microsoft.VsSDK.targets" Condition="'$(VSToolsPath)' != ''" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> +</Project> \ No newline at end of file Index: llvm/tools/msbuild/llvm.sln =================================================================== --- /dev/null +++ llvm/tools/msbuild/llvm.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27004.2006 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "llvm", "llvm.csproj", "{62530D9E-1B24-4C31-8DC9-AE47E9E5DC53}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {62530D9E-1B24-4C31-8DC9-AE47E9E5DC53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {62530D9E-1B24-4C31-8DC9-AE47E9E5DC53}.Debug|Any CPU.Build.0 = Debug|Any CPU + {62530D9E-1B24-4C31-8DC9-AE47E9E5DC53}.Release|Any CPU.ActiveCfg = Release|Any CPU + {62530D9E-1B24-4C31-8DC9-AE47E9E5DC53}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {BD0FC803-C28B-4327-A129-CFB35C873897} + EndGlobalSection +EndGlobal Index: llvm/tools/msbuild/source.extension.vsixmanifest =================================================================== --- /dev/null +++ llvm/tools/msbuild/source.extension.vsixmanifest @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011"> + <Metadata> + <Identity Id="llvm.d29c51f0-961f-4e20-aad6-356af569907f" Version="1.0" Language="en-US" Publisher="The LLVM Foundation" /> + <DisplayName>LLVM Compiler Toolchain</DisplayName> + <Description xml:space="preserve">Allows the LLVM Compiler Toolchain (installed separately) to be used from within Visual Studio to build C/C++ Projects.</Description> + <License>license.txt</License> + </Metadata> + <Installation AllUsers="true"> + <InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[14.0,16.0)" /> + <InstallationTarget Version="[14.0,16.0)" Id="Microsoft.VisualStudio.Pro" /> + <InstallationTarget Version="[14.0,16.0)" Id="Microsoft.VisualStudio.Enterprise" /> + </Installation> + <Dependencies> + <Dependency Id="Microsoft.Framework.NDP" DisplayName="Microsoft .NET Framework" d:Source="Manual" Version="[4.5,)" /> + </Dependencies> + <Prerequisites> + <Prerequisite Id="Microsoft.VisualStudio.Component.CoreEditor" Version="[15.0,16.0)" DisplayName="Visual Studio core editor" /> + <Prerequisite Id="Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core" Version="[15.0.26621.2,16.0)" DisplayName="Visual C++ core desktop features" /> + <Prerequisite Id="Microsoft.VisualStudio.Component.VC.CoreIde" Version="[15.0.26606.0,16.0)" DisplayName="Visual Studio C++ core features" /> + </Prerequisites> +</PackageManifest> Index: llvm/tools/msbuild/toolset-vs2013.targets =================================================================== --- llvm/tools/msbuild/toolset-vs2013.targets +++ /dev/null @@ -1,3 +0,0 @@ -<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <Import Project="$(VCTargetsPath)\Microsoft.CppCommon.targets" /> -</Project> Index: llvm/tools/msbuild/toolset-vs2013_xp.targets =================================================================== --- llvm/tools/msbuild/toolset-vs2013_xp.targets +++ /dev/null @@ -1,21 +0,0 @@ -<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <!-- Force TargetFrameworkVersion to v4.0 to support XP--> - <PropertyGroup> - <TargetFrameworkVersion>v4.0</TargetFrameworkVersion> - <BeforeClCompileTargets>NoSupportCodeAnalysisXP;$(BeforeClCompileTargets)</BeforeClCompileTargets> - </PropertyGroup> - - <Import Project="$(VCTargetsPath)\Microsoft.CppCommon.targets" /> - - <Target Name="NoSupportCodeAnalysisXP" Condition="'$(ErrorNoSupportCodeAnalysisXP)' != 'false'"> - <VCMessage Condition="'$(DesignTimeBuild)' != 'true' and '@(ClCompile->AnyHaveMetadataValue('EnablePREfast', 'true'))'=='true'" Code="MSB8026" Type="Error"/> - </Target> - - <PropertyGroup> - <PrepareForBuildDependsOn>CheckWindowsSDK71A;$(PrepareForBuildDependsOn)</PrepareForBuildDependsOn> - </PropertyGroup> - - <Target Name="CheckWindowsSDK71A"> - <VCMessage Code="MSB8003" Type="Warning" Arguments="WindowsSdkDir_71A" Condition="'$(WindowsSdkDir_71A)'=='' and '$(UseEnv)' != 'true'" /> - </Target> -</Project> Index: llvm/tools/msbuild/toolset-vs2014.targets =================================================================== --- llvm/tools/msbuild/toolset-vs2014.targets +++ /dev/null @@ -1,3 +0,0 @@ -<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <Import Project="$(VCTargetsPath)\Microsoft.CppCommon.targets" /> -</Project> Index: llvm/tools/msbuild/toolset-vs2014_xp.targets =================================================================== --- llvm/tools/msbuild/toolset-vs2014_xp.targets +++ /dev/null @@ -1,21 +0,0 @@ -<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <!-- Force TargetFrameworkVersion to v4.0 to support XP--> - <PropertyGroup> - <TargetFrameworkVersion>v4.0</TargetFrameworkVersion> - <BeforeClCompileTargets>NoSupportCodeAnalysisXP;$(BeforeClCompileTargets)</BeforeClCompileTargets> - </PropertyGroup> - - <Import Project="$(VCTargetsPath)\Microsoft.CppCommon.targets" /> - - <Target Name="NoSupportCodeAnalysisXP" Condition="'$(ErrorNoSupportCodeAnalysisXP)' != 'false'"> - <VCMessage Condition="'$(DesignTimeBuild)' != 'true' and '@(ClCompile->AnyHaveMetadataValue('EnablePREfast', 'true'))'=='true'" Code="MSB8026" Type="Error"/> - </Target> - - <PropertyGroup> - <PrepareForBuildDependsOn>CheckWindowsSDK71A;$(PrepareForBuildDependsOn)</PrepareForBuildDependsOn> - </PropertyGroup> - - <Target Name="CheckWindowsSDK71A"> - <VCMessage Code="MSB8003" Type="Warning" Arguments="WindowsSdkDir_71A" Condition="'$(WindowsSdkDir_71A)'=='' and '$(UseEnv)' != 'true'" /> - </Target> -</Project> Index: llvm/tools/msbuild/uninstall.bat =================================================================== --- llvm/tools/msbuild/uninstall.bat +++ llvm/tools/msbuild/uninstall.bat @@ -5,69 +5,25 @@ REM CD to the directory of this batch file. cd /d %~dp0 -set PLATFORM=None -:LOOPHEAD -IF %PLATFORM% == x64 GOTO LOOPEND -IF %PLATFORM% == Win32 SET PLATFORM=x64 -IF %PLATFORM% == None SET PLATFORM=Win32 +SET VCTargets=%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets +ECHO Uninstalling Common Files +IF EXIST "%VCTargets%\LLVM.Cpp.Common.props" del "%VCTargets%\LLVM.Cpp.Common.props" +IF EXIST "%VCTargets%\LLVM.Cpp.Common.targets" del "%VCTargets%\LLVM.Cpp.Common.targets" -SET D="%ProgramFiles%\MSBuild\Microsoft.Cpp\v4.0\Platforms\%PLATFORM%\PlatformToolsets" -IF EXIST %D%\LLVM-vs2010 del %D%\LLVM-vs2010\Microsoft.Cpp.%PLATFORM%.LLVM-vs2010.props -IF EXIST %D%\LLVM-vs2010 del %D%\LLVM-vs2010\Microsoft.Cpp.%PLATFORM%.LLVM-vs2010.targets -IF EXIST %D%\LLVM-vs2010 rmdir %D%\LLVM-vs2010 -SET D="%ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\Platforms\%PLATFORM%\PlatformToolsets" -IF EXIST %D%\LLVM-vs2010 del %D%\LLVM-vs2010\Microsoft.Cpp.%PLATFORM%.LLVM-vs2010.props -IF EXIST %D%\LLVM-vs2010 del %D%\LLVM-vs2010\Microsoft.Cpp.%PLATFORM%.LLVM-vs2010.targets -IF EXIST %D%\LLVM-vs2010 rmdir %D%\LLVM-vs2010 +ECHO Uninstalling x64 Platform Toolset +SET PlatformToolsets=%VCTargets%\Platforms\x64\PlatformToolsets +IF EXIST "%PlatformToolsets%\llvm\Toolset.props" del "%PlatformToolsets%\llvm\Toolset.props" +IF EXIST "%PlatformToolsets%\llvm\Toolset.targets" del "%PlatformToolsets%\llvm\Toolset.targets" +IF EXIST "%PlatformToolsets%\llvm" rd "%PlatformToolsets%\llvm" -SET D="%ProgramFiles%\MSBuild\Microsoft.Cpp\v4.0\V110\Platforms\%PLATFORM%\PlatformToolsets" -IF EXIST %D%\LLVM-vs2012 del %D%\LLVM-vs2012\Microsoft.Cpp.%PLATFORM%.LLVM-vs2012.props -IF EXIST %D%\LLVM-vs2012 del %D%\LLVM-vs2012\Microsoft.Cpp.%PLATFORM%.LLVM-vs2012.targets -IF EXIST %D%\LLVM-vs2012 rmdir %D%\LLVM-vs2012 -IF EXIST %D%\LLVM-vs2012_xp del %D%\LLVM-vs2012_xp\Microsoft.Cpp.%PLATFORM%.LLVM-vs2012_xp.props -IF EXIST %D%\LLVM-vs2012_xp del %D%\LLVM-vs2012_xp\Microsoft.Cpp.%PLATFORM%.LLVM-vs2012_xp.targets -IF EXIST %D%\LLVM-vs2012_xp rmdir %D%\LLVM-vs2012_xp -SET D="%ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\V110\Platforms\%PLATFORM%\PlatformToolsets" -IF EXIST %D%\LLVM-vs2012 del %D%\LLVM-vs2012\Microsoft.Cpp.%PLATFORM%.LLVM-vs2012.props -IF EXIST %D%\LLVM-vs2012 del %D%\LLVM-vs2012\Microsoft.Cpp.%PLATFORM%.LLVM-vs2012.targets -IF EXIST %D%\LLVM-vs2012 rmdir %D%\LLVM-vs2012 -IF EXIST %D%\LLVM-vs2012_xp del %D%\LLVM-vs2012_xp\Microsoft.Cpp.%PLATFORM%.LLVM-vs2012_xp.props -IF EXIST %D%\LLVM-vs2012_xp del %D%\LLVM-vs2012_xp\Microsoft.Cpp.%PLATFORM%.LLVM-vs2012_xp.targets -IF EXIST %D%\LLVM-vs2012_xp rmdir %D%\LLVM-vs2012_xp +ECHO Uninstalling Win32 Platform Toolset +SET PlatformToolsets=%VCTargets%\Platforms\Win32\PlatformToolsets +IF EXIST "%PlatformToolsets%\llvm\Toolset.props" del "%PlatformToolsets%\llvm\Toolset.props" +IF EXIST "%PlatformToolsets%\llvm\Toolset.targets" del "%PlatformToolsets%\llvm\Toolset.targets" +IF EXIST "%PlatformToolsets%\llvm" rd "%PlatformToolsets%\llvm" -SET D="%ProgramFiles%\MSBuild\Microsoft.Cpp\v4.0\V120\Platforms\%PLATFORM%\PlatformToolsets" -IF EXIST %D%\LLVM-vs2013 del %D%\LLVM-vs2013\toolset.props -IF EXIST %D%\LLVM-vs2013 del %D%\LLVM-vs2013\toolset.targets -IF EXIST %D%\LLVM-vs2013 rmdir %D%\LLVM-vs2013 -IF EXIST %D%\LLVM-vs2013_xp del %D%\LLVM-vs2013_xp\toolset.props -IF EXIST %D%\LLVM-vs2013_xp del %D%\LLVM-vs2013_xp\toolset.targets -IF EXIST %D%\LLVM-vs2013_xp rmdir %D%\LLVM-vs2013_xp -SET D="%ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\V120\Platforms\%PLATFORM%\PlatformToolsets" -IF EXIST %D%\LLVM-vs2013 del %D%\LLVM-vs2013\toolset.props -IF EXIST %D%\LLVM-vs2013 del %D%\LLVM-vs2013\toolset.targets -IF EXIST %D%\LLVM-vs2013 rmdir %D%\LLVM-vs2013 -IF EXIST %D%\LLVM-vs2013_xp del %D%\LLVM-vs2013_xp\toolset.props -IF EXIST %D%\LLVM-vs2013_xp del %D%\LLVM-vs2013_xp\toolset.targets -IF EXIST %D%\LLVM-vs2013_xp rmdir %D%\LLVM-vs2013_xp +ECHO Uninstalling C++ Settings UI +IF EXIST "%VCTargets%\1033\clang-cl.xml" del "%VCTargets%\1033\clang-cl.xml" -SET D="%ProgramFiles%\MSBuild\Microsoft.Cpp\v4.0\V140\Platforms\%PLATFORM%\PlatformToolsets" -IF EXIST %D%\LLVM-vs2014 del %D%\LLVM-vs2014\toolset.props -IF EXIST %D%\LLVM-vs2014 del %D%\LLVM-vs2014\toolset.targets -IF EXIST %D%\LLVM-vs2014 rmdir %D%\LLVM-vs2014 -IF EXIST %D%\LLVM-vs2014_xp del %D%\LLVM-vs2014_xp\toolset.props -IF EXIST %D%\LLVM-vs2014_xp del %D%\LLVM-vs2014_xp\toolset.targets -IF EXIST %D%\LLVM-vs2014_xp rmdir %D%\LLVM-vs2014_xp -SET D="%ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\V140\Platforms\%PLATFORM%\PlatformToolsets" -IF EXIST %D%\LLVM-vs2014 del %D%\LLVM-vs2014\toolset.props -IF EXIST %D%\LLVM-vs2014 del %D%\LLVM-vs2014\toolset.targets -IF EXIST %D%\LLVM-vs2014 rmdir %D%\LLVM-vs2014 -IF EXIST %D%\LLVM-vs2014_xp del %D%\LLVM-vs2014_xp\toolset.props -IF EXIST %D%\LLVM-vs2014_xp del %D%\LLVM-vs2014_xp\toolset.targets -IF EXIST %D%\LLVM-vs2014_xp rmdir %D%\LLVM-vs2014_xp - - -GOTO LOOPHEAD - -:LOOPEND echo Done!