Fix static graphics action builds
This commit is contained in:
1 parent
473327a5d7
commit
c1dadcce88
13 files changed
+28
-5
No files matched your search
@@ -0,0 +1,32 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<IsPackable>true</IsPackable>
|
||||
<NoBuild>true</NoBuild>
|
||||
<IncludeBuildOutput>false</IncludeBuildOutput>
|
||||
<SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking>
|
||||
<PackageId>Greepar.Avalonia.StaticGraphics</PackageId>
|
||||
<Version>3.119.2-7151.4</Version>
|
||||
<Authors>greepar</Authors>
|
||||
<Company>greepar</Company>
|
||||
<Description>Static SkiaSharp, HarfBuzzSharp, and ANGLE libraries for Avalonia NativeAOT single-file publishing.</Description>
|
||||
<PackageTags>Avalonia;SkiaSharp;ANGLE;NativeAOT;Windows;Linux;macOS;Static</PackageTags>
|
||||
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
||||
<PackageReadmeFile>README.md</PackageReadmeFile>
|
||||
<RepositoryType>git</RepositoryType>
|
||||
<RepositoryUrl>https://github.com/greepar/Avalonia.StaticGraphics</RepositoryUrl>
|
||||
<PackageProjectUrl>https://github.com/greepar/Avalonia.StaticGraphics</PackageProjectUrl>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Include="README.md" Pack="true" PackagePath="" />
|
||||
<None Include="buildTransitive/Greepar.Avalonia.StaticGraphics.props" Pack="true" PackagePath="buildTransitive/$(PackageId).props" />
|
||||
<None Include="buildTransitive/Greepar.Avalonia.StaticGraphics.targets" Pack="true" PackagePath="buildTransitive/$(PackageId).targets" />
|
||||
<None Include="../../External/NativeStatic/win-x64/*" Pack="true" PackagePath="static/win-x64/native/" />
|
||||
<None Include="../../External/NativeStatic/win-arm64/*" Pack="true" PackagePath="static/win-arm64/native/" />
|
||||
<None Include="../../External/NativeStatic/linux-x64/*" Pack="true" PackagePath="static/linux-x64/native/" />
|
||||
<None Include="../../External/NativeStatic/linux-arm64/*" Pack="true" PackagePath="static/linux-arm64/native/" />
|
||||
<None Include="../../External/NativeStatic/osx-x64/*" Pack="true" PackagePath="static/osx-x64/native/" />
|
||||
<None Include="../../External/NativeStatic/osx-arm64/*" Pack="true" PackagePath="static/osx-arm64/native/" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,163 @@
|
||||
# Greepar.Avalonia.StaticGraphics
|
||||
|
||||
Static graphics libraries for Avalonia NativeAOT single-file publishing.
|
||||
|
||||
This package provides static archives for SkiaSharp, HarfBuzzSharp, and ANGLE, then wires them into MSBuild through `buildTransitive` targets. It is intended for Avalonia applications that want NativeAOT single-file publish outputs without shipping Avalonia graphics native libraries next to the executable.
|
||||
|
||||
Repository: <https://github.com/greepar/Avalonia.StaticGraphics>
|
||||
|
||||
## Supported RIDs
|
||||
|
||||
- `win-x64`
|
||||
- `win-arm64`
|
||||
- `linux-x64`
|
||||
- `linux-arm64`
|
||||
- `osx-x64`
|
||||
- `osx-arm64`
|
||||
|
||||
## Included Libraries
|
||||
|
||||
Windows:
|
||||
|
||||
- `skia.lib`
|
||||
- `SkiaSharp.lib`
|
||||
- `libHarfBuzzSharp.lib`
|
||||
- `libANGLE_static.lib`
|
||||
- `libGLESv2_static.lib`
|
||||
|
||||
Linux and macOS:
|
||||
|
||||
- `libskia.a`
|
||||
- `libSkiaSharp.a`
|
||||
- `libHarfBuzzSharp.a`
|
||||
- `libANGLE_static.a`
|
||||
- `libGLESv2_static.a`
|
||||
|
||||
## Install
|
||||
|
||||
```bash
|
||||
dotnet add package Greepar.Avalonia.StaticGraphics
|
||||
```
|
||||
|
||||
## Publish
|
||||
|
||||
Windows x64 or arm64:
|
||||
|
||||
```bash
|
||||
dotnet publish -c Release -r win-x64 \
|
||||
-p:PublishAot=true \
|
||||
-p:SelfContained=true \
|
||||
-p:PublishSingleFile=true \
|
||||
-p:StripSymbols=true
|
||||
```
|
||||
|
||||
Linux x64 or arm64:
|
||||
|
||||
```bash
|
||||
dotnet publish -c Release -r linux-x64 \
|
||||
-p:PublishAot=true \
|
||||
-p:SelfContained=true \
|
||||
-p:PublishSingleFile=true \
|
||||
-p:StripSymbols=true \
|
||||
-p:LinkerFlavor=lld
|
||||
```
|
||||
|
||||
macOS x64 or arm64:
|
||||
|
||||
```bash
|
||||
dotnet publish -c Release -r osx-arm64 \
|
||||
-p:PublishAot=true \
|
||||
-p:SelfContained=true \
|
||||
-p:PublishSingleFile=true \
|
||||
-p:StripSymbols=true
|
||||
```
|
||||
|
||||
The package automatically contributes the static archives as `NativeLibrary` items when `PublishAot=true` and the `RuntimeIdentifier` is supported.
|
||||
|
||||
## Verify Output
|
||||
|
||||
After publishing, the publish directory should not contain Avalonia graphics runtime files such as:
|
||||
|
||||
- `libSkiaSharp.so`
|
||||
- `libHarfBuzzSharp.so`
|
||||
- `libSkiaSharp.dylib`
|
||||
- `libHarfBuzzSharp.dylib`
|
||||
- `libSkiaSharp.dll`
|
||||
- `libHarfBuzzSharp.dll`
|
||||
- `av_libglesv2.dll`
|
||||
|
||||
The package stores static archives under `static/<rid>/native/` inside the NuGet package, so `.a` and `.lib` files are used for linking and are not normal runtime assets.
|
||||
|
||||
## Build From Source
|
||||
|
||||
This repository does not depend on 2ndLAB static packages. The GitHub Actions workflow builds the native libraries from upstream source repositories:
|
||||
|
||||
- SkiaSharp: <https://github.com/mono/SkiaSharp>
|
||||
- ANGLE: <https://github.com/google/angle>
|
||||
|
||||
Build scripts:
|
||||
|
||||
- `scripts/build-linux-static-graphics.sh`
|
||||
- `scripts/build-windows-static-graphics.ps1`
|
||||
- `scripts/build-macos-static-graphics.sh`
|
||||
|
||||
Build locally after the static archives exist:
|
||||
|
||||
```bash
|
||||
dotnet pack NuGet/StaticGraphics/Greepar.Avalonia.StaticGraphics.csproj -c Release -o artifacts/nuget
|
||||
```
|
||||
|
||||
The package will be written to:
|
||||
|
||||
```text
|
||||
artifacts/nuget/Greepar.Avalonia.StaticGraphics.*.nupkg
|
||||
```
|
||||
|
||||
## GitHub Actions
|
||||
|
||||
The workflow `.github/workflows/nuget-static-graphics.yml` builds all native archives and packs a single NuGet package for all supported RIDs.
|
||||
|
||||
It will:
|
||||
|
||||
- build Linux x64 static archives on `ubuntu-latest`
|
||||
- build Linux arm64 static archives on `ubuntu-24.04-arm`
|
||||
- build Windows x64 and arm64 static archives on `windows-latest`
|
||||
- build macOS x64 and arm64 static archives on `macos-latest`
|
||||
- download all native artifacts into `External/NativeStatic/<rid>/`
|
||||
- run `dotnet pack`
|
||||
- upload the generated `.nupkg` as a workflow artifact
|
||||
|
||||
To publish automatically to nuget.org, add a repository secret named `NUGET_API_KEY`, then either:
|
||||
|
||||
- run the workflow manually with `publish_to_nuget=true`
|
||||
- push a tag matching `static-graphics-v*`
|
||||
|
||||
Example tag:
|
||||
|
||||
```bash
|
||||
git tag static-graphics-v3.119.2-7151.4
|
||||
git push origin static-graphics-v3.119.2-7151.4
|
||||
```
|
||||
|
||||
## Known Runtime Dependencies
|
||||
|
||||
Single-file does not always mean dependency-free. Depending on platform and publish settings, the final executable may still depend on operating system libraries and frameworks.
|
||||
|
||||
Linux examples:
|
||||
|
||||
- `libc.so.6`
|
||||
- `libm.so.6`
|
||||
- `libstdc++.so.6`
|
||||
- `libgcc_s.so.1`
|
||||
- `libfontconfig.so.1`
|
||||
- `libfreetype.so.6`
|
||||
|
||||
Linux systems also need usable fonts for text rendering and font fallback.
|
||||
|
||||
## Scope
|
||||
|
||||
This package only covers Avalonia graphics-related native libraries. If your application uses other native dependencies, such as SQLite, audio backends, OpenSSL, or custom native libraries, those dependencies may require separate handling.
|
||||
|
||||
## License
|
||||
|
||||
The NuGet package metadata uses the MIT license. The bundled third-party native libraries are built from their upstream projects and remain subject to their respective upstream licenses.
|
||||
@@ -0,0 +1,5 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<GreeparAvaloniaStaticGraphicsRoot Condition="'$(GreeparAvaloniaStaticGraphicsRoot)' == ''">$(MSBuildThisFileDirectory)../static/</GreeparAvaloniaStaticGraphicsRoot>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,92 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<_GreeparAvaloniaStaticGraphicsRid Condition="'$(RuntimeIdentifier)' == 'win-x64'">win-x64</_GreeparAvaloniaStaticGraphicsRid>
|
||||
<_GreeparAvaloniaStaticGraphicsRid Condition="'$(RuntimeIdentifier)' == 'win-arm64'">win-arm64</_GreeparAvaloniaStaticGraphicsRid>
|
||||
<_GreeparAvaloniaStaticGraphicsRid Condition="'$(RuntimeIdentifier)' == 'linux-x64'">linux-x64</_GreeparAvaloniaStaticGraphicsRid>
|
||||
<_GreeparAvaloniaStaticGraphicsRid Condition="'$(RuntimeIdentifier)' == 'linux-arm64'">linux-arm64</_GreeparAvaloniaStaticGraphicsRid>
|
||||
<_GreeparAvaloniaStaticGraphicsRid Condition="'$(RuntimeIdentifier)' == 'osx-x64'">osx-x64</_GreeparAvaloniaStaticGraphicsRid>
|
||||
<_GreeparAvaloniaStaticGraphicsRid Condition="'$(RuntimeIdentifier)' == 'osx-arm64'">osx-arm64</_GreeparAvaloniaStaticGraphicsRid>
|
||||
<_GreeparAvaloniaStaticGraphicsNativeRoot Condition="'$(_GreeparAvaloniaStaticGraphicsRid)' != ''">$(GreeparAvaloniaStaticGraphicsRoot)$(_GreeparAvaloniaStaticGraphicsRid)/native</_GreeparAvaloniaStaticGraphicsNativeRoot>
|
||||
<LinkerFlavor Condition="'$(LinkerFlavor)' == '' and ('$(RuntimeIdentifier)' == 'linux-x64' or '$(RuntimeIdentifier)' == 'linux-arm64')">lld</LinkerFlavor>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup Condition="'$(PublishAot)' == 'true' and ('$(RuntimeIdentifier)' == 'win-x64' or '$(RuntimeIdentifier)' == 'win-arm64') and '$(_GreeparAvaloniaStaticGraphicsNativeRoot)' != ''">
|
||||
<DirectPInvoke Include="libHarfBuzzSharp" Condition="Exists('$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libHarfBuzzSharp.lib')" />
|
||||
<DirectPInvoke Include="libSkiaSharp" Condition="Exists('$(_GreeparAvaloniaStaticGraphicsNativeRoot)/SkiaSharp.lib')" />
|
||||
<DirectPInvoke Include="libGLESv2" Condition="Exists('$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libGLESv2_static.lib')" />
|
||||
<DirectPInvoke Include="av_libglesv2" Condition="Exists('$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libGLESv2_static.lib')" />
|
||||
<NativeLibrary Include="$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libHarfBuzzSharp.lib" Condition="Exists('$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libHarfBuzzSharp.lib')" />
|
||||
<NativeLibrary Include="$(_GreeparAvaloniaStaticGraphicsNativeRoot)/skia.lib" Condition="Exists('$(_GreeparAvaloniaStaticGraphicsNativeRoot)/skia.lib')" />
|
||||
<NativeLibrary Include="$(_GreeparAvaloniaStaticGraphicsNativeRoot)/SkiaSharp.lib" Condition="Exists('$(_GreeparAvaloniaStaticGraphicsNativeRoot)/SkiaSharp.lib')" />
|
||||
<NativeLibrary Include="$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libANGLE_static.lib" Condition="Exists('$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libANGLE_static.lib')" />
|
||||
<NativeLibrary Include="$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libGLESv2_static.lib" Condition="Exists('$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libGLESv2_static.lib')" />
|
||||
<LinkerArg Include="d3d9.lib;dxguid.lib" />
|
||||
<LinkerArg Include="dxgi.lib" />
|
||||
<LinkerArg Include="Gdi32.lib;User32.lib" />
|
||||
<LinkerArg Include="synchronization.lib" />
|
||||
<LinkerArg Include="fontsub.lib;Ole32.lib;USP10.lib" />
|
||||
<LinkerArg Include="d3d12.lib;d3dcompiler.lib" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(PublishAot)' == 'true' and ('$(RuntimeIdentifier)' == 'linux-x64' or '$(RuntimeIdentifier)' == 'linux-arm64') and '$(_GreeparAvaloniaStaticGraphicsNativeRoot)' != ''">
|
||||
<DirectPInvoke Include="libHarfBuzzSharp" Condition="Exists('$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libHarfBuzzSharp.a')" />
|
||||
<DirectPInvoke Include="libSkiaSharp" Condition="Exists('$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libSkiaSharp.a')" />
|
||||
<NativeLibrary Include="$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libHarfBuzzSharp.a" Condition="Exists('$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libHarfBuzzSharp.a')" />
|
||||
<NativeLibrary Include="$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libskia.a" Condition="Exists('$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libskia.a')" />
|
||||
<NativeLibrary Include="$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libSkiaSharp.a" Condition="Exists('$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libSkiaSharp.a')" />
|
||||
<NativeLibrary Include="$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libANGLE_static.a" Condition="Exists('$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libANGLE_static.a')" />
|
||||
<NativeLibrary Include="$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libGLESv2_static.a" Condition="Exists('$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libGLESv2_static.a')" />
|
||||
<NativeSystemLibrary Include="stdc++" />
|
||||
<NativeSystemLibrary Include="gcc_eh" />
|
||||
<NativeSystemLibrary Include="fontconfig" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(PublishAot)' == 'true' and ('$(RuntimeIdentifier)' == 'linux-x64' or '$(RuntimeIdentifier)' == 'linux-arm64') and '$(_GreeparAvaloniaStaticGraphicsNativeRoot)' != '' and '$(LinkerFlavor)' == 'lld'">
|
||||
<LinkerArg Include="-Wl,-z,nostart-stop-gc" />
|
||||
<LinkerArg Include="-Wl,--allow-multiple-definition" Condition="Exists('$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libskia.a')" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(PublishAot)' == 'true' and ('$(RuntimeIdentifier)' == 'osx-x64' or '$(RuntimeIdentifier)' == 'osx-arm64') and '$(_GreeparAvaloniaStaticGraphicsNativeRoot)' != ''">
|
||||
<DirectPInvoke Include="libHarfBuzzSharp" Condition="Exists('$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libHarfBuzzSharp.a')" />
|
||||
<DirectPInvoke Include="libSkiaSharp" Condition="Exists('$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libSkiaSharp.a')" />
|
||||
<NativeLibrary Include="$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libHarfBuzzSharp.a" Condition="Exists('$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libHarfBuzzSharp.a')" />
|
||||
<NativeLibrary Include="$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libskia.a" Condition="Exists('$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libskia.a')" />
|
||||
<NativeLibrary Include="$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libSkiaSharp.a" Condition="Exists('$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libSkiaSharp.a')" />
|
||||
<NativeLibrary Include="$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libANGLE_static.a" Condition="Exists('$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libANGLE_static.a')" />
|
||||
<NativeLibrary Include="$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libGLESv2_static.a" Condition="Exists('$(_GreeparAvaloniaStaticGraphicsNativeRoot)/libGLESv2_static.a')" />
|
||||
<LinkerArg Include="-framework CoreFoundation" />
|
||||
<LinkerArg Include="-framework CoreGraphics" />
|
||||
<LinkerArg Include="-framework CoreText" />
|
||||
<LinkerArg Include="-framework Foundation" />
|
||||
<LinkerArg Include="-framework IOSurface" />
|
||||
<LinkerArg Include="-framework Metal" />
|
||||
<LinkerArg Include="-framework QuartzCore" />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="GreeparAvaloniaStaticGraphicsDisableStaticExecutableOnApple"
|
||||
BeforeTargets="LinkNative"
|
||||
Condition="'$(PublishAot)' == 'true' and ('$(RuntimeIdentifier)' == 'osx-x64' or '$(RuntimeIdentifier)' == 'osx-arm64')">
|
||||
<PropertyGroup>
|
||||
<StaticExecutable>false</StaticExecutable>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<LinkerArg Remove="-static" />
|
||||
<LinkerArg Remove="-static-pie" />
|
||||
</ItemGroup>
|
||||
</Target>
|
||||
|
||||
<Target Name="GreeparAvaloniaStaticGraphicsCleanDynamicAssets"
|
||||
AfterTargets="Publish"
|
||||
Condition="'$(PublishAot)' == 'true' and '$(_GreeparAvaloniaStaticGraphicsNativeRoot)' != ''">
|
||||
<ItemGroup>
|
||||
<_GreeparAvaloniaStaticGraphicsFilesToDelete Include="$(PublishDir)av_libglesv2.dll" />
|
||||
<_GreeparAvaloniaStaticGraphicsFilesToDelete Include="$(PublishDir)libHarfBuzzSharp.dll" />
|
||||
<_GreeparAvaloniaStaticGraphicsFilesToDelete Include="$(PublishDir)libSkiaSharp.dll" />
|
||||
<_GreeparAvaloniaStaticGraphicsFilesToDelete Include="$(PublishDir)libHarfBuzzSharp.so" />
|
||||
<_GreeparAvaloniaStaticGraphicsFilesToDelete Include="$(PublishDir)libSkiaSharp.so" />
|
||||
<_GreeparAvaloniaStaticGraphicsFilesToDelete Include="$(PublishDir)libHarfBuzzSharp.dylib" />
|
||||
<_GreeparAvaloniaStaticGraphicsFilesToDelete Include="$(PublishDir)libSkiaSharp.dylib" />
|
||||
</ItemGroup>
|
||||
<Delete Files="@(_GreeparAvaloniaStaticGraphicsFilesToDelete)" TreatErrorsAsWarnings="true" />
|
||||
</Target>
|
||||
</Project>
|
||||
Reference in new issue
Block a user