ci: Build macOS architectures separately and combine (#6321)
* ci: Build macOS for different architectures separately. * ci: Combine macOS builds into universal binary. * ci: Disable uploading final macOS artifacts until ready to resume producing.
This commit is contained in:
parent
c961ecb9a4
commit
8f2a5374c3
|
@ -17,7 +17,7 @@ ccache -s
|
||||||
mkdir build && cd build
|
mkdir build && cd build
|
||||||
# TODO: LibreSSL ASM disabled due to platform detection issues in build.
|
# TODO: LibreSSL ASM disabled due to platform detection issues in build.
|
||||||
cmake .. -DCMAKE_BUILD_TYPE=Release \
|
cmake .. -DCMAKE_BUILD_TYPE=Release \
|
||||||
-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" \
|
-DCMAKE_OSX_ARCHITECTURES="$TARGET_ARCH" \
|
||||||
-DENABLE_QT_TRANSLATION=ON \
|
-DENABLE_QT_TRANSLATION=ON \
|
||||||
-DCITRA_ENABLE_COMPATIBILITY_REPORTING=${ENABLE_COMPATIBILITY_REPORTING:-"OFF"} \
|
-DCITRA_ENABLE_COMPATIBILITY_REPORTING=${ENABLE_COMPATIBILITY_REPORTING:-"OFF"} \
|
||||||
-DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON \
|
-DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON \
|
||||||
|
@ -30,4 +30,7 @@ ninja
|
||||||
|
|
||||||
ccache -s
|
ccache -s
|
||||||
|
|
||||||
ctest -VV -C Release
|
CURRENT_ARCH=`arch`
|
||||||
|
if [ "$TARGET_ARCH" = "$CURRENT_ARCH" ]; then
|
||||||
|
ctest -VV -C Release
|
||||||
|
fi
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
#!/bin/bash -ex
|
||||||
|
|
||||||
|
. .ci/common/pre-upload.sh
|
||||||
|
|
||||||
|
REV_NAME="citra-osx-${GITDATE}-${GITREV}"
|
||||||
|
ARCHIVE_NAME="${REV_NAME}.tar.gz"
|
||||||
|
COMPRESSION_FLAGS="-czvf"
|
||||||
|
|
||||||
|
ARTIFACTS_LIST=($ARTIFACTS)
|
||||||
|
|
||||||
|
# Set up the base artifact to combine into.
|
||||||
|
BASE_ARTIFACT=${ARTIFACTS_LIST[0]}
|
||||||
|
BASE_ARTIFACT_ARCH="${BASE_ARTIFACT##*-}"
|
||||||
|
tar xf $BASE_ARTIFACT/$REV_NAME.tar.gz -C $BASE_ARTIFACT
|
||||||
|
mv $BASE_ARTIFACT/$REV_NAME $REV_NAME
|
||||||
|
|
||||||
|
# Executable binary paths that need to be combined.
|
||||||
|
BIN_PATHS=(citra citra-room citra-qt.app/Contents/MacOS/citra-qt)
|
||||||
|
|
||||||
|
# Dylib paths that need to be combined.
|
||||||
|
IFS=$'\n'
|
||||||
|
DYLIB_PATHS=($(cd $REV_NAME && find . -name '*.dylib'))
|
||||||
|
unset IFS
|
||||||
|
|
||||||
|
# Combine all of the executable binaries and dylibs.
|
||||||
|
for OTHER_ARTIFACT in "${ARTIFACTS_LIST[@]:1}"; do
|
||||||
|
OTHER_ARTIFACT_ARCH="${OTHER_ARTIFACT##*-}"
|
||||||
|
|
||||||
|
tar xf $OTHER_ARTIFACT/$REV_NAME.tar.gz -C $OTHER_ARTIFACT
|
||||||
|
|
||||||
|
for BIN_PATH in "${BIN_PATHS[@]}"; do
|
||||||
|
lipo -create -output $REV_NAME/$BIN_PATH $REV_NAME/$BIN_PATH $OTHER_ARTIFACT/$REV_NAME/$BIN_PATH
|
||||||
|
done
|
||||||
|
|
||||||
|
for DYLIB_PATH in "${DYLIB_PATHS[@]}"; do
|
||||||
|
# Only merge if the libraries do not have conflicting arches, otherwise it will fail.
|
||||||
|
DYLIB_INFO=`file $REV_NAME/$DYLIB_PATH`
|
||||||
|
OTHER_DYLIB_INFO=`file $OTHER_ARTIFACT/$REV_NAME/$DYLIB_PATH`
|
||||||
|
if ! [[ "$DYLIB_INFO" =~ "$OTHER_ARTIFACT_ARCH" ]] && ! [[ "$OTHER_DYLIB_INFO" =~ "$BASE_ARTIFACT_ARCH" ]]; then
|
||||||
|
lipo -create -output $REV_NAME/$DYLIB_PATH $REV_NAME/$DYLIB_PATH $OTHER_ARTIFACT/$REV_NAME/$DYLIB_PATH
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
. .ci/common/post-upload.sh
|
|
@ -74,6 +74,9 @@ jobs:
|
||||||
path: artifacts/
|
path: artifacts/
|
||||||
macos:
|
macos:
|
||||||
runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
arch: ["x86_64", "arm64"]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
|
@ -82,9 +85,9 @@ jobs:
|
||||||
uses: actions/cache@v3
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ~/Library/Caches/ccache
|
path: ~/Library/Caches/ccache
|
||||||
key: ${{ runner.os }}-macos-${{ github.sha }}
|
key: ${{ runner.os }}-macos-${{ matrix.arch }}-${{ github.sha }}
|
||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-macos-
|
${{ runner.os }}-macos-${{ matrix.arch }}-
|
||||||
- name: Query tag name
|
- name: Query tag name
|
||||||
uses: little-core-labs/get-git-tag@v3.0.2
|
uses: little-core-labs/get-git-tag@v3.0.2
|
||||||
id: tagName
|
id: tagName
|
||||||
|
@ -95,6 +98,49 @@ jobs:
|
||||||
env:
|
env:
|
||||||
MACOSX_DEPLOYMENT_TARGET: "10.13"
|
MACOSX_DEPLOYMENT_TARGET: "10.13"
|
||||||
ENABLE_COMPATIBILITY_REPORTING: "ON"
|
ENABLE_COMPATIBILITY_REPORTING: "ON"
|
||||||
|
TARGET_ARCH: ${{ matrix.arch }}
|
||||||
|
- name: Pack
|
||||||
|
run: ./.ci/macos/upload.sh
|
||||||
|
- name: Upload
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: macos-${{ matrix.arch }}
|
||||||
|
path: artifacts/
|
||||||
|
macos-universal:
|
||||||
|
runs-on: macos-latest
|
||||||
|
needs: macos
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Query tag name
|
||||||
|
uses: little-core-labs/get-git-tag@v3.0.2
|
||||||
|
id: tagName
|
||||||
|
- name: Download x86 build
|
||||||
|
uses: actions/download-artifact@master
|
||||||
|
with:
|
||||||
|
name: macos-x86_64
|
||||||
|
path: macos-x86_64/
|
||||||
|
- name: Download ARM64 build
|
||||||
|
uses: actions/download-artifact@master
|
||||||
|
with:
|
||||||
|
name: macos-arm64
|
||||||
|
path: macos-arm64/
|
||||||
|
- name: Create universal app
|
||||||
|
run: ./.ci/macos/universal.sh
|
||||||
|
env:
|
||||||
|
ARTIFACTS: macos-x86_64 macos-arm64
|
||||||
|
# - name: Upload
|
||||||
|
# uses: actions/upload-artifact@v3
|
||||||
|
# with:
|
||||||
|
# name: macos
|
||||||
|
# path: artifacts/
|
||||||
|
- name: Delete intermediate artifacts
|
||||||
|
uses: geekyeggo/delete-artifact@v2
|
||||||
|
with:
|
||||||
|
name: |
|
||||||
|
macos-x86_64
|
||||||
|
macos-arm64
|
||||||
windows:
|
windows:
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
|
@ -178,7 +224,7 @@ jobs:
|
||||||
TRANSIFEX_API_TOKEN: ${{ secrets.TRANSIFEX_API_TOKEN }}
|
TRANSIFEX_API_TOKEN: ${{ secrets.TRANSIFEX_API_TOKEN }}
|
||||||
release:
|
release:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: [build, android, macos, source, windows]
|
needs: [build, android, macos-universal, source, windows]
|
||||||
if: ${{ startsWith(github.ref, 'refs/tags/') }}
|
if: ${{ startsWith(github.ref, 'refs/tags/') }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v3
|
||||||
|
|
Reference in New Issue