|  | 
| 1 |  | -<!--  | 
|  | 1 | +<!-- | 
| 2 | 2 |     Input: | 
| 3 | 3 |         SOSPackagePathPrefix - the nupkg package path prefix. The SOS native binaries are added to package relative to this. | 
| 4 | 4 | --> | 
| 5 | 5 | <Project> | 
| 6 | 6 |   <PropertyGroup> | 
| 7 | 7 |     <SOSExtensionsBinaries>$(ArtifactsBinDir)\SOS.Extensions\$(Configuration)\netstandard2.0\publish\*.dll</SOSExtensionsBinaries> | 
|  | 8 | +    <IsMuslBuild Condition="$(TargetRid.StartsWith('linux-musl-'))">true</IsMuslBuild> | 
| 8 | 9 |   </PropertyGroup> | 
| 9 | 10 | 
 | 
|  | 11 | +  <ItemGroup> | 
|  | 12 | +    <SosRequiredBinaries Include="$(ArtifactsBinDir)\Windows_NT.x64.$(Configuration)\sos.dll" TargetRid="win-x64"/> | 
|  | 13 | +    <SosRequiredBinaries Include="$(ArtifactsBinDir)\Windows_NT.x64.$(Configuration)\Microsoft.DiaSymReader.Native.amd64.dll" TargetRid="win-x64" /> | 
|  | 14 | +    <SosRequiredBinaries Condition="'$(PackageWithCDac)' == 'true'" Include="$(ArtifactsBinDir)\Windows_NT.x64.$(Configuration)\mscordaccore_universal.dll" TargetRid="win-x64" /> | 
|  | 15 | +  </ItemGroup> | 
|  | 16 | + | 
| 10 | 17 |   <ItemGroup Condition="'$(BuildX64Package)' != 'true'"> | 
| 11 | 18 |     <SosRequiredBinaries Include="$(ArtifactsBinDir)\Windows_NT.x86.$(Configuration)\sos.dll" TargetRid="win-x86" /> | 
| 12 | 19 |     <SosRequiredBinaries Include="$(ArtifactsBinDir)\Windows_NT.x86.$(Configuration)\Microsoft.DiaSymReader.Native.x86.dll" TargetRid="win-x86" /> | 
| 13 |  | -       | 
|  | 20 | + | 
| 14 | 21 |     <SosRequiredBinaries Include="$(ArtifactsBinDir)\Windows_NT.arm64.$(Configuration)\sos.dll" TargetRid="win-arm64" /> | 
| 15 | 22 |     <SosRequiredBinaries Include="$(ArtifactsBinDir)\Windows_NT.arm64.$(Configuration)\Microsoft.DiaSymReader.Native.arm64.dll" TargetRid="win-arm64" /> | 
| 16 | 23 |     <SosRequiredBinaries Condition="'$(PackageWithCDac)' == 'true'" Include="$(ArtifactsBinDir)\Windows_NT.arm64.$(Configuration)\mscordaccore_universal.dll" TargetRid="win-arm64" /> | 
|  | 
| 20 | 27 |     <SosRequiredBinaries Condition="'$(PackageWithCDac)' == 'true'" Include="$(ArtifactsBinDir)\linux.x64.$(Configuration)\libmscordaccore_universal.so" TargetRid="linux-x64" /> | 
| 21 | 28 |     <SosRequiredBinaries Include="$(ArtifactsBinDir)\linux.x64.$(Configuration)\sosdocsunix.txt" TargetRid="linux-x64" /> | 
| 22 | 29 | 
 | 
| 23 |  | -    <SosRequiredBinaries Include="$(ArtifactsBinDir)\linux-musl.x64.$(Configuration)\libsosplugin.so" TargetRid="linux-musl-x64" /> | 
| 24 |  | -    <SosRequiredBinaries Include="$(ArtifactsBinDir)\linux-musl.x64.$(Configuration)\libsos.so" TargetRid="linux-musl-x64" /> | 
| 25 |  | -    <SosRequiredBinaries Include="$(ArtifactsBinDir)\linux-musl.x64.$(Configuration)\sosdocsunix.txt" TargetRid="linux-musl-x64" /> | 
|  | 30 | +    <SosRequiredBinaries Include="$(ArtifactsBinDir)\linux-musl.x64.$(Configuration)\libsosplugin.so" TargetRid="linux-musl-x64" TargetsMusl="true"/> | 
|  | 31 | +    <SosRequiredBinaries Include="$(ArtifactsBinDir)\linux-musl.x64.$(Configuration)\libsos.so" TargetRid="linux-musl-x64" TargetsMusl="true"/> | 
|  | 32 | +    <SosRequiredBinaries Include="$(ArtifactsBinDir)\linux-musl.x64.$(Configuration)\sosdocsunix.txt" TargetRid="linux-musl-x64" TargetsMusl="true"/> | 
| 26 | 33 | 
 | 
| 27 | 34 |     <SosRequiredBinaries Include="$(ArtifactsBinDir)\linux.arm.$(Configuration)\libsosplugin.so" TargetRid="linux-arm" /> | 
| 28 | 35 |     <SosRequiredBinaries Include="$(ArtifactsBinDir)\linux.arm.$(Configuration)\libsos.so" TargetRid="linux-arm" /> | 
|  | 
| 32 | 39 |     <SosRequiredBinaries Include="$(ArtifactsBinDir)\linux.arm64.$(Configuration)\libsos.so" TargetRid="linux-arm64" /> | 
| 33 | 40 |     <SosRequiredBinaries Condition="'$(PackageWithCDac)' == 'true'" Include="$(ArtifactsBinDir)\linux.arm64.$(Configuration)\libmscordaccore_universal.so" TargetRid="linux-arm64" /> | 
| 34 | 41 |     <SosRequiredBinaries Include="$(ArtifactsBinDir)\linux.arm64.$(Configuration)\sosdocsunix.txt" TargetRid="linux-arm64" /> | 
| 35 |  | -     | 
| 36 |  | -    <SosRequiredBinaries Include="$(ArtifactsBinDir)\linux-musl.arm64.$(Configuration)\libsosplugin.so" TargetRid="linux-musl-arm64" /> | 
| 37 |  | -    <SosRequiredBinaries Include="$(ArtifactsBinDir)\linux-musl.arm64.$(Configuration)\libsos.so" TargetRid="linux-musl-arm64" /> | 
| 38 |  | -    <SosRequiredBinaries Include="$(ArtifactsBinDir)\linux-musl.arm64.$(Configuration)\sosdocsunix.txt" TargetRid="linux-musl-arm64" /> | 
| 39 | 42 | 
 | 
| 40 |  | -    <SosRequiredBinaries Include="$(ArtifactsBinDir)\linux-musl.arm.$(Configuration)\libsosplugin.so" TargetRid="linux-musl-arm" /> | 
| 41 |  | -    <SosRequiredBinaries Include="$(ArtifactsBinDir)\linux-musl.arm.$(Configuration)\libsos.so" TargetRid="linux-musl-arm" /> | 
| 42 |  | -    <SosRequiredBinaries Include="$(ArtifactsBinDir)\linux-musl.arm.$(Configuration)\sosdocsunix.txt" TargetRid="linux-musl-arm" /> | 
|  | 43 | +    <SosRequiredBinaries Include="$(ArtifactsBinDir)\linux-musl.arm64.$(Configuration)\libsosplugin.so" TargetRid="linux-musl-arm64" TargetsMusl="true"/> | 
|  | 44 | +    <SosRequiredBinaries Include="$(ArtifactsBinDir)\linux-musl.arm64.$(Configuration)\libsos.so" TargetRid="linux-musl-arm64" TargetsMusl="true"/> | 
|  | 45 | +    <SosRequiredBinaries Include="$(ArtifactsBinDir)\linux-musl.arm64.$(Configuration)\sosdocsunix.txt" TargetRid="linux-musl-arm64" TargetsMusl="true"/> | 
|  | 46 | + | 
|  | 47 | +    <SosRequiredBinaries Include="$(ArtifactsBinDir)\linux-musl.arm.$(Configuration)\libsosplugin.so" TargetRid="linux-musl-arm" TargetsMusl="true"/> | 
|  | 48 | +    <SosRequiredBinaries Include="$(ArtifactsBinDir)\linux-musl.arm.$(Configuration)\libsos.so" TargetRid="linux-musl-arm" TargetsMusl="true"/> | 
|  | 49 | +    <SosRequiredBinaries Include="$(ArtifactsBinDir)\linux-musl.arm.$(Configuration)\sosdocsunix.txt" TargetRid="linux-musl-arm" TargetsMusl="true"/> | 
| 43 | 50 | 
 | 
| 44 | 51 |     <SosRequiredBinaries Include="$(ArtifactsBinDir)\osx.x64.$(Configuration)\libsosplugin.dylib" TargetRid="osx-x64" /> | 
| 45 | 52 |     <SosRequiredBinaries Include="$(ArtifactsBinDir)\osx.x64.$(Configuration)\libsos.dylib" TargetRid="osx-x64" /> | 
|  | 
| 51 | 58 |     <SosRequiredBinaries Condition="'$(PackageWithCDac)' == 'true'" Include="$(ArtifactsBinDir)\osx.arm64.$(Configuration)\libmscordaccore_universal.dylib" TargetRid="osx-arm64" /> | 
| 52 | 59 |     <SosRequiredBinaries Include="$(ArtifactsBinDir)\osx.arm64.$(Configuration)\sosdocsunix.txt" TargetRid="osx-arm64" /> | 
| 53 | 60 | 
 | 
| 54 |  | -    <_SosBinariesToPack Include="@(SosRequiredBinaries)" /> | 
| 55 |  | -  </ItemGroup> | 
| 56 |  | - | 
| 57 |  | -  <ItemGroup> | 
| 58 |  | -    <_winSosRequiredBinaries Include="$(ArtifactsBinDir)\Windows_NT.x64.$(Configuration)\sos.dll" TargetRid="win-x64" /> | 
| 59 |  | -    <_winSosRequiredBinaries Include="$(ArtifactsBinDir)\Windows_NT.x64.$(Configuration)\Microsoft.DiaSymReader.Native.amd64.dll" TargetRid="win-x64" /> | 
| 60 |  | -    <_winSosRequiredBinaries Condition="'$(PackageWithCDac)' == 'true'" Include="$(ArtifactsBinDir)\Windows_NT.x64.$(Configuration)\mscordaccore_universal.dll" TargetRid="win-x64" /> | 
| 61 |  | - | 
| 62 |  | -    <!-- When we are running the official build and packaging, don't copy too much. We already publish sos.dll in another leg, so favor that. --> | 
| 63 |  | -    <_SosBinariesToPack Condition="'$(BuildX64Package)' == 'true'"  | 
| 64 |  | -                        Include="@(_winSosRequiredBinaries)" /> | 
| 65 |  | - | 
| 66 |  | -    <SosRequiredBinaries Include="@(_winSosRequiredBinaries)" /> | 
|  | 61 | +    <SosRequiredBinaries Update="@(SosRequiredBinaries->WithMetadataValue('TargetsMusl' , 'true'))"> | 
|  | 62 | +      <OriginalPath>$([MSBuild]::ValueOrDefault('%(FullPath)', '').Replace('linux-musl','linux'))</OriginalPath> | 
|  | 63 | +    </SosRequiredBinaries> | 
| 67 | 64 |   </ItemGroup> | 
| 68 | 65 | 
 | 
| 69 | 66 |   <!-- What and where to pack SOS assets in the final packages. --> | 
| 70 | 67 |   <ItemGroup> | 
| 71 |  | -    <None Include="@(_SosBinariesToPack)"> | 
|  | 68 | +    <None Include="@(SosRequiredBinaries)"> | 
| 72 | 69 |       <Visible>false</Visible> | 
| 73 |  | -      <Pack>true</Pack> | 
|  | 70 | + | 
|  | 71 | +      <!-- This kind of adjusting where things go is not great - but it balances the requirements of 3 different build modes/consumers: --> | 
|  | 72 | +      <!-- - Tests expect the native assets to end up in the publish directory of SOS. Hence the CopyToPublishDirectory for the rid of the current build. Since our build implicitly | 
|  | 73 | +            does a publish using NeedsPublishing for dotnet-dump - we can only include the native assets for the current RID in the publish directory. --> | 
|  | 74 | +      <!-- - Since PackAsTool now implicitly does a publish + glob - we need to exclude the native asset we publish during build from the pack assets the None itemgroup brings | 
|  | 75 | +            and at the same time there are packages like the WinDBG transport package that don't use the <PackAsTool> publish behavior. Those should pack as usual. --> | 
|  | 76 | +      <!-- - Single file publish also needs to account for the target path correctly but only set it when that mode is on. --> | 
|  | 77 | +      <!-- Long term following the publish directory is a way to test closer to the layout our customers get through the packages and make sense as a test. Follow up cleanup is needed here. | 
|  | 78 | +            work is tracked in https://github.com/dotnet/diagnostics/issues/5566 --> | 
|  | 79 | +      <Pack Condition="'$(PackAsTool)' != 'true' or '%(TargetRid)' != '$(TargetRid)'">true</Pack> | 
| 74 | 80 |       <PackagePath>$(SOSPackagePathPrefix)/%(TargetRid)</PackagePath> | 
| 75 |  | -      <Link Condition="'$(PublishSingleFile)' == 'true'">%(TargetRid)/%(Filename)%(Extension)</Link> | 
| 76 | 81 |       <CopyToOutputDirectory Condition="'$(PublishSingleFile)' == 'true' and '%(TargetRid)' == '$(RuntimeIdentifier)'">PreserveNewest</CopyToOutputDirectory> | 
|  | 82 | +      <Link Condition="'$(PublishSingleFile)' == 'true'">%(TargetRid)/%(Filename)%(Extension)</Link> | 
|  | 83 | +      <TargetPath>%(TargetRid)/%(Filename)%(Extension)</TargetPath> | 
|  | 84 | +      <!-- There's a little blip here too - on the linux-musl verticals, the output directory structure not as the packaging leg layout. We publish them in the next group --> | 
|  | 85 | +      <CopyToPublishDirectory Condition="'$(PackAsTool)' == 'true' and '$(IsMuslBuild)' != 'true' and '%(TargetRid)' == '$(TargetRid)'">PreserveNewest</CopyToPublishDirectory> | 
|  | 86 | +    </None> | 
|  | 87 | + | 
|  | 88 | +    <None Include="@(SosRequiredBinaries->WithMetadataValue('TargetsMusl' , 'true')->'%(OriginalPath)')" Condition="'$(IsMuslBuild)' == 'true'"> | 
|  | 89 | +      <Visible>false</Visible> | 
|  | 90 | +      <Pack>false</Pack> | 
|  | 91 | +      <CopyToOutputDirectory>Never</CopyToOutputDirectory> | 
|  | 92 | +      <TargetPath>%(TargetRid)/%(Filename)%(Extension)</TargetPath> | 
|  | 93 | +      <CopyToPublishDirectory Condition="'$(PackAsTool)' == 'true' and '%(TargetRid)' == '$(TargetRid)'">PreserveNewest</CopyToPublishDirectory> | 
| 77 | 94 |     </None> | 
| 78 | 95 |   </ItemGroup> | 
| 79 | 96 | </Project> | 
0 commit comments