| <?xml version="1.0" encoding="utf-8"?> | |
| <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |
| <PropertyGroup Label="Globals"> | |
| <__PyprojectClangCl_Props_Imported>true</__PyprojectClangCl_Props_Imported> | |
| </PropertyGroup> | |
| <PropertyGroup> | |
| <!-- CLANG_PROFILE_PATH is configurable for "remote PGO builds" | |
| For convenience, we also accept paths without trailing slashes. | |
| --> | |
| <CLANG_PROFILE_PATH Condition="'$(CLANG_PROFILE_PATH)' == ''">$(OutDir)</CLANG_PROFILE_PATH> | |
| <_CLANG_PROFILE_PATH>$(CLANG_PROFILE_PATH)</_CLANG_PROFILE_PATH> | |
| <_CLANG_PROFILE_PATH Condition="!HasTrailingSlash($(_CLANG_PROFILE_PATH))">$(_CLANG_PROFILE_PATH)\</_CLANG_PROFILE_PATH> | |
| </PropertyGroup> | |
| <ItemGroup> | |
| <_profrawFiles Include="$(OutDir)instrumented\$(TargetName)_*.profraw" /> | |
| </ItemGroup> | |
| <Target Name="EnsureClangProfileData" BeforeTargets="PrepareForBuild" | |
| Condition="'$(SupportPGO)' and $(Configuration) == 'PGUpdate'"> | |
| <Error Text="PGO run did not succeed (no $(TargetName)_*.profraw files) and there is no data to merge" | |
| Condition="$(RequireProfileData) == 'true' and @(_profrawFiles) == ''" /> | |
| </Target> | |
| <Target Name="MergeClangProfileData" BeforeTargets="PrepareForBuild" | |
| Condition="'$(SupportPGO)' and $(Configuration) == 'PGUpdate'" | |
| Inputs="@(_profrawFiles)" | |
| Outputs="$(OutDir)instrumented\profdata.profdata"> | |
| <Exec | |
| Command='"$(LLVMInstallDir)\bin\llvm-profdata.exe" merge -output="$(OutDir)instrumented\profdata.profdata" "$(OutDir)instrumented\*_*.profraw"' /> | |
| </Target> | |
| <Target Name="CleanClangProfileData" BeforeTargets="Clean"> | |
| <Delete Files="@(_profrawFiles)" TreatErrorsAsWarnings="true" /> | |
| <Delete Files="$(OutDir)instrumented\profdata.profdata" TreatErrorsAsWarnings="true" /> | |
| </Target> | |
| <ItemDefinitionGroup> | |
| <ClCompile> | |
| <!-- | |
| ExceptionHandling=Async sets MSVC's /EHa (-fasync-exceptions in clang) | |
| For clang, /EHa just has a slightly different meaning compared to MSVC, | |
| so this option is needed to handle SEH correctly | |
| (even though MSVC does not need it). | |
| Please see GH-131691 for details. | |
| --> | |
| <ExceptionHandling>Async</ExceptionHandling> | |
| <AdditionalOptions>-Wno-pointer-sign -Wno-incompatible-pointer-types-discards-qualifiers -Wno-unused-function %(AdditionalOptions)</AdditionalOptions> | |
| <AdditionalOptions Condition="'$(Platform)' == 'Win32'">-m32 %(AdditionalOptions)</AdditionalOptions> | |
| <AdditionalOptions Condition="'$(Platform)' == 'x64'">-m64 %(AdditionalOptions)</AdditionalOptions> | |
| <AdditionalOptions Condition="$(Configuration) != 'Debug'">-flto=thin %(AdditionalOptions)</AdditionalOptions> | |
| <AdditionalOptions Condition="$(SupportPGO) and $(Configuration) == 'PGInstrument'">-fprofile-instr-generate=$(_CLANG_PROFILE_PATH)$(TargetName)_%m.profraw %(AdditionalOptions)</AdditionalOptions> | |
| <AdditionalOptions Condition="$(SupportPGO) and $(Configuration) == 'PGUpdate'">-fprofile-instr-use=$(OutDir)instrumented\profdata.profdata -Wno-profile-instr-unprofiled %(AdditionalOptions)</AdditionalOptions> | |
| </ClCompile> | |
| </ItemDefinitionGroup> | |
| </Project> |