Skip to content

Commit

Permalink
wip: ci cross linux rm64
Browse files Browse the repository at this point in the history
  • Loading branch information
antmak committed Nov 8, 2023
1 parent a2a6c0f commit 9ae8043
Show file tree
Hide file tree
Showing 5 changed files with 155 additions and 85 deletions.
153 changes: 69 additions & 84 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: 'build'
on: [push, pull_request]

jobs:
build:
Build:
env:
MSYSTEM: MINGW64
CHERE_INVOKING: 'yes'
Expand All @@ -12,10 +12,10 @@ jobs:
fail-fast: false
matrix:
include:
- platform: macos-x86_64
runs_on: macos-12
extra_configure_args: "--disable-cocoa --disable-coreaudio --python=python3.11"
shell: bash -e {0}
#- platform: macos-x86_64
# runs_on: macos-12
# extra_configure_args: "--disable-cocoa --disable-coreaudio --python=python3.11"
# shell: bash -e {0}
# - platform: macos-arm64
# runs_on: macos-latest-xlarge
# extra_configure_args: "--disable-cocoa --disable-coreaudio"
Expand All @@ -28,92 +28,78 @@ jobs:
# shell: bash -e {0}
- platform: linux-arm64
runs_on: ubuntu-20.04
container: ubuntu:20.04
extra_configure_args: "--disable-gtk --cross-prefix=aarch64-linux-gnu-"
shell: bash -e {0}
# - platform: win-x86_64
# runs_on: windows-2022
# extra_configure_args: ""
# shell: msys2 {0}
runs-on: ${{ matrix.runs_on }}
container: ${{ matrix.container }}
defaults:
run:
shell: ${{ matrix.shell }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4

- name: Install prerequisites (Linux arm64)
if: ${{ matrix.platform == 'linux-arm64' }}
env:
DEBIAN_FRONTEND: "noninteractive"
run: |
# add ports.ubuntu.com to apt mirrors
cat /etc/apt/apt-mirrors.txt
sudo su -c 'echo "http://ports.ubuntu.com/ubuntu-ports/ priority: 1" > /etc/apt/apt-mirrors.txt'
cat /etc/apt/apt-mirrors.txt
sudo dpkg --add-architecture arm64
sudo apt-get update || true
sudo apt-get install -q --no-install-recommends \
ninja-build \
crossbuild-essential-arm64 \
gcc-aarch64-linux-gnu \
binutils-dev:arm64 \
libgcrypt-dev:arm64 \
libglib2.0-dev:arm64 \
libpixman-1-dev:arm64 \
libslirp-dev:arm64
- name: Install prerequisites (Linux x86_64)
if: ${{ matrix.platform == 'linux-amd64' }}
env:
DEBIAN_FRONTEND: "noninteractive"
run: |
sudo apt-get install -y -q --no-install-recommends \
binutils-dev \
ninja-build \
libgcrypt-dev \
libglib2.0-dev \
libpixman-1-dev \
libslirp-dev
- name: Install prerequisites (macOS)
if: ${{ matrix.platform == 'macos-x86_64' || matrix.platform == 'macos-arm64' }}
working-directory: .github/workflows/scripts
run: |
brew install \
ninja \
libgcrypt \
glib \
pixman \
pkg-config \
python@3.11
brew link --overwrite python@3.11
- name: Install prerequisites (Windows)
if : ${{ matrix.platform == 'win-x86_64' }}
uses: msys2/setup-msys2@v2
with:
cache: true
msystem: mingw64
install: >-
mingw-w64-x86_64-python
mingw-w64-x86_64-ninja
mingw-w64-x86_64-gcc
mingw-w64-x86_64-glib2
mingw-w64-x86_64-pkg-config
mingw-w64-x86_64-pixman
mingw-w64-x86_64-libgcrypt
mingw-w64-x86_64-libslirp
diffutils git
- name: Patch meson.build (macOS)
if: ${{ matrix.platform == 'macos-x86_64' || matrix.platform == 'macos-arm64' }}
run: |
sed -i '' "s/project('qemu', \['c'\],/project('qemu', ['c', 'objc'],/" meson.build
readlink -f .
./prerequisites-cross-linux-arm64.sh
# - name: Install prerequisites (Linux x86_64)
# if: ${{ matrix.platform == 'linux-amd64' }}
# env:
# DEBIAN_FRONTEND: "noninteractive"
# run: |
# sudo apt-get install -y -q --no-install-recommends \
# binutils-dev \
# ninja-build \
# libgcrypt-dev \
# libglib2.0-dev \
# libpixman-1-dev \
# libslirp-dev
# - name: Install prerequisites (macOS)
# if: ${{ matrix.platform == 'macos-x86_64' || matrix.platform == 'macos-arm64' }}
# run: |
# brew install \
# ninja \
# libgcrypt \
# glib \
# pixman \
# pkg-config \
# python@3.11
# brew link --overwrite python@3.11
# - name: Install prerequisites (Windows)
# if : ${{ matrix.platform == 'win-x86_64' }}
# uses: msys2/setup-msys2@v2
# with:
# cache: true
# msystem: mingw64
# install: >-
# mingw-w64-x86_64-python
# mingw-w64-x86_64-ninja
# mingw-w64-x86_64-gcc
# mingw-w64-x86_64-glib2
# mingw-w64-x86_64-pkg-config
# mingw-w64-x86_64-pixman
# mingw-w64-x86_64-libgcrypt
# mingw-w64-x86_64-libslirp
# diffutils git
# - name: Patch meson.build (macOS)
# if: ${{ matrix.platform == 'macos-x86_64' || matrix.platform == 'macos-arm64' }}
# run: |
# sed -i '' "s/project('qemu', \['c'\],/project('qemu', ['c', 'objc'],/" meson.build
- name: Configure
run: |
which -a python
export PATH=$(brew --prefix python)/bin:$PATH
which -a python3
python3 --version
head -n 1 /usr/local/Cellar/glib/2.78.1/bin/gdbus-codegen || true
./configure \
--prefix=$PWD/install/qemu \
--target-list=xtensa-softmmu \
--with-pkgversion="${{ github.ref_name }}" \
--with-pkgversion="esp_13.1.1_20231107" \
--enable-gcrypt \
--enable-slirp \
--disable-user \
Expand All @@ -124,16 +110,15 @@ jobs:
${{ matrix.extra_configure_args }} || (cat meson-logs/meson-log.txt && false)
- name: Build
run: |
export PATH=$(brew --prefix python)/bin:$PATH
ninja -C build
- name: Package distribution archive
run: |
ninja -C build install
find install/qemu/share/qemu -maxdepth 1 -mindepth 1 -not -name 'esp*.bin' -exec rm -rf {} \;
mkdir -p dist
export DIST_DIR=${PWD}/dist
export ARCHIVE_NAME=qemu-${{ github.ref_name }}-${{ matrix.platform }}.tar.bz2
cd install
tar cjvf ${DIST_DIR}/${ARCHIVE_NAME} qemu
cd ${DIST_DIR}
shasum -a 256 *.tar.bz2 > ${ARCHIVE_NAME}.sha256
# - name: Package distribution archive
# run: |
# ninja -C build install
# find install/qemu/share/qemu -maxdepth 1 -mindepth 1 -not -name 'esp*.bin' -exec rm -rf {} \;
# mkdir -p dist
# export DIST_DIR=${PWD}/dist
# export ARCHIVE_NAME=qemu-${{ github.ref_name }}-${{ matrix.platform }}.tar.bz2
# cd install
# tar cjvf ${DIST_DIR}/${ARCHIVE_NAME} qemu
# cd ${DIST_DIR}
# shasum -a 256 *.tar.bz2 > ${ARCHIVE_NAME}.sha256
22 changes: 22 additions & 0 deletions .github/workflows/scripts/configure-cross-linux-arm64.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/usr/bin/env bash

# replace libgcrypt method to 'pkg-config'
sed -z -i "s/\(.*dependency('libgcrypt'.*method: '\)config-tool\('.*\)/\1pkg-config\2/g" -- meson.build

./configure \
--prefix=$PWD/install/qemu \
--target-list=xtensa-softmmu \
--with-pkgversion="esp_13.1.1_20231107" \
--enable-gcrypt \
--enable-slirp \
--disable-user \
--disable-capstone \
--disable-vnc \
--disable-sdl \
--disable-docs \
--disable-gtk \
--cross-prefix=aarch64-linux-gnu- \
&& :


#(cat meson-logs/meson-log.txt && false)
44 changes: 44 additions & 0 deletions .github/workflows/scripts/prerequisites-cross-linux-arm64.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#!/usr/bin/env bash

export DEBIAN_FRONTEND="noninteractive"

EXTRA_APT_SOURCES="
deb [arch=arm64] http://ports.ubuntu.com/ focal main restricted
deb [arch=arm64] http://ports.ubuntu.com/ focal-updates main restricted
deb [arch=arm64] http://ports.ubuntu.com/ focal universe
deb [arch=arm64] http://ports.ubuntu.com/ focal-updates universe
deb [arch=arm64] http://ports.ubuntu.com/ focal multiverse
deb [arch=arm64] http://ports.ubuntu.com/ focal-updates multiverse
deb [arch=arm64] http://ports.ubuntu.com/ focal-backports main restricted universe multiverse
"

dpkg --add-architecture arm64
echo -e "$EXTRA_APT_SOURCES" > /etc/apt/sources.list.d/arm-cross-compile-sources.list
echo DBG1
cat /etc/apt/sources.list.d/arm-cross-compile-sources.list
sed -E -i 's/deb (http|file|mirror)/deb [arch=amd64] \1/' /etc/apt/sources.list
echo DBG2
cat /etc/apt/sources.list | grep -v "^#"
echo DBG3 /etc/apt/apt-mirrors.txt
test -f /etc/apt/apt-mirrors.txt && cat /etc/apt/apt-mirrors.txt | grep -v "^#"

apt-get update \
&& apt-get install -y -q --no-install-recommends \
git \
build-essential \
ninja-build \
python3-pip \
crossbuild-essential-arm64 \
gcc-aarch64-linux-gnu \
binutils-aarch64-linux-gnu \
libglib2.0-0:arm64 \
libglib2.0-dev:arm64 \
libgpg-error-dev:arm64 \
libgcrypt20-dev:arm64 \
libpixman-1-dev:arm64 \
libslirp-dev:arm64 \
zlib1g-dev:arm64 \
&& :

# ?
/usr/bin/pip3 install meson
19 changes: 19 additions & 0 deletions .github/workflows/scripts/prerequisites-linux-arm64.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/usr/bin/env bash

export DEBIAN_FRONTEND="noninteractive"

apt-get update \
&& apt-get install -y -q \
build-essential \
git \
libgcrypt-dev \
libglib2.0-dev \
libpixman-1-dev \
libslirp-dev \
ninja-build \
python3-pip \
wget \
zlib1g-dev \
&& :

/usr/bin/pip3 install meson
2 changes: 1 addition & 1 deletion meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -1481,7 +1481,7 @@ endif
if not gnutls_crypto.found()
if (not get_option('gcrypt').auto() or have_system) and not get_option('nettle').enabled()
gcrypt = dependency('libgcrypt', version: '>=1.8',
method: 'config-tool',
method: 'pkg-config',
required: get_option('gcrypt'))
# Debian has removed -lgpg-error from libgcrypt-config
# as it "spreads unnecessary dependencies" which in
Expand Down

0 comments on commit 9ae8043

Please sign in to comment.