Skip to content

update build

update build #7

Workflow file for this run

name: 'Build for Linux, Windows, MacOS (intel) and MacOS (arm)'
on: [push, pull_request]
jobs:
Vars:
runs-on: ubuntu-latest
outputs:
VERSION: ${{ steps.Vars.outputs.VERSION }}
PROJECT_NAME: ${{ steps.Vars.outputs.PROJECT_NAME }}
REPOSITORY_URL: ${{ steps.Vars.outputs.REPOSITORY_URL }}
steps:
- id: Vars
run: |
echo "ref_type: ${{ github.ref_type }}"
echo "ref: ${{ github.ref }}"
echo "sha: ${{ github.sha }}"
echo ""
if [[ "${{ github.ref_type }}" == "tag" ]]; then
VERSION=${{ github.ref }}
VERSION=${VERSION#"refs/tags/"}
VERSION=${VERSION//"-"/"_"} # replace dashes with underscores in the version
else
VERSION=${{ github.sha }}
VERSION=g${VERSION:0:8}
fi
echo "VERSION=$VERSION" >> "$GITHUB_OUTPUT"
echo $VERSION
OWNER=${{ github.repository_owner }}
FULLNAME=${{ github.repository }}
PROJECT_NAME=${FULLNAME#"$OWNER/"}
echo "PROJECT_NAME=$PROJECT_NAME" >> "$GITHUB_OUTPUT"
echo $PROJECT_NAME
REPOSITORY_URL=${{ github.server_url }}/${{ github.repository }}
echo "REPOSITORY_URL=$REPOSITORY_URL" >> "$GITHUB_OUTPUT"
echo $REPOSITORY_URL
Build:
needs: [ Vars ]
env:
# A simple way to spread several environments for Windows. But to be more precise, we need to somehow add different envs to matrix.include
MSYSTEM: MINGW64 # Ref: https://www.msys2.org/docs/environments/
CHERE_INVOKING: 'yes'
MSYS: 'winsymlinks:native'
strategy:
fail-fast: false
matrix:
# Naming MinGW platforms: https://sourceforge.net/p/mingw-w64/wiki2/TypeTriplets/
platform: [x86_64-linux-gnu, x86_64-w64-mingw32, x86_64-apple-darwin, aarch64-apple-darwin]
target: [xtensa-softmmu]
include:
- platform: x86_64-linux-gnu
runs_on: ubuntu-24.04
# Used minimal build deps
container: ubuntu:24.04
shell: bash -e {0}
run_prerequisites: "./.github/workflows/scripts/prerequisites-native.sh"
run_configure: "./.github/workflows/scripts/configure-native.sh"
- platform: x86_64-w64-mingw32
runs_on: windows-2022
shell: msys2 {0}
run_configure: "./.github/workflows/scripts/configure-win.sh"
- platform: x86_64-apple-darwin
runs_on: macos-15-intel
shell: bash -e {0}
run_prerequisites: "./.github/workflows/scripts/prerequisites-macos.sh"
run_configure: "./.github/workflows/scripts/configure-macos.sh"
- platform: aarch64-apple-darwin
runs_on: macos-14
shell: bash -e {0}
run_prerequisites: "./.github/workflows/scripts/prerequisites-macos.sh"
run_configure: "./.github/workflows/scripts/configure-macos.sh"
runs-on: ${{ matrix.runs_on }}
container:
image: ${{ matrix.container }}
defaults:
run:
shell: ${{ matrix.shell }}
steps:
- uses: actions/checkout@v4
- name: Install prerequisites (${{ matrix.target }} @ ${{ matrix.platform }})
if : ${{ matrix.platform != 'x86_64-w64-mingw32' }}
run: |
${{ matrix.run_prerequisites }}
- name: Install MSYS2 prerequisites (${{ matrix.target }} @ ${{ matrix.platform }})
if : ${{ matrix.platform == 'x86_64-w64-mingw32' }}
uses: msys2/setup-msys2@v2
with:
cache: true
msystem: MINGW64
install: >-
diffutils
git
mingw-w64-x86_64-gcc
mingw-w64-x86_64-glib2
mingw-w64-x86_64-libgcrypt
mingw-w64-x86_64-libiconv
mingw-w64-x86_64-libslirp
mingw-w64-x86_64-ninja
mingw-w64-x86_64-gtk3
mingw-w64-x86_64-pixman
mingw-w64-x86_64-pkg-config
mingw-w64-x86_64-python
mingw-w64-x86_64-SDL2
- name: Configure (${{ matrix.target }} @ ${{ matrix.platform }})
env:
VERSION: ${{ needs.Vars.outputs.VERSION }}
TARGET: ${{ matrix.target }}
run: |
${{ matrix.run_configure }}
- name: Build (${{ matrix.target }} @ ${{ matrix.platform }})
run: |
export MACOSX_DEPLOYMENT_TARGET=13
ninja -C build install
- name: Package Darwin Libs (${{ matrix.target }} @ ${{ matrix.platform }})
if : ${{ matrix.platform == 'aarch64-apple-darwin' || matrix.platform == 'x86_64-apple-darwin'}}
run: |
cd $PWD/install/qemu/xtensa-softmmu
ls -l
otool -L qemu-system-xtensa
otool -L qemu-system-xtensa | grep "/opt/homebrew\|/usr/local/opt" | cut -f 1 -d " " | xargs -Ixxx cp -n xxx .
ls -l
otool -L *.dylib | grep "/opt/homebrew\|/usr/local/opt" | cut -f 1 -d " " | xargs -Ixxx cp -n xxx . || true
otool -L *.dylib | grep "/opt/homebrew\|/usr/local/opt" | cut -f 1 -d " " | xargs -Ixxx cp -n xxx . || true
- name: Package Windows DLLs (${{ matrix.target }} @ ${{ matrix.platform }})
if : ${{ matrix.platform == 'x86_64-w64-mingw32'}}
run: |
cd $PWD/install/qemu/xtensa-softmmu
ls -l
ldd qemu-system-xtensa
ldd qemu-system-xtensa | grep "/mingw64/bin/" | cut -f 3 -d " " | xargs -Ixxx cp -n xxx .
ls -l
- name: Package (${{ matrix.target }} @ ${{ matrix.platform }})
env:
VERSION: ${{ needs.Vars.outputs.VERSION }}
PROJECT_NAME: ${{ needs.Vars.outputs.PROJECT_NAME }}
PLATFORM: ${{ matrix.platform }}
TARGET: ${{ matrix.target }}
run: |
find $PWD/install/qemu/share/qemu/ -maxdepth 1 -mindepth 1 -not -name 'esp32*.bin' -exec rm -rfv {} \;
export DIST_DIR=${PWD}/dist
mkdir -p ${DIST_DIR}
cd $PWD/install
mv qemu/share/qemu qemu/share/qemu-firmware
ARCHIVE_NAME=${PROJECT_NAME}-${TARGET}-${VERSION}-${PLATFORM}.tar.gz
tar -czvf ${DIST_DIR}/${ARCHIVE_NAME} qemu
- name: Dist artifacts (${{ matrix.target }} @ ${{ matrix.platform }})
uses: actions/upload-artifact@v4
with:
# TODO split artifacts for tests
name: dist-qemu-${{ matrix.target }}-${{ matrix.platform }}
path: |
dist/*.tar.gz
Upload:
if: startsWith(github.ref, 'refs/tags/')
needs: [ Vars, Build ]
runs-on: ubuntu-latest
steps :
- name: Create a source archive
id: create-source
env:
VERSION: ${{ needs.Vars.outputs.VERSION }}
PROJECT_NAME: ${{ needs.Vars.outputs.PROJECT_NAME }}
REPOSITORY_URL: ${{ needs.Vars.outputs.REPOSITORY_URL }}
run: |
export RELEASE_CHECKSUM_FILE="${PROJECT_NAME}-${VERSION}-checksum.sha256"
echo "RELEASE_CHECKSUM_FILE=$RELEASE_CHECKSUM_FILE" >> "$GITHUB_OUTPUT"
RELEASE_SRC_NAME="${PROJECT_NAME}-${VERSION}-src"
export RELEASE_SRC_FILE="${PROJECT_NAME}-${VERSION}-src.tar.xz"
echo "RELEASE_SRC_FILE=$RELEASE_SRC_FILE" >> "$GITHUB_OUTPUT"
rm -rf -- "${RELEASE_SRC_NAME}" "${RELEASE_SRC_FILE}"
git clone --quiet --depth 1 --recurse-submodules --shallow-submodules "${REPOSITORY_URL}" "${RELEASE_SRC_NAME}"
find "${RELEASE_SRC_NAME}" -name ".git" -type d -exec rm -rf -- "{}" +
find "${RELEASE_SRC_NAME}" -name .git\* -exec rm -rf -- {} +
tar -cJvf "${RELEASE_SRC_FILE}" "${RELEASE_SRC_NAME}" > src-filelist.txt 2>&1
rm -rf -- "${RELEASE_SRC_NAME}"
ls -l
- name: Source filelist (dbg)
uses: actions/upload-artifact@v4
with:
name: src-filelist
path: |
src-filelist.txt
- uses: actions/download-artifact@v4
with:
pattern: dist-qemu-*
path: artifacts
merge-multiple: true
- name: Release
uses: softprops/action-gh-release@v2
with:
draft: true
files: artifacts/*