diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 19fe462..d5cccc4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -32,10 +32,25 @@ 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 @@ -43,29 +58,13 @@ jobs: 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" @@ -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" @@ -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 @@ -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: @@ -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 diff --git a/CLAUDE.md b/CLAUDE.md index f661867..e7037b3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -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 @@ -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 @@ -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/` diff --git a/FlipBinding.CSharp/FlipBinding.CSharp.csproj b/FlipBinding.CSharp/FlipBinding.CSharp.csproj index 81820e7..d017c2d 100644 --- a/FlipBinding.CSharp/FlipBinding.CSharp.csproj +++ b/FlipBinding.CSharp/FlipBinding.CSharp.csproj @@ -28,7 +28,8 @@ - + + @@ -39,16 +40,14 @@ runtimes\win-x64\native\flip_native.dll - - - PreserveNewest - runtimes\osx\native\libflip_native.dylib - - + + PreserveNewest runtimes\osx-arm64\native\libflip_native.dylib - + + + PreserveNewest runtimes\osx-x64\native\libflip_native.dylib