diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 24f8a8e..fb7d718 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -77,5 +77,5 @@ Target framework is **net10.0** with `InvariantGlobalization=true` and nullable ## CI/CD - **Build & Test** (`.github/workflows/build-test.yml`): Runs on push/PR to `master` — restore → build → test on `ubuntu-latest` with a .NET SDK matching the csproj target framework (read `dotnet-version` from the workflow; do not assume a fixed number). -- **Publish** (`.github/workflows/publish.yml`): Triggered by `v*` tags. Publishes self-contained binaries for `win-x64`, `win-arm64`, `linux-x64`, `linux-arm64`, `osx-x64` via `.pubxml` profiles (in `Obj2Tiles/Properties/PublishProfiles/`), zips them, and creates a GitHub Release. +- **Publish** (`.github/workflows/publish.yml`): Triggered by `v*` tags. Publishes self-contained binaries for `win-x64`, `win-arm64`, `linux-x64`, `linux-arm64`, `osx-x64`, `osx-arm64` via `.pubxml` profiles (in `Obj2Tiles/Properties/PublishProfiles/`), zips them, and creates a GitHub Release. - **Container image** (`.github/workflows/image.yml`): builds/pushes the `ghcr.io/opendronemap/obj2tiles` image (QEMU multi-arch). diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index dcb36ca..074b593 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -30,6 +30,8 @@ jobs: run: dotnet publish -p:PublishProfile=linux-arm64.pubxml Obj2Tiles - name: Publish osx-x64 run: dotnet publish -p:PublishProfile=osx-x64.pubxml Obj2Tiles + - name: Publish osx-arm64 + run: dotnet publish -p:PublishProfile=osx-arm64.pubxml Obj2Tiles - name: Zip win-x64 run: cd Obj2Tiles/bin/Release/net10.0/publish/win-x64/ && zip -r ../../../../../../Obj2Tiles-Win64.zip * @@ -41,6 +43,8 @@ jobs: run: cd Obj2Tiles/bin/Release/net10.0/publish/linux-arm64/ && zip -r ../../../../../../Obj2Tiles-LinuxArm64.zip * - name: Zip osx-x64 run: cd Obj2Tiles/bin/Release/net10.0/publish/osx-x64/ && zip -r ../../../../../../Obj2Tiles-Osx64.zip * + - name: Zip osx-arm64 + run: cd Obj2Tiles/bin/Release/net10.0/publish/osx-arm64/ && zip -r ../../../../../../Obj2Tiles-OsxArm64.zip * - name: Release uses: softprops/action-gh-release@v1 @@ -53,4 +57,5 @@ jobs: Obj2Tiles-WinArm64.zip Obj2Tiles-Linux64.zip Obj2Tiles-LinuxArm64.zip - Obj2Tiles-Osx64.zip + Obj2Tiles-Osx64.zip + Obj2Tiles-OsxArm64.zip diff --git a/Obj2Tiles/Obj2Tiles.csproj b/Obj2Tiles/Obj2Tiles.csproj index 13f6101..8799196 100644 --- a/Obj2Tiles/Obj2Tiles.csproj +++ b/Obj2Tiles/Obj2Tiles.csproj @@ -41,6 +41,7 @@ linux-x64 libktx.so <- KTX-Software-4.4.2-Linux-x86_64.tar.bz2 (lib/libktx.so.4.4.2) linux-arm64 libktx.so <- KTX-Software-4.4.2-Linux-arm64.tar.bz2 (lib/libktx.so.4.4.2) osx-x64 libktx.dylib<- KTX-Software-4.4.2-Darwin-x86_64.pkg (lib/libktx.4.4.2.dylib) + osx-arm64 libktx.dylib<- KTX-Software-4.4.2-Darwin-arm64.pkg (lib/libktx.4.4.2.dylib) To refresh these libraries (download + verify + extract for all RIDs), run: pwsh native/update-libktx.ps1 (use -Version to bump; -? for help) diff --git a/Obj2Tiles/Properties/PublishProfiles/osx-arm64.pubxml b/Obj2Tiles/Properties/PublishProfiles/osx-arm64.pubxml new file mode 100644 index 0000000..9898bd3 --- /dev/null +++ b/Obj2Tiles/Properties/PublishProfiles/osx-arm64.pubxml @@ -0,0 +1,20 @@ + + + + + Release + Any CPU + bin\Release\net10.0\publish\osx-arm64\ + FileSystem + net10.0 + osx-arm64 + true + True + True + partial + true + false + + diff --git a/Obj2Tiles/native/osx-arm64/libktx.dylib b/Obj2Tiles/native/osx-arm64/libktx.dylib new file mode 100755 index 0000000..1a7135f Binary files /dev/null and b/Obj2Tiles/native/osx-arm64/libktx.dylib differ diff --git a/Obj2Tiles/native/update-libktx.ps1 b/Obj2Tiles/native/update-libktx.ps1 index 9f6b205..f9eb426 100644 --- a/Obj2Tiles/native/update-libktx.ps1 +++ b/Obj2Tiles/native/update-libktx.ps1 @@ -20,6 +20,7 @@ linux-x64 libktx.so <- KTX-Software--Linux-x86_64.tar.bz2 (lib/libktx.so.) linux-arm64 libktx.so <- KTX-Software--Linux-arm64.tar.bz2 (lib/libktx.so.) osx-x64 libktx.dylib <- KTX-Software--Darwin-x86_64.pkg (lib/libktx..dylib) + osx-arm64 libktx.dylib <- KTX-Software--Darwin-arm64.pkg (lib/libktx..dylib) Tooling: * tar - unpacks the Linux .tar.bz2 tarballs (and, where libarchive has xar @@ -35,7 +36,7 @@ KTX-Software release version to vendor. Default: 4.4.2. .PARAMETER Rid - One or more runtime identifiers to refresh. Default: all five supported RIDs. + One or more runtime identifiers to refresh. Default: all six supported RIDs. .PARAMETER SkipChecksum Skip SHA-256 verification of the downloaded assets (not recommended). @@ -52,8 +53,8 @@ param( [string]$Version = '4.4.2', - [ValidateSet('win-x64', 'win-arm64', 'linux-x64', 'linux-arm64', 'osx-x64')] - [string[]]$Rid = @('win-x64', 'win-arm64', 'linux-x64', 'linux-arm64', 'osx-x64'), + [ValidateSet('win-x64', 'win-arm64', 'linux-x64', 'linux-arm64', 'osx-x64', 'osx-arm64')] + [string[]]$Rid = @('win-x64', 'win-arm64', 'linux-x64', 'linux-arm64', 'osx-x64', 'osx-arm64'), [switch]$SkipChecksum ) @@ -73,6 +74,7 @@ $Targets = [ordered]@{ 'linux-x64' = @{ Asset = "KTX-Software-$Version-Linux-x86_64.tar.bz2"; Find = "libktx.so.$Version"; Out = 'libktx.so' } 'linux-arm64' = @{ Asset = "KTX-Software-$Version-Linux-arm64.tar.bz2"; Find = "libktx.so.$Version"; Out = 'libktx.so' } 'osx-x64' = @{ Asset = "KTX-Software-$Version-Darwin-x86_64.pkg"; Find = "libktx.$Version.dylib"; Out = 'libktx.dylib' } + 'osx-arm64' = @{ Asset = "KTX-Software-$Version-Darwin-arm64.pkg"; Find = "libktx.$Version.dylib"; Out = 'libktx.dylib' } } function Get-SevenZip { diff --git a/README.md b/README.md index 31144c7..faaa595 100644 --- a/README.md +++ b/README.md @@ -261,6 +261,7 @@ Encoding runs **in-process** via the KTX-Software C library (libktx v4.4.2, Apac | Linux x64 | `libktx.so` | 3.25 MB | | Linux ARM64 | `libktx.so` | 2.91 MB | | macOS x64 | `libktx.dylib` | 2.67 MB | +| macOS ARM64 (Apple Silicon) | `libktx.dylib` | 2.38 MB | For `dotnet build` without a RID (development builds), the library is resolved in order from: `--ktx-path` / `OBJ2TILES_KTX` environment variable, the executable directory, and finally the system `PATH`. @@ -269,14 +270,14 @@ For `dotnet build` without a RID (development builds), the library is resolved i To refresh the vendored libraries to a new KTX-Software release, run the PowerShell script bundled in the repository: ```powershell -# Refresh all 5 platforms to the default version +# Refresh all 6 platforms to the default version pwsh Obj2Tiles/native/update-libktx.ps1 # Bump to a new version pwsh Obj2Tiles/native/update-libktx.ps1 -Version 4.5.0 # Refresh only Linux and macOS (no 7-Zip required) -pwsh Obj2Tiles/native/update-libktx.ps1 -Rid linux-x64,linux-arm64,osx-x64 +pwsh Obj2Tiles/native/update-libktx.ps1 -Rid linux-x64,linux-arm64,osx-x64,osx-arm64 # Skip checksum verification pwsh Obj2Tiles/native/update-libktx.ps1 -SkipChecksum