Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 41 additions & 60 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,40 +32,39 @@ defaults:

jobs:
build-native-osx:
runs-on: macos-latest
runs-on: ${{ matrix.os }}
name: build-native-osx-${{ matrix.name }}
timeout-minutes: 10
permissions:
contents: read
strategy:
fail-fast: false
matrix:
include:
- os: macos-latest
name: arm64
arch: arm64
artifact: native-osx-arm64
rid: osx-arm64
- os: macos-15-intel
name: x64
arch: x86_64
artifact: native-osx-x64
rid: osx-x64

steps:
- name: Checkout
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
with:
submodules: recursive

- name: Build native library (arm64)
run: |
cd flip-native
mkdir build-arm64 && cd build-arm64
cmake .. -DCMAKE_OSX_ARCHITECTURES=arm64
cmake --build . --config Release

- name: Build native library (x86_64)
- name: Build native library (${{ matrix.arch }})
run: |
cd flip-native
mkdir build-x64 && cd build-x64
cmake .. -DCMAKE_OSX_ARCHITECTURES=x86_64
mkdir build && cd build
cmake .. -DCMAKE_OSX_ARCHITECTURES=${{ matrix.arch }}
cmake --build . --config Release

- name: Create Universal Binary
run: |
cd flip-native
lipo -create \
build-arm64/libflip_native.dylib \
build-x64/libflip_native.dylib \
-output libflip_native.dylib
lipo -info libflip_native.dylib

- name: Sign native library
run: |
CERTIFICATE_PATH="$RUNNER_TEMP/build_certificate.p12"
Expand All @@ -81,53 +80,23 @@ jobs:
security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH"
security list-keychain -d user -s "$KEYCHAIN_PATH"

codesign --sign "Developer ID Application" --force --timestamp flip-native/libflip_native.dylib
codesign --verify --verbose flip-native/libflip_native.dylib
codesign --sign "Developer ID Application" --force --timestamp flip-native/build/libflip_native.dylib
codesign --verify --verbose flip-native/build/libflip_native.dylib
env:
BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
P12_PASSWORD: ${{ secrets.P12_PASSWORD }}
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}

- name: Upload native library
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
with:
name: native-osx
path: flip-native/libflip_native.dylib

test-native-osx:
needs: [ build-native-osx ]
runs-on: ${{ matrix.os }}
name: test-native-osx-${{ matrix.name }}
timeout-minutes: 10
permissions:
contents: read
strategy:
fail-fast: false
matrix:
os: [ macos-latest, macos-15-intel ]
include:
- os: macos-latest
name: arm64
- os: macos-15-intel
name: x64

steps:
- name: Checkout
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
with:
submodules: recursive
- name: Copy native library to runtimes
run: |
mkdir -p FlipBinding.CSharp/runtimes/${{ matrix.rid }}/native
cp flip-native/build/libflip_native.dylib FlipBinding.CSharp/runtimes/${{ matrix.rid }}/native/

- name: Setup .NET
uses: actions/setup-dotnet@2016bd2012dba4e32de620c46fe006a3ac9f0602 # v5
with:
dotnet-version: '10.0.x'

- name: Download macOS native library
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
with:
name: native-osx
path: FlipBinding.CSharp/runtimes/osx/native/

- name: Test
run: dotnet test --verbosity normal --results-directory ./TestResults --logger "trx;LogFileName=test-results.trx"

Expand All @@ -140,6 +109,12 @@ jobs:
./FlipBinding.CSharp.Tests/bin/Debug/net10.0/TestOutputs/*.png
if: (!cancelled())

- name: Upload native library
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
with:
name: ${{ matrix.artifact }}
path: flip-native/build/libflip_native.dylib

build-native-win-x64:
runs-on: windows-latest
timeout-minutes: 10
Expand Down Expand Up @@ -235,7 +210,7 @@ jobs:
path: flip-native/build/libflip_native.so

build-nupkg:
needs: [ test-native-osx, build-native-win-x64, build-native-linux-x64 ]
needs: [ build-native-osx, build-native-win-x64, build-native-linux-x64 ]
runs-on: ubuntu-latest
timeout-minutes: 10
permissions:
Expand All @@ -252,11 +227,17 @@ jobs:
with:
dotnet-version: '10.0.x'

- name: Download macOS native library
- name: Download macOS native library (arm64)
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
with:
name: native-osx-arm64
path: FlipBinding.CSharp/runtimes/osx-arm64/native/

- name: Download macOS native library (x64)
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
with:
name: native-osx
path: FlipBinding.CSharp/runtimes/osx/native/
name: native-osx-x64
path: FlipBinding.CSharp/runtimes/osx-x64/native/

- name: Download Windows native library
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
Expand Down
14 changes: 3 additions & 11 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ git clone --recursive https://github.com/CyberAgentGameEntertainment/FlipBinding

## Build Native Library

### macOS (Universal Binary)
### macOS (Architecture-Specific)

```bash
cd flip-native
Expand All @@ -43,15 +43,6 @@ mkdir build-x64 && cd build-x64
cmake .. -DCMAKE_OSX_ARCHITECTURES=x86_64
cmake --build . --config Release
cd ..

# Create Universal Binary
lipo -create \
build-arm64/libflip_native.dylib \
build-x64/libflip_native.dylib \
-output libflip_native.dylib

# Verify
lipo -info libflip_native.dylib
```

### Windows / Linux
Expand All @@ -65,7 +56,8 @@ cmake --build . --config Release

### Move to runtimes folder

- macOS: `libflip_native.dylib` → `FlipBinding.CSharp/runtimes/osx/native/`
- macOS (arm64): `build-arm64/libflip_native.dylib` → `FlipBinding.CSharp/runtimes/osx-arm64/native/`
- macOS (x64): `build-x64/libflip_native.dylib` → `FlipBinding.CSharp/runtimes/osx-x64/native/`
- Windows: `flip_native.dll` → `FlipBinding.CSharp/runtimes/win-x64/native/`
- Linux: `libflip_native.so` → `FlipBinding.CSharp/runtimes/linux-x64/native/`

Expand Down
15 changes: 7 additions & 8 deletions FlipBinding.CSharp/FlipBinding.CSharp.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@
<!-- Native library files for each platform -->
<ItemGroup>
<None Include="runtimes\win-x64\native\flip_native.dll" Pack="true" PackagePath="runtimes\win-x64\native" Visible="false" />
<None Include="runtimes\osx\native\libflip_native.dylib" Pack="true" PackagePath="runtimes\osx\native" Visible="false" />
<None Include="runtimes\osx-arm64\native\libflip_native.dylib" Pack="true" PackagePath="runtimes\osx-arm64\native" Visible="false" />
<None Include="runtimes\osx-x64\native\libflip_native.dylib" Pack="true" PackagePath="runtimes\osx-x64\native" Visible="false" />
<None Include="runtimes\linux-x64\native\libflip_native.so" Pack="true" PackagePath="runtimes\linux-x64\native" Visible="false" />
</ItemGroup>

Expand All @@ -39,16 +40,14 @@
<Link>runtimes\win-x64\native\flip_native.dll</Link>
</None>
</ItemGroup>
<ItemGroup Condition="Exists('runtimes\osx\native\libflip_native.dylib')">
<None Include="runtimes\osx\native\libflip_native.dylib">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>runtimes\osx\native\libflip_native.dylib</Link>
</None>
<None Include="runtimes\osx\native\libflip_native.dylib">
<ItemGroup Condition="Exists('runtimes\osx-arm64\native\libflip_native.dylib')">
<None Include="runtimes\osx-arm64\native\libflip_native.dylib">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>runtimes\osx-arm64\native\libflip_native.dylib</Link>
</None>
<None Include="runtimes\osx\native\libflip_native.dylib">
</ItemGroup>
<ItemGroup Condition="Exists('runtimes\osx-x64\native\libflip_native.dylib')">
<None Include="runtimes\osx-x64\native\libflip_native.dylib">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>runtimes\osx-x64\native\libflip_native.dylib</Link>
</None>
Expand Down