80 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			XML
		
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			XML
		
	
	
	
| <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 (LLVM.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>
 | |
|     <DebuggerFlavor Condition="'$(DebuggerFlavor)'==''">WindowsLocalDebugger</DebuggerFlavor>
 | |
|   </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>
 | |
| 
 | |
|   <!-- 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>
 | |
|     <LLVMInstallDir Condition="'$(LLVMInstallDir)' != ''">$(LLVMInstallDir)\</LLVMInstallDir>
 | |
|     <ClangClExecutable>$(LLVMInstallDir)bin\clang-cl.exe</ClangClExecutable>
 | |
|     <LldLinkExecutable>$(LLVMInstallDir)bin\lld-link.exe</LldLinkExecutable>
 | |
|     <LlvmLibExecutable>$(LLVMInstallDir)bin\llvm-lib.exe</LlvmLibExecutable>
 | |
|     <UseClangCl>true</UseClangCl>
 | |
|     <UseLldLink>true</UseLldLink>
 | |
|     <UseLlvmLib>true</UseLlvmLib>
 | |
|   </PropertyGroup>
 | |
| 
 | |
|   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.WindowsSDK.props" Condition="Exists('$(VCTargetsPath)\Microsoft.Cpp.WindowsSDK.props')"/>
 | |
|   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Common.props" />
 | |
| 
 | |
|   <PropertyGroup>
 | |
|     <!-- 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>
 | |
|       <!-- Set this to "Default" (which means not passing any /RTC option) so that any other value will
 | |
|            be treated as having been overridden by the user.  This Serves as a hint to the user that
 | |
|            Default is the value we support, and other values will generate a warning.  It also means
 | |
|            that if the user simply creates a new project in MSVC (which uses /RTCu by default), then
 | |
|            switches the toolset to Clang, we will still treat the value as default (which for us is to
 | |
|            not pass the option).  Only if the user explicitly overrode this setting in a project to use
 | |
|            /RTCu would we see the warning. -->
 | |
|       <BasicRuntimeChecks>Default</BasicRuntimeChecks>
 | |
|     </ClCompile>
 | |
|   </ItemDefinitionGroup>
 | |
| </Project>
 |