diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 9b7320d5b7..8570d6b5df 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -269,9 +269,141 @@ jobs:
path: ${{ github.workspace }}/install/JediOutcast/openjo_sp-macos-${{ matrix.arch }}-${{ matrix.build_type }}-${{ matrix.portable }}.tar.gz
if-no-files-found: error
+ macos-ub2:
+ name: ${{ matrix.name }} macOS universal2 Binary
+ needs: [macos]
+ runs-on: macos-13
+ strategy:
+ matrix:
+ include:
+ - name: OpenJK
+ artifact_prefix: OpenJK
+ target_folder: JediAcademy
+ has_mp: true
+ has_dedicated: true
+ sp_prefix: openjk_sp
+ sp_archive_name: OpenJK-macos-universal2-Release-Non-Portable
+ - name: OpenJO
+ artifact_prefix: OpenJO
+ target_folder: JediOutcast
+ has_mp: false
+ has_dedicated: false
+ sp_prefix: openjo_sp
+ sp_archive_name: OpenJO-macos-universal2-Release-Non-Portable
+
+ steps:
+ - name: Download x86_64 artifact
+ uses: actions/download-artifact@v4
+ with:
+ name: ${{ matrix.artifact_prefix }}-macos-x86_64-Release-Non-Portable
+ path: x86_64-build
+
+ - name: Download arm64 artifact
+ uses: actions/download-artifact@v4
+ with:
+ name: ${{ matrix.artifact_prefix }}-macos-arm64-Release-Non-Portable
+ path: arm64-build
+
+ - name: Extract archives
+ run: |
+ mkdir -p x86_64-extracted
+ mkdir -p arm64-extracted
+
+ if [ "${{ matrix.name }}" == "OpenJO" ]; then
+ tar -xzf x86_64-build/${{ matrix.sp_prefix }}-macos-x86_64-Release-Non-Portable.tar.gz -C x86_64-extracted
+ tar -xzf arm64-build/${{ matrix.sp_prefix }}-macos-arm64-Release-Non-Portable.tar.gz -C arm64-extracted
+ else
+ tar -xzf x86_64-build/${{ matrix.artifact_prefix }}-macos-x86_64-Release-Non-Portable.tar.gz -C x86_64-extracted
+ tar -xzf arm64-build/${{ matrix.artifact_prefix }}-macos-arm64-Release-Non-Portable.tar.gz -C arm64-extracted
+ fi
+
+ - name: Create MP Universal 2 Binary
+ if: ${{ matrix.has_mp }}
+ run: |
+ mkdir -p universal2-app/${{ matrix.target_folder }}/openjk.app/Contents/{MacOS/OpenJK,MacOS/base,Resources,Frameworks}
+
+ cp -R x86_64-extracted/openjk.x86_64.app/Contents/Info.plist universal2-app/${{ matrix.target_folder }}/openjk.app/Contents/
+ cp -R x86_64-extracted/openjk.x86_64.app/Contents/PkgInfo universal2-app/${{ matrix.target_folder }}/openjk.app/Contents/ 2>/dev/null || true
+ cp -R x86_64-extracted/openjk.x86_64.app/Contents/Resources/* universal2-app/${{ matrix.target_folder }}/openjk.app/Contents/Resources/
+
+ sed -i '' 's/x86_64/ub2/g' universal2-app/${{ matrix.target_folder }}/openjk.app/Contents/Info.plist
+
+ lipo -create -output universal2-app/${{ matrix.target_folder }}/openjk.app/Contents/MacOS/openjk.ub2 \
+ x86_64-extracted/openjk.x86_64.app/Contents/MacOS/openjk.x86_64 \
+ arm64-extracted/openjk.arm64.app/Contents/MacOS/openjk.arm64
+
+ lipo -create -output universal2-app/${{ matrix.target_folder }}/openjk.app/Contents/Frameworks/libSDL2-2.0.0.dylib \
+ x86_64-extracted/openjk.x86_64.app/Contents/Frameworks/libSDL2-2.0.0.dylib \
+ arm64-extracted/openjk.arm64.app/Contents/Frameworks/libSDL2-2.0.0.dylib
+
+ cp -v x86_64-extracted/openjk.x86_64.app/Contents/MacOS/rd*_x86_64.dylib universal2-app/${{ matrix.target_folder }}/openjk.app/Contents/MacOS/
+ cp -v arm64-extracted/openjk.arm64.app/Contents/MacOS/rd*_arm64.dylib universal2-app/${{ matrix.target_folder }}/openjk.app/Contents/MacOS/
+
+ cp -v x86_64-extracted/openjk.x86_64.app/Contents/MacOS/OpenJK/*x86_64.dylib universal2-app/${{ matrix.target_folder }}/openjk.app/Contents/MacOS/OpenJK/
+ cp -v arm64-extracted/openjk.arm64.app/Contents/MacOS/OpenJK/*arm64.dylib universal2-app/${{ matrix.target_folder }}/openjk.app/Contents/MacOS/OpenJK/
+
+ cp -v x86_64-extracted/openjk.x86_64.app/Contents/MacOS/base/*x86_64.dylib universal2-app/${{ matrix.target_folder }}/openjk.app/Contents/MacOS/base/
+ cp -v arm64-extracted/openjk.arm64.app/Contents/MacOS/base/*arm64.dylib universal2-app/${{ matrix.target_folder }}/openjk.app/Contents/MacOS/base/
+
+ - name: Create SP Universal 2 Binary
+ run: |
+ mkdir -p universal2-app/${{ matrix.target_folder }}/${{ matrix.sp_prefix }}.app/Contents/{MacOS/OpenJK,Resources,Frameworks}
+
+ cp -R x86_64-extracted/${{ matrix.sp_prefix }}.x86_64.app/Contents/Info.plist universal2-app/${{ matrix.target_folder }}/${{ matrix.sp_prefix }}.app/Contents/
+ cp -R x86_64-extracted/${{ matrix.sp_prefix }}.x86_64.app/Contents/PkgInfo universal2-app/${{ matrix.target_folder }}/${{ matrix.sp_prefix }}.app/Contents/ 2>/dev/null || true
+ cp -R x86_64-extracted/${{ matrix.sp_prefix }}.x86_64.app/Contents/Resources/* universal2-app/${{ matrix.target_folder }}/${{ matrix.sp_prefix }}.app/Contents/Resources/
+
+ sed -i '' 's/x86_64/ub2/g' universal2-app/${{ matrix.target_folder }}/${{ matrix.sp_prefix }}.app/Contents/Info.plist
+
+ lipo -create -output universal2-app/${{ matrix.target_folder }}/${{ matrix.sp_prefix }}.app/Contents/MacOS/${{ matrix.sp_prefix }}.ub2 \
+ x86_64-extracted/${{ matrix.sp_prefix }}.x86_64.app/Contents/MacOS/${{ matrix.sp_prefix }}.x86_64 \
+ arm64-extracted/${{ matrix.sp_prefix }}.arm64.app/Contents/MacOS/${{ matrix.sp_prefix }}.arm64
+
+ lipo -create -output universal2-app/${{ matrix.target_folder }}/${{ matrix.sp_prefix }}.app/Contents/Frameworks/libSDL2-2.0.0.dylib \
+ x86_64-extracted/${{ matrix.sp_prefix }}.x86_64.app/Contents/Frameworks/libSDL2-2.0.0.dylib \
+ arm64-extracted/${{ matrix.sp_prefix }}.arm64.app/Contents/Frameworks/libSDL2-2.0.0.dylib
+
+ cp -v x86_64-extracted/${{ matrix.sp_prefix }}.x86_64.app/Contents/MacOS/rd*_x86_64.dylib universal2-app/${{ matrix.target_folder }}/${{ matrix.sp_prefix }}.app/Contents/MacOS/
+ cp -v arm64-extracted/${{ matrix.sp_prefix }}.arm64.app/Contents/MacOS/rd*_arm64.dylib universal2-app/${{ matrix.target_folder }}/${{ matrix.sp_prefix }}.app/Contents/MacOS/
+
+ cp -v x86_64-extracted/${{ matrix.sp_prefix }}.x86_64.app/Contents/MacOS/OpenJK/*x86_64.dylib universal2-app/${{ matrix.target_folder }}/${{ matrix.sp_prefix }}.app/Contents/MacOS/OpenJK/
+ cp -v arm64-extracted/${{ matrix.sp_prefix }}.arm64.app/Contents/MacOS/OpenJK/*arm64.dylib universal2-app/${{ matrix.target_folder }}/${{ matrix.sp_prefix }}.app/Contents/MacOS/OpenJK/
+
+ - name: Create Dedicated Server Universal 2 Binary
+ if: ${{ matrix.has_dedicated }}
+ run: |
+ lipo -create -output universal2-app/${{ matrix.target_folder }}/openjkded \
+ x86_64-extracted/openjkded.x86_64 \
+ arm64-extracted/openjkded.arm64
+
+ - name: Create binary archive
+ working-directory: ${{ github.workspace }}/universal2-app/${{ matrix.target_folder }}/
+ shell: bash
+ run: |
+ chmod +x ${{ matrix.sp_prefix }}.app/Contents/MacOS/${{ matrix.sp_prefix }}.ub2
+
+ if [ "${{ matrix.has_mp }}" == "true" ]; then
+ chmod +x openjk.app/Contents/MacOS/openjk.ub2
+ codesign --force --deep --sign - openjk.app
+ fi
+
+ if [ "${{ matrix.has_dedicated }}" == "true" ]; then
+ chmod +x openjkded
+ codesign --force --deep --sign - openjkded
+ fi
+
+ codesign --force --deep --sign - ${{ matrix.sp_prefix }}.app
+ tar -czvf ${{ matrix.sp_archive_name }}.tar.gz *
+
+ - uses: actions/upload-artifact@v4
+ with:
+ name: ${{ matrix.artifact_prefix }}-macos-universal2-Release-Non-Portable
+ path: universal2-app/${{ matrix.target_folder }}/${{ matrix.sp_archive_name }}.tar.gz
+ if-no-files-found: error
+
create-latest:
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
- needs: [msvc, ubuntu, macos]
+ needs: [msvc, ubuntu, macos, macos-ub2]
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
@@ -289,6 +421,7 @@ jobs:
mv ./OpenJK-linux-x86_64-Release-Non-Portable/* OpenJK-linux-x86_64.tar.gz
mv ./OpenJK-macos-x86_64-Release-Non-Portable/* OpenJK-macos-x86_64.tar.gz
mv ./OpenJK-macos-arm64-Release-Non-Portable/* OpenJK-macos-arm64.tar.gz
+ mv ./OpenJK-macos-universal2-Release-Non-Portable/* OpenJK-macos-ub2.tar.gz
7z a -r OpenJO-windows-x86.zip ./OpenJO-windows-x86-Release-Non-Portable/* '-x!msvcp*.*' '-x!vcruntime*.*' '-x!concrt*.*'
7z a -r OpenJO-windows-x86_64.zip ./OpenJO-windows-x86_64-Release-Non-Portable/* '-x!msvcp*.*' '-x!vcruntime*.*' '-x!concrt*.*'
@@ -296,6 +429,7 @@ jobs:
mv ./OpenJO-linux-x86_64-Release-Non-Portable/* OpenJO-linux-x86_64.tar.gz
mv ./OpenJO-macos-x86_64-Release-Non-Portable/* OpenJO-macos-x86_64.tar.gz
mv ./OpenJO-macos-arm64-Release-Non-Portable/* OpenJO-macos-arm64.tar.gz
+ mv ./OpenJO-macos-universal2-Release-Non-Portable/* OpenJO-macos-ub2.tar.gz
- name: Create latest build
uses: softprops/action-gh-release@v1
@@ -311,7 +445,7 @@ jobs:
create-release:
if: github.event_name == 'release'
- needs: [msvc, ubuntu, macos]
+ needs: [msvc, ubuntu, macos, macos-ub2]
runs-on: ubuntu-22.04
strategy:
@@ -341,6 +475,10 @@ jobs:
artifact_name: OpenJK-macos-arm64.tar.gz
zip: false
+ - artifact_dir: OpenJK-macos-universal2-Release-Non-Portable
+ artifact_name: OpenJK-macos-ub2.tar.gz
+ zip: false
+
- artifact_dir: OpenJO-windows-x86-Release-Non-Portable/JediOutcast
artifact_name: OpenJO-windows-x86.zip
zip: true
@@ -365,6 +503,10 @@ jobs:
artifact_name: OpenJO-macos-arm64.tar.gz
zip: false
+ - artifact_dir: OpenJO-macos-universal2-Release-Non-Portable
+ artifact_name: OpenJO-macos-ub2.tar.gz
+ zip: false
+
steps:
- uses: actions/checkout@v4
with:
diff --git a/code/macosx/OpenJKInfo.plist b/code/macosx/OpenJKInfo.plist
index 22ecdf6b88..d7c738170c 100644
--- a/code/macosx/OpenJKInfo.plist
+++ b/code/macosx/OpenJKInfo.plist
@@ -6,8 +6,6 @@
English
CFBundleExecutable
${MACOSX_BUNDLE_EXECUTABLE_NAME}
- CFBundleGetInfoString
- ${MACOSX_BUNDLE_INFO_STRING}
CFBundleIconFile
OpenJK.icns
CFBundleIdentifier
@@ -32,6 +30,15 @@
NSHumanReadableCopyright
${MACOSX_BUNDLE_COPYRIGHT}
+ LSMinimumSystemVersion
+ 10.9
+ LSArchitecturePriority
+
+ arm64
+ x86_64
+
+ NSHighResolutionCapable
+
CFBundleDisplayName
${SPEngine}
diff --git a/codeJK2/macosx/OpenJKInfo.plist b/codeJK2/macosx/OpenJKInfo.plist
index 5710a3e8b3..a5001c4096 100644
--- a/codeJK2/macosx/OpenJKInfo.plist
+++ b/codeJK2/macosx/OpenJKInfo.plist
@@ -6,8 +6,6 @@
English
CFBundleExecutable
${MACOSX_BUNDLE_EXECUTABLE_NAME}
- CFBundleGetInfoString
- ${MACOSX_BUNDLE_INFO_STRING}
CFBundleIconFile
OpenJK.icns
CFBundleIdentifier
@@ -32,6 +30,15 @@
NSHumanReadableCopyright
${MACOSX_BUNDLE_COPYRIGHT}
+ LSMinimumSystemVersion
+ 10.9
+ LSArchitecturePriority
+
+ arm64
+ x86_64
+
+ NSHighResolutionCapable
+
CFBundleDisplayName
${JK2SPEngine}
diff --git a/codemp/macosx/OpenJKInfo.plist b/codemp/macosx/OpenJKInfo.plist
index 263776c515..14df337e57 100644
--- a/codemp/macosx/OpenJKInfo.plist
+++ b/codemp/macosx/OpenJKInfo.plist
@@ -6,8 +6,6 @@
English
CFBundleExecutable
${MACOSX_BUNDLE_EXECUTABLE_NAME}
- CFBundleGetInfoString
- ${MACOSX_BUNDLE_INFO_STRING}
CFBundleIconFile
${MACOSX_BUNDLE_ICON_FILE}
CFBundleIdentifier
@@ -32,6 +30,15 @@
NSHumanReadableCopyright
${MACOSX_BUNDLE_COPYRIGHT}
+ LSMinimumSystemVersion
+ 10.9
+ LSArchitecturePriority
+
+ arm64
+ x86_64
+
+ NSHighResolutionCapable
+
CFBundleDisplayName
${MACOSX_BUNDLE_DISPLAY_NAME}