Skip to content

Commit fa0d911

Browse files
committed
wip: build shared sentry-native on windows
1 parent 3b550a6 commit fa0d911

File tree

4 files changed

+79
-47
lines changed

4 files changed

+79
-47
lines changed

.github/workflows/build.yml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ jobs:
4545
- uses: actions/cache@v4
4646
id: cache
4747
with:
48-
path: src/Sentry/Platforms/Native/sentry-native
48+
path: |
49+
src/Sentry/Platforms/Native/sentry-native
50+
src/Sentry/Platforms/Native/runtimes
4951
key: sentry-native-${{ matrix.target || runner.os }}-${{ hashFiles('scripts/build-sentry-native.ps1') }}-${{ hashFiles('.git/modules/modules/sentry-native/HEAD') }}
5052
enableCrossOsArchive: true
5153

@@ -138,7 +140,9 @@ jobs:
138140
if: ${{ (env.CI_PUBLISHING_BUILD == 'true') || (runner.os == 'Windows' && runner.arch == 'X64') }}
139141
uses: actions/cache/restore@v4
140142
with:
141-
path: src/Sentry/Platforms/Native/sentry-native
143+
path: |
144+
src/Sentry/Platforms/Native/sentry-native
145+
src/Sentry/Platforms/Native/runtimes
142146
key: sentry-native-Windows-${{ hashFiles('scripts/build-sentry-native.ps1') }}-${{ hashFiles('.git/modules/modules/sentry-native/HEAD') }}
143147
fail-on-cache-miss: true
144148
enableCrossOsArchive: true
@@ -147,7 +151,9 @@ jobs:
147151
if: ${{ (env.CI_PUBLISHING_BUILD == 'true') || (runner.os == 'Windows' && runner.arch == 'ARM64') }}
148152
uses: actions/cache/restore@v4
149153
with:
150-
path: src/Sentry/Platforms/Native/sentry-native
154+
path: |
155+
src/Sentry/Platforms/Native/sentry-native
156+
src/Sentry/Platforms/Native/runtimes
151157
key: sentry-native-Windows-arm64-${{ hashFiles('scripts/build-sentry-native.ps1') }}-${{ hashFiles('.git/modules/modules/sentry-native/HEAD') }}
152158
fail-on-cache-miss: true
153159
enableCrossOsArchive: true

scripts/build-sentry-native.ps1

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ param([switch] $Clean)
22
Set-StrictMode -Version Latest
33
$ErrorActionPreference = "Stop"
44

5-
Push-Location $PSScriptRoot/..
6-
try
5+
function Build-SentryNative
76
{
7+
param([switch] $Shared)
8+
89
$submodule = 'modules/sentry-native'
910
$outDir = 'src/Sentry/Platforms/Native/sentry-native'
10-
$buildDir = "$submodule/build"
11+
$buildDir = if ($Shared) { "$submodule/build" } else { "$submodule/build-static" }
1112
$actualBuildDir = $buildDir
1213

1314
$additionalArgs = @()
@@ -24,15 +25,15 @@ try
2425
$additionalArgs += @('-C', 'src/Sentry/Platforms/Native/windows-config.cmake')
2526
$actualBuildDir = "$buildDir/RelWithDebInfo"
2627
$libPrefix = ''
27-
$libExtension = '.lib'
28+
$libExtension = if ($Shared) { '.dll' } else { '.lib' }
2829

2930
if ("Arm64".Equals([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture.ToString()))
3031
{
31-
$outDir += '/win-arm64'
32+
$outDir += if ($Shared) { '/../runtimes/win-arm64/native' } else { '/win-arm64' }
3233
}
3334
else
3435
{
35-
$outDir += '/win-x64'
36+
$outDir += if ($Shared) { '/../runtimes/win-x64/native' } else { '/win-x64' }
3637
}
3738
}
3839
elseif ($IsLinux)
@@ -62,12 +63,16 @@ try
6263
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue $buildDir
6364
}
6465

66+
if (-not $Shared)
67+
{
68+
$additionalArgs += @('-D', 'SENTRY_BUILD_SHARED_LIBS=0')
69+
}
70+
6571
cmake `
6672
-S $submodule `
6773
-B $buildDir `
6874
-D CMAKE_BUILD_TYPE=RelWithDebInfo `
6975
-D SENTRY_SDK_NAME=sentry.native.dotnet `
70-
-D SENTRY_BUILD_SHARED_LIBS=0 `
7176
-D SENTRY_BACKEND=inproc `
7277
-D SENTRY_TRANSPORT=none `
7378
$additionalArgs
@@ -90,6 +95,16 @@ try
9095
# Touch the file to mark it as up-to-date for MSBuild
9196
(Get-Item $outFile).LastWriteTime = Get-Date
9297
}
98+
99+
Push-Location $PSScriptRoot/..
100+
try
101+
{
102+
Build-SentryNative
103+
if ($IsWindows)
104+
{
105+
Build-SentryNative -Shared
106+
}
107+
}
93108
finally
94109
{
95110
Pop-Location
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
sentry-native
2+
runtimes

src/Sentry/Platforms/Native/Sentry.Native.targets

Lines changed: 47 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,20 @@
55
<SentryNativeLibraryName>sentry-native</SentryNativeLibraryName>
66
<SentryNativeBuildScript>../../scripts/build-sentry-native.ps1</SentryNativeBuildScript>
77
<SentryNativeBuildInputs>../../.git/modules/modules/sentry-native/HEAD;$(MSBuildThisFileDirectory)Sentry.Native.targets;$(SentryNativeBuildScript)</SentryNativeBuildInputs>
8-
<SentryNativeOutputDirectory>$(MSBuildThisFileDirectory)sentry-native\</SentryNativeOutputDirectory>
8+
<SentryNativeStaticDirectory>$(MSBuildThisFileDirectory)sentry-native\</SentryNativeStaticDirectory>
9+
<SentryNativeSharedDirectory>$(MSBuildThisFileDirectory)runtimes\</SentryNativeSharedDirectory>
910
<!-- List of runtime identifiers: https://github.com/dotnet/runtime/blob/main/src/libraries/Microsoft.NETCore.Platforms/src/runtime.json -->
10-
<NativeLibRelativePath-win-x64>win-x64</NativeLibRelativePath-win-x64>
11-
<SentryNativeOutputDirectory-win-x64>$(SentryNativeOutputDirectory)$(NativeLibRelativePath-win-x64)\</SentryNativeOutputDirectory-win-x64>
12-
<NativeLibRelativePath-win-arm64>win-arm64</NativeLibRelativePath-win-arm64>
13-
<SentryNativeOutputDirectory-win-arm64>$(SentryNativeOutputDirectory)$(NativeLibRelativePath-win-arm64)\</SentryNativeOutputDirectory-win-arm64>
14-
<NativeLibRelativePath-linux-x64>linux-x64</NativeLibRelativePath-linux-x64>
15-
<SentryNativeOutputDirectory-linux-x64>$(SentryNativeOutputDirectory)$(NativeLibRelativePath-linux-x64)\</SentryNativeOutputDirectory-linux-x64>
16-
<NativeLibRelativePath-linux-musl-x64>linux-musl-x64</NativeLibRelativePath-linux-musl-x64>
17-
<SentryNativeOutputDirectory-linux-musl-x64>$(SentryNativeOutputDirectory)$(NativeLibRelativePath-linux-musl-x64)\</SentryNativeOutputDirectory-linux-musl-x64>
18-
<NativeLibRelativePath-linux-arm64>linux-arm64</NativeLibRelativePath-linux-arm64>
19-
<SentryNativeOutputDirectory-linux-arm64>$(SentryNativeOutputDirectory)$(NativeLibRelativePath-linux-arm64)\</SentryNativeOutputDirectory-linux-arm64>
20-
<NativeLibRelativePath-osx>osx</NativeLibRelativePath-osx>
21-
<SentryNativeOutputDirectory-osx>$(SentryNativeOutputDirectory)$(NativeLibRelativePath-osx)\</SentryNativeOutputDirectory-osx>
22-
<SentryNativeBuildOutputs Condition="'$(RuntimeIdentifier)' == 'win-x64'">$(SentryNativeOutputDirectory-win-x64)lib$(SentryNativeLibraryName).lib</SentryNativeBuildOutputs>
23-
<SentryNativeBuildOutputs Condition="'$(RuntimeIdentifier)' == 'win-arm64'">$(SentryNativeOutputDirectory-win-arm64)lib$(SentryNativeLibraryName).lib</SentryNativeBuildOutputs>
24-
<SentryNativeBuildOutputs Condition="'$(RuntimeIdentifier)' == 'linux-x64'">$(SentryNativeOutputDirectory-linux-x64)lib$(SentryNativeLibraryName).a</SentryNativeBuildOutputs>
25-
<SentryNativeBuildOutputs Condition="'$(RuntimeIdentifier)' == 'linux-musl-x64'">$(SentryNativeOutputDirectory-linux-musl-x64)lib$(SentryNativeLibraryName).a</SentryNativeBuildOutputs>
26-
<SentryNativeBuildOutputs Condition="'$(RuntimeIdentifier)' == 'linux-arm64'">$(SentryNativeOutputDirectory-linux-arm64)lib$(SentryNativeLibraryName).a</SentryNativeBuildOutputs>
27-
<SentryNativeBuildOutputs Condition="$([MSBuild]::IsOsPlatform('OSX'))">$(SentryNativeOutputDirectory-osx)lib$(SentryNativeLibraryName).a</SentryNativeBuildOutputs>
11+
<SentryNativeBuildOutputs Condition="'$(RuntimeIdentifier)' != '' and $(RuntimeIdentifier.StartsWith('win-'))">
12+
$(SentryNativeStaticDirectory)$(RuntimeIdentifier)\$(SentryNativeLibraryName).lib
13+
$(SentryNativeSharedDirectory)$(RuntimeIdentifier)\native\$(SentryNativeLibraryName).dll;
14+
</SentryNativeBuildOutputs>
15+
<SentryNativeBuildOutputs Condition="'$(RuntimeIdentifier)' != '' and $(RuntimeIdentifier.StartsWith('linux-'))">
16+
$(SentryNativeStaticDirectory)$(RuntimeIdentifier)\lib$(SentryNativeLibraryName).a
17+
</SentryNativeBuildOutputs>
18+
<SentryNativeBuildOutputs Condition="$([MSBuild]::IsOsPlatform('OSX'))">
19+
$(SentryNativeStaticDirectory)osx\lib$(SentryNativeLibraryName).a
20+
</SentryNativeBuildOutputs>
21+
<HostRuntimeIdentifier>$([System.Runtime.InteropServices.RuntimeInformation]::RuntimeIdentifier)</HostRuntimeIdentifier>
2822
</PropertyGroup>
2923

3024
<!-- Packaging -->
@@ -34,52 +28,68 @@
3428
</ItemGroup>
3529

3630
<!-- Packaging the native library (NOTE: $(RuntimeIdentifier) is not set) -->
37-
<ItemGroup Condition="'$(CI_PUBLISHING_BUILD)' == 'true' or '$([System.Runtime.InteropServices.RuntimeInformation]::RuntimeIdentifier)' == 'win-x64'">
38-
<None Include="$(SentryNativeOutputDirectory-win-x64)$(SentryNativeLibraryName).lib">
31+
<ItemGroup Condition="'$(CI_PUBLISHING_BUILD)' == 'true' or '$(HostRuntimeIdentifier)' == 'win-x64'">
32+
<None Include="$(SentryNativeStaticDirectory)win-x64\$(SentryNativeLibraryName).lib">
3933
<Pack>true</Pack>
40-
<PackagePath>\sentry-native\$(NativeLibRelativePath-win-x64)</PackagePath>
34+
<PackagePath>\sentry-native\win-x64</PackagePath>
35+
</None>
36+
<None Include="$(SentryNativeSharedDirectory)win-x64\native\$(SentryNativeLibraryName).dll"
37+
Condition="'$(HostRuntimeIdentifier)' == 'win-x64' and ('$(TargetPlatformIdentifier)' == '' or '$(TargetPlatformIdentifier)' == 'windows')">
38+
<Pack>true</Pack>
39+
<PackagePath>\runtimes\win-x64\native</PackagePath>
40+
<Link>%(Filename)%(Extension)</Link>
41+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
4142
</None>
4243
</ItemGroup>
4344

44-
<ItemGroup Condition="'$(CI_PUBLISHING_BUILD)' == 'true' or '$([System.Runtime.InteropServices.RuntimeInformation]::RuntimeIdentifier)' == 'win-arm64'">
45-
<None Include="$(SentryNativeOutputDirectory-win-arm64)$(SentryNativeLibraryName).lib">
45+
<ItemGroup Condition="'$(CI_PUBLISHING_BUILD)' == 'true' or '$(HostRuntimeIdentifier)' == 'win-arm64'">
46+
<None Include="$(SentryNativeStaticDirectory)win-arm64\$(SentryNativeLibraryName).lib">
47+
<Pack>true</Pack>
48+
<PackagePath>\sentry-native\win-arm64</PackagePath>
49+
</None>
50+
<None Include="$(SentryNativeSharedDirectory)win-arm64\native\$(SentryNativeLibraryName).dll"
51+
Condition="'$(HostRuntimeIdentifier)' == 'win-arm64' and ('$(TargetPlatformIdentifier)' == '' or '$(TargetPlatformIdentifier)' == 'windows')">
4652
<Pack>true</Pack>
47-
<PackagePath>\sentry-native\$(NativeLibRelativePath-win-arm64)</PackagePath>
53+
<PackagePath>\runtimes\win-arm64\native</PackagePath>
54+
<Link>%(Filename)%(Extension)</Link>
55+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
4856
</None>
4957
</ItemGroup>
5058

51-
<ItemGroup Condition="'$(CI_PUBLISHING_BUILD)' == 'true' or '$([System.Runtime.InteropServices.RuntimeInformation]::RuntimeIdentifier)' == 'linux-x64'">
52-
<None Include="$(SentryNativeOutputDirectory-linux-x64)lib$(SentryNativeLibraryName).a">
59+
<ItemGroup Condition="'$(CI_PUBLISHING_BUILD)' == 'true' or '$(HostRuntimeIdentifier)' == 'linux-x64'">
60+
<None Include="$(SentryNativeStaticDirectory)linux-x64\lib$(SentryNativeLibraryName).a">
5361
<Pack>true</Pack>
54-
<PackagePath>\sentry-native\$(NativeLibRelativePath-linux-x64)</PackagePath>
62+
<PackagePath>\sentry-native\linux-x64</PackagePath>
5563
</None>
5664
</ItemGroup>
5765

58-
<ItemGroup Condition="'$(CI_PUBLISHING_BUILD)' == 'true' or '$([System.Runtime.InteropServices.RuntimeInformation]::RuntimeIdentifier)' == 'linux-musl-x64'">
59-
<None Include="$(SentryNativeOutputDirectory-linux-musl-x64)lib$(SentryNativeLibraryName).a">
66+
<ItemGroup Condition="'$(CI_PUBLISHING_BUILD)' == 'true' or '$(HostRuntimeIdentifier)' == 'linux-musl-x64'">
67+
<None Include="$(SentryNativeStaticDirectory)linux-musl-x64\lib$(SentryNativeLibraryName).a">
6068
<Pack>true</Pack>
61-
<PackagePath>\sentry-native\$(NativeLibRelativePath-linux-musl-x64)</PackagePath>
69+
<PackagePath>\sentry-native\linux-musl-x64</PackagePath>
6270
</None>
6371
</ItemGroup>
6472

65-
<ItemGroup Condition="'$(CI_PUBLISHING_BUILD)' == 'true' or '$([System.Runtime.InteropServices.RuntimeInformation]::RuntimeIdentifier)' == 'linux-arm64'">
66-
<None Include="$(SentryNativeOutputDirectory-linux-arm64)lib$(SentryNativeLibraryName).a">
73+
<ItemGroup Condition="'$(CI_PUBLISHING_BUILD)' == 'true' or '$(HostRuntimeIdentifier)' == 'linux-arm64'">
74+
<None Include="$(SentryNativeStaticDirectory)linux-arm64\lib$(SentryNativeLibraryName).a">
6775
<Pack>true</Pack>
68-
<PackagePath>\sentry-native\$(NativeLibRelativePath-linux-arm64)</PackagePath>
76+
<PackagePath>\sentry-native\linux-arm64</PackagePath>
6977
</None>
7078
</ItemGroup>
7179

7280
<ItemGroup Condition="'$(CI_PUBLISHING_BUILD)' == 'true' or $([MSBuild]::IsOsPlatform('OSX'))">
73-
<None Include="$(SentryNativeOutputDirectory-osx)lib$(SentryNativeLibraryName).a">
81+
<None Include="$(SentryNativeStaticDirectory)osx\lib$(SentryNativeLibraryName).a">
7482
<Pack>true</Pack>
75-
<PackagePath>\sentry-native\$(NativeLibRelativePath-osx)</PackagePath>
83+
<PackagePath>\sentry-native\osx</PackagePath>
7684
</None>
7785
</ItemGroup>
7886

7987
<Target Name="CleanNativeSDK" BeforeTargets="CoreClean" Condition="'$(_SentryIsNet8OrGreater)' == 'true'">
8088
<Message Text="Inside Custom Clean" Importance="high"/>
81-
<RemoveDir Directories="$(SentryNativeOutputDirectory)" />
89+
<RemoveDir Directories="$(SentryNativeStaticDirectory)" />
90+
<RemoveDir Directories="$(SentryNativeSharedDirectory)" />
8291
<RemoveDir Directories="$(SentryNativeSourceDirectory)build" />
92+
<RemoveDir Directories="$(SentryNativeSourceDirectory)build-static" />
8393
</Target>
8494

8595
<!-- Build the Sentry Native SDK (this only runs on local machines because in CI we expect the SDK to be

0 commit comments

Comments
 (0)