80 lines
4.8 KiB
Plaintext
80 lines
4.8 KiB
Plaintext
|
<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>
|