From 3f4b72634826552bb2554a5782977143f6daa61d Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Fri, 29 May 2026 18:17:25 +0100 Subject: [PATCH] ci: add build coverage for riscv64 This is already a primary architecture in Ubuntu, and more distributions are adding support for it. It's too slow for emulation, but we can at least verify that compilation works. Use the arm worker, for two reasons: - it is already set up with ports.ubuntu.com so we don't have to muck with apt sources manually - it is used a lot less than the x86 worker --- .github/workflows/build-test.sh | 3 +++ .github/workflows/build-test.yml | 3 +++ .github/workflows/riscv64-gcc.cross | 21 +++++++++++++++++++++ 3 files changed, 27 insertions(+) create mode 100644 .github/workflows/riscv64-gcc.cross diff --git a/.github/workflows/build-test.sh b/.github/workflows/build-test.sh index 784340ec45..9c3d2e7338 100755 --- a/.github/workflows/build-test.sh +++ b/.github/workflows/build-test.sh @@ -96,6 +96,9 @@ if [[ -n "$CROSS_ARCH" ]]; then armhf) triplet=arm-linux-gnueabihf ;; + riscv64) + triplet=riscv64-linux-gnu + ;; *) fatal "Unsupported cross architecture: $CROSS_ARCH" ;; diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 2596b3edb5..a5b2027139 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -42,6 +42,9 @@ jobs: - env: { COMPILER: "gcc", COMPILER_VERSION: "13", LINKER: "bfd", CROSS_ARCH: "armhf" } runner: [ ubuntu-24.04-arm ] python-version: '' + - env: { COMPILER: "gcc", COMPILER_VERSION: "13", LINKER: "bfd", CROSS_ARCH: "riscv64" } + runner: [ ubuntu-24.04-arm ] + python-version: '' - env: { COMPILER: "clang", COMPILER_VERSION: "18", LINKER: "lld" } runner: [ ubuntu-24.04-s390x ] python-version: '' diff --git a/.github/workflows/riscv64-gcc.cross b/.github/workflows/riscv64-gcc.cross new file mode 100644 index 0000000000..8096e45192 --- /dev/null +++ b/.github/workflows/riscv64-gcc.cross @@ -0,0 +1,21 @@ +[binaries] +c = 'riscv64-linux-gnu-gcc' +cpp = 'riscv64-linux-gnu-g++' +ar = 'riscv64-linux-gnu-gcc-ar' +nm = 'riscv64-linux-gnu-gcc-nm' +strip = 'riscv64-linux-gnu-strip' +pkgconfig = 'pkg-config' + +[properties] +needs_exe_wrapper = true +pkg_config_libdir = '/usr/lib/riscv64-linux-gnu/pkgconfig:/usr/share/pkgconfig' +c_args = ['-O2', '-pipe', '-g', '-feliminate-unused-debug-types'] +c_link_args = ['-fuse-ld=bfd', '-Wl,-O1', '-Wl,--hash-style=gnu', '-Wl,--as-needed', '-Wl,-z,relro,-z,now,-z,noexecstack'] +cpp_args = [] +cpp_link_args = ['-fuse-ld=bfd', '-Wl,-O1', '-Wl,--hash-style=gnu', '-Wl,--as-needed', '-Wl,-z,relro,-z,now,-z,noexecstack'] + +[host_machine] +system = 'linux' +cpu_family = 'riscv64' +cpu = 'riscv64' +endian = 'little'