Skip to content

Commit d354abe

Browse files
authored
chore(workflow): run CI on both x86_64 and aarch64 Linux (#39)
* chore(workflow): run CI on both x86_64 and aarch64 Linux * fix mujoco downloading * refactor around matrix & specify `C_INCLUDE_PATH`, `CPLUS_INCLUDE_PATH` * considering cross-building on ubuntu-latest = x86_64 * when aarch64 `export BINDGEN_EXTRA_CLANG_ARGS=-I/usr/aarch64-linux-gnu/include` * when aarch64 install g++-aarch64-linux-gnu * prevent if-fail * try `sudo dpkg --add-architecture arm64`, `:arm64` and `PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig` * try `libglfw3` apt package * fill missing `:arm64` * try source build glfw with conditional dependency libs * try conditional cmake(\:arm64)? * use `-DCMAKE_C(XX)?_COMPILER=aarch64-linux-gnu-g(cc|++)` * try wayland-protocols * set -x * try restricting security repository to amd64 * ignore apt update error * add ports to /etc/apt/sources.list.d/ports.list * `:arm64` only for `*-dev` * run `echo "PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig" >> $GITHUB_ENV` in `setup` step * add `-DCMAKE_EXE_LINKER_FLAGS=-lm` to cmake flags * use `-DLINK_FLAGS="-lm"` * `="-lm"` instead of `=-lm` for `-DCMAKE_EXE_LINKER_FLAGS` * specify ` -DGLFW_BUILD_EXAMPLES=OFF -DGLFW_BUILD_TESTS=OFF -DGLFW_BUILD_DOCS=OFF` for cmake * retain original $PKG_CONFIG_PATH * improve PKG_CONFIG_PATH * set PKG_CONFIG=aarch64-linux-gnu-pkg-config * apt install pkg-config when aarch64 * split runner * use needs's output for job-level if-condition * fix around strategy * unify tests * remove unused comments & refine conditional filename
1 parent 92b102b commit d354abe

1 file changed

Lines changed: 35 additions & 20 deletions

File tree

.github/workflows/CI.yml

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,22 @@ jobs:
1313

1414
strategy:
1515
matrix:
16-
toolchain: [stable, nightly]
16+
toolchain: ['stable', 'nightly']
17+
arch: ['x86_64', 'aarch64']
1718

1819
steps:
1920
- uses: actions/checkout@v5
2021

2122
- run: |
2223
rustup update
2324
rustup default ${{ matrix.toolchain }}
24-
rustup component add rustfmt ### required for the build script to work ###
25+
rustup target add ${{ matrix.arch }}-unknown-linux-gnu
26+
rustup component add rustfmt ### required for the build script to work ###
27+
[ "${{ matrix.arch }}" = 'aarch64' ] && sudo apt update && sudo apt install -y g++-aarch64-linux-gnu || :
2528
2629
- name: check fails without MUJOCO_DIR
30+
env:
31+
CARGO_BUILD_TARGET: ${{ matrix.arch }}-unknown-linux-gnu
2732
run: |
2833
if cargo build; then
2934
echo 'cargo check succeeded without mujoco, which is unexpected.'
@@ -36,12 +41,14 @@ jobs:
3641
run: |
3742
mkdir -p $HOME/.mujoco
3843
cd $HOME/.mujoco
39-
wget https://github.com/google-deepmind/mujoco/releases/download/3.3.2/mujoco-3.3.2-linux-x86_64.tar.gz
40-
tar -xzf mujoco-3.3.2-linux-x86_64.tar.gz
44+
wget https://github.com/google-deepmind/mujoco/releases/download/3.3.2/mujoco-3.3.2-linux-${{ matrix.arch }}.tar.gz
45+
tar -xzf mujoco-3.3.2-linux-${{ matrix.arch }}.tar.gz
4146
echo "MUJOCO_DIR=$HOME/.mujoco/mujoco-3.3.2" >> $GITHUB_ENV
4247
echo "LD_LIBRARY_PATH=$HOME/.mujoco/mujoco-3.3.2/lib:$LD_LIBRARY_PATH" >> $GITHUB_ENV
4348
4449
- name: check succeeds with MUJOCO_DIR
50+
env:
51+
CARGO_BUILD_TARGET: ${{ matrix.arch }}-unknown-linux-gnu
4552
run: |
4653
if cargo build; then
4754
echo 'cargo check succeeded with mujoco, as expected.'
@@ -50,36 +57,44 @@ jobs:
5057
echo "[DEBUG] bindgen.rs content:" && cat ./src/bindgen.rs
5158
exit 1
5259
fi
53-
60+
5461
test:
55-
runs-on: ubuntu-latest
56-
5762
strategy:
5863
matrix:
59-
toolchain: [stable, nightly]
60-
64+
toolchain: ['stable', 'nightly']
65+
os: ['ubuntu-24.04', 'ubuntu-24.04-arm']
66+
67+
runs-on: ${{ matrix.os }}
68+
6169
steps:
62-
- uses: actions/checkout@v4
63-
64-
- name: setup
70+
- uses: actions/checkout@v5
71+
72+
- name: setup Rust
6573
run: |
6674
rustup update
6775
rustup default ${{ matrix.toolchain }}
68-
rustup component add rustfmt ### required for the build script to work ###
69-
mkdir -p $HOME/.mujoco
70-
cd $HOME/.mujoco
71-
wget https://github.com/google-deepmind/mujoco/releases/download/3.3.2/mujoco-3.3.2-linux-x86_64.tar.gz
72-
tar -xzf mujoco-3.3.2-linux-x86_64.tar.gz
76+
rustup component add rustfmt ### required for the build script to work ###
77+
78+
- name: setup MuJoCo
79+
run: |
80+
if [ "${{ matrix.os }}" = 'ubuntu-24.04' ]; then
81+
MUJOCO_FILENAME='mujoco-3.3.2-linux-x86_64.tar.gz'
82+
elif [ "${{ matrix.os }}" = 'ubuntu-24.04-arm' ]; then
83+
MUJOCO_FILENAME='mujoco-3.3.2-linux-aarch64.tar.gz'
84+
fi
85+
mkdir -p $HOME/.mujoco && cd $HOME/.mujoco
86+
wget https://github.com/google-deepmind/mujoco/releases/download/3.3.2/$MUJOCO_FILENAME
87+
tar -xzf $MUJOCO_FILENAME
7388
echo "MUJOCO_DIR=$HOME/.mujoco/mujoco-3.3.2" >> $GITHUB_ENV
7489
echo "LD_LIBRARY_PATH=$HOME/.mujoco/mujoco-3.3.2/lib:$LD_LIBRARY_PATH" >> $GITHUB_ENV
75-
90+
7691
- name: setup additional dependencies for examples
7792
run: |
78-
sudo apt update && sudo apt install -y cmake build-essential libwayland-dev libxkbcommon-x11-dev libgl1-mesa-dev libxcursor-dev libxi-dev libxinerama-dev libxrandr-dev
7993
git clone https://github.com/glfw/glfw.git
8094
mkdir -p glfw/build && cd glfw/build
95+
sudo apt update && sudo apt install -y cmake build-essential libwayland-dev libxkbcommon-x11-dev libgl1-mesa-dev libxcursor-dev libxi-dev libxinerama-dev libxrandr-dev
8196
cmake .. && make && sudo make install
82-
97+
8398
- name: run tests
8499
run: |
85100
cargo test --lib

0 commit comments

Comments
 (0)