mirror of https://github.com/WebAssembly/wasi-sdk
ci: add riscv64-linux build via cross-compilation on ubuntu-24.04 (#621)
Rework of the riscv64-linux CI build to use CMake cross-compilation on a standard `ubuntu-24.04` runner, rather than a native RISE runner. ## What changed **`ci/docker/Dockerfile.riscv64-linux`** (new): - Ubuntu 24.04 base — has `crossbuild-essential-riscv64` in its package repos - Sets `CC=riscv64-linux-gnu-gcc` / `CXX=riscv64-linux-gnu-g++` so CMake detects cross-compilation and causes LLVM to build a native `llvm-tblgen` first, then cross-compile the rest of the toolchain - Sets `CARGO_TARGET_RISCV64_UNKNOWN_LINUX_GNU_LINKER` for Rust cross-builds - `XDG_CACHE_HOME=/tmp/cache` avoids write permission issues in the container **`ci/docker-build.sh`**: - Select `ci/docker/Dockerfile.<artifact>` if it exists, fall back to the default `ci/docker/Dockerfile` - Make the wasmtime volume mount conditional on `WASI_SDK_CI_SKIP_SYSROOT != 1` **`.github/workflows/main.yml`**: - New `riscv64-linux` matrix entry: `os: ubuntu-24.04`, `rust_target: riscv64-unknown-linux-gnu` - `cross_cmake_args: -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=riscv64 -DWASI_SDK_LLDB=OFF` - `WASI_SDK_CI_SKIP_SYSROOT: 1` - Handle `cross_cmake_args` in the cmake flags step ## Why WASI_SDK_CI_SKIP_SYSROOT The cross-compiled clang runs on riscv64, not on the x86_64 build host, so the wasm sysroot step is skipped. ## Why WASI_SDK_LLDB=OFF Avoids cross-compiling libedit and libxml2 in this first iteration; can be re-enabled as a follow-up. Closes #607 --------- Signed-off-by: Bruno Verachten <gounthar@gmail.com>pull/624/head
parent
62a1a88c3d
commit
42b7263534
@ -0,0 +1,28 @@
|
||||
# Ubuntu 24.04 is used here (rather than AlmaLinux 8) because it has
|
||||
# riscv64 cross-compilation packages in its repositories.
|
||||
FROM ubuntu:24.04
|
||||
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
curl \
|
||||
ca-certificates \
|
||||
crossbuild-essential-riscv64 \
|
||||
clang \
|
||||
lld \
|
||||
python3 \
|
||||
git \
|
||||
unzip \
|
||||
cmake \
|
||||
ninja-build \
|
||||
ccache \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Cargo needs an explicit linker when cross-compiling for riscv64.
|
||||
# The C/C++ cross-compiler is passed via CMAKE_C/CXX_COMPILER cmake flags
|
||||
# rather than CC/CXX env vars so that LLVM's native tblgen sub-build can
|
||||
# still find the host compiler (cmake cache vars are not inherited by
|
||||
# subprocess cmake invocations, but env vars are).
|
||||
ENV CARGO_TARGET_RISCV64GC_UNKNOWN_LINUX_GNU_LINKER=riscv64-linux-gnu-gcc
|
||||
|
||||
# Tell programs to cache in a location that both isn't a `--volume` mounted root
|
||||
# and isn't `/root` in the container as that won't be writable during the build.
|
||||
ENV XDG_CACHE_HOME=/tmp/cache
|
||||
Loading…
Reference in new issue