Skip to content

Commit 8836d0c

Browse files
Add Crossfile CI workflow for multi-architecture builds
1 parent b5cadc2 commit 8836d0c

File tree

1 file changed

+110
-0
lines changed

1 file changed

+110
-0
lines changed

.github/workflows/crossfile_ci.yml

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
name: Crossfile CI
2+
3+
on:
4+
schedule:
5+
- cron: '15 21 * * *'
6+
push:
7+
branches:
8+
- main
9+
pull_request:
10+
branches:
11+
- main
12+
13+
jobs:
14+
build_cross:
15+
name: Building on Bedrock ${{ matrix.architecture }}
16+
runs-on: ubuntu-latest # Using Ubuntu as the base system for cross-compilation
17+
18+
strategy:
19+
matrix:
20+
architecture: [arm, arm64, mips, mipsel, riscv64, ppc, ppc64le, sparc64, s390x]
21+
22+
steps:
23+
- name: Checkout code
24+
uses: actions/checkout@v5
25+
with:
26+
fetch-depth: 0
27+
28+
- name: Set up Python
29+
uses: actions/setup-python@v5
30+
with:
31+
python-version: '3.12'
32+
33+
- name: Install Cross-Compilation Toolchain
34+
run: |
35+
sudo apt update
36+
if [ "${{ matrix.architecture }}" == "arm" ]; then
37+
sudo apt install -y gcc-arm-linux-gnueabi g++-arm-linux-gnueabi
38+
elif [ "${{ matrix.architecture }}" == "arm64" ]; then
39+
sudo apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
40+
elif [ "${{ matrix.architecture }}" == "mips" ]; then
41+
sudo apt install -y gcc-mips-linux-gnu g++-mips-linux-gnu
42+
elif [ "${{ matrix.architecture }}" == "mipsel" ]; then
43+
sudo apt install -y gcc-mipsel-linux-gnu g++-mipsel-linux-gnu
44+
elif [ "${{ matrix.architecture }}" == "riscv64" ]; then
45+
sudo apt install -y gcc-riscv64-linux-gnu g++-riscv64-linux-gnu
46+
elif [ "${{ matrix.architecture }}" == "ppc" ]; then
47+
sudo apt install -y gcc-powerpc-linux-gnu g++-powerpc-linux-gnu
48+
elif [ "${{ matrix.architecture }}" == "ppc64le" ]; then
49+
sudo apt install -y gcc-powerpc64le-linux-gnu g++-powerpc64le-linux-gnu
50+
elif [ "${{ matrix.architecture }}" == "sparc64" ]; then
51+
sudo apt install -y gcc-sparc64-linux-gnu g++-sparc64-linux-gnu
52+
elif [ "${{ matrix.architecture }}" == "s390x" ]; then
53+
sudo apt install -y gcc-s390x-linux-gnu g++-s390x-linux-gnu
54+
fi
55+
56+
- name: Set Cross-Compilation Environment Variables
57+
run: |
58+
if [ "${{ matrix.architecture }}" == "arm" ]; then
59+
echo "CC=arm-linux-gnueabi-gcc" >> $GITHUB_ENV
60+
echo "CXX=arm-linux-gnueabi-g++" >> $GITHUB_ENV
61+
echo "CROSS_FILE=.github/crossfiles/arm.txt" >> $GITHUB_ENV
62+
elif [ "${{ matrix.architecture }}" == "arm64" ]; then
63+
echo "CC=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
64+
echo "CXX=aarch64-linux-gnu-g++" >> $GITHUB_ENV
65+
echo "CROSS_FILE=.github/crossfiles/arm64.txt" >> $GITHUB_ENV
66+
elif [ "${{ matrix.architecture }}" == "mips" ]; then
67+
echo "CC=mips-linux-gnu-gcc" >> $GITHUB_ENV
68+
echo "CXX=mips-linux-gnu-g++" >> $GITHUB_ENV
69+
echo "CROSS_FILE=.github/crossfiles/mips.txt" >> $GITHUB_ENV
70+
elif [ "${{ matrix.architecture }}" == "mipsel" ]; then
71+
echo "CC=mipsel-linux-gnu-gcc" >> $GITHUB_ENV
72+
echo "CXX=mipsel-linux-gnu-g++" >> $GITHUB_ENV
73+
echo "CROSS_FILE=.github/crossfiles/mipsel.txt" >> $GITHUB_ENV
74+
elif [ "${{ matrix.architecture }}" == "riscv64" ]; then
75+
echo "CC=riscv64-linux-gnu-gcc" >> $GITHUB_ENV
76+
echo "CXX=riscv64-linux-gnu-g++" >> $GITHUB_ENV
77+
echo "CROSS_FILE=.github/crossfiles/riscv64.txt" >> $GITHUB_ENV
78+
elif [ "${{ matrix.architecture }}" == "ppc" ]; then
79+
echo "CC=powerpc-linux-gnu-gcc" >> $GITHUB_ENV
80+
echo "CXX=powerpc-linux-gnu-g++" >> $GITHUB_ENV
81+
echo "CROSS_FILE=.github/crossfiles/ppc.txt" >> $GITHUB_ENV
82+
elif [ "${{ matrix.architecture }}" == "ppc64le" ]; then
83+
echo "CC=powerpc64le-linux-gnu-gcc" >> $GITHUB_ENV
84+
echo "CXX=powerpc64le-linux-gnu-g++" >> $GITHUB_ENV
85+
echo "CROSS_FILE=.github/crossfiles/ppc64le.txt" >> $GITHUB_ENV
86+
elif [ "${{ matrix.architecture }}" == "sparc64" ]; then
87+
echo "CC=sparc64-linux-gnu-gcc" >> $GITHUB_ENV
88+
echo "CXX=sparc64-linux-gnu-g++" >> $GITHUB_ENV
89+
echo "CROSS_FILE=.github/crossfiles/sparc64.txt" >> $GITHUB_ENV
90+
elif [ "${{ matrix.architecture }}" == "s390x" ]; then
91+
echo "CC=s390x-linux-gnu-gcc" >> $GITHUB_ENV
92+
echo "CXX=s390x-linux-gnu-g++" >> $GITHUB_ENV
93+
echo "CROSS_FILE=.github/crossfiles/s390x.txt" >> $GITHUB_ENV
94+
fi
95+
96+
- name: Install Meson
97+
run: |
98+
python -m pip install meson ninja
99+
100+
- name: Configure the Project
101+
run: |
102+
meson setup builddir --fatal-meson-warnings -Dwerror=true -Dwith_test=enabled -Dwarning_level=3 --cross-file $CROSS_FILE
103+
104+
- name: Build the Project
105+
run: |
106+
meson compile -C builddir
107+
108+
- name: Test the Project
109+
run: |
110+
meson test -C builddir -v --test-args='show --mode tree --verbose ci --result fail'

0 commit comments

Comments
 (0)