]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
ci: add a GCC RISCV test target with latest Ubuntu and system toolchain
authorIcenowy Zheng <uwu@icenowy.me>
Tue, 25 Mar 2025 08:29:56 +0000 (16:29 +0800)
committerHans Kristian Rosbach <hk-github@circlestorm.org>
Thu, 27 Mar 2025 17:16:33 +0000 (18:16 +0100)
Signed-off-by: Icenowy Zheng <uwu@icenowy.me>
.github/workflows/cmake.yml
cmake/toolchain-riscv.cmake

index f8e9932154b936fa3f4229701e42c25fb2404be8..f6d6979114502643ef3cc9f629e592048068d5cf 100644 (file)
@@ -305,6 +305,13 @@ jobs:
             cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64le-clang.cmake
             packages: qemu-user crossbuild-essential-ppc64el
 
+          - name: Ubuntu GCC RISC-V
+            os: ubuntu-latest
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-riscv.cmake
+            packages: qemu-user crossbuild-essential-riscv64
+            gcov-exec: riscv64-linux-gnu-gcov
+            codecov: ubuntu_gcc_riscv64
+
           - name: Ubuntu GCC SPARC64
             # qemu appears to be broken in newer versions of Ubuntu (see issue 1378)
             os: ubuntu-20.04
index 9cf8fdb7fec2fd9085ad66a0f2b4d030bac382b2..241f2a7d711947027c0bab0b9589695cf685672f 100644 (file)
@@ -1,28 +1,25 @@
+set(CMAKE_SYSTEM_NAME Linux)
+set(CMAKE_SYSTEM_PROCESSOR riscv64)
+set(CMAKE_SYSTEM_VERSION 1)
+
+set(CMAKE_C_COMPILER_TARGET riscv64-linux-gnu)
+set(CMAKE_CXX_COMPILER_TARGET riscv64-linux-gnu)
+
 set(CMAKE_CROSSCOMPILING TRUE)
-set(CMAKE_SYSTEM_NAME "Linux")
-set(CMAKE_SYSTEM_PROCESSOR "riscv64")
+set(CMAKE_CROSSCOMPILING_EMULATOR qemu-riscv64 -cpu rv64,zba=true,zbb=true,zbc=true,zbs=true,v=true,vlen=512,elen=64,vext_spec=v1.0 -L /usr/${CMAKE_C_COMPILER_TARGET}/)
 
-# Avoid to use system path for cross-compile
-set(CMAKE_FIND_USE_CMAKE_SYSTEM_PATH FALSE)
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
 
-set(TOOLCHAIN_PATH "" CACHE STRING "The toolchain path.")
-if(NOT TOOLCHAIN_PATH)
-  set(TOOLCHAIN_PATH ${CMAKE_SOURCE_DIR}/prebuilt-riscv-toolchain-qemu/riscv-clang)
+find_program(C_COMPILER_FULL_PATH NAMES ${CMAKE_C_COMPILER_TARGET}-gcc)
+if(NOT C_COMPILER_FULL_PATH)
+    message(FATAL_ERROR "Cross-compiler for ${CMAKE_C_COMPILER_TARGET} not found")
 endif()
+set(CMAKE_C_COMPILER ${C_COMPILER_FULL_PATH})
 
-set(TOOLCHAIN_PREFIX "riscv64-unknown-linux-gnu-" CACHE STRING "The toolchain prefix.")
-set(QEMU_PATH "" CACHE STRING "The qemu path.")
-if(NOT QEMU_PATH)
-  set(QEMU_PATH ${CMAKE_SOURCE_DIR}/prebuilt-riscv-toolchain-qemu/riscv-qemu/bin/qemu-riscv64)
+find_program(CXX_COMPILER_FULL_PATH NAMES g++-${CMAKE_CXX_COMPILER_TARGET} ${CMAKE_CXX_COMPILER_TARGET}-g++)
+if(CXX_COMPILER_FULL_PATH)
+    set(CMAKE_CXX_COMPILER ${CXX_COMPILER_FULL_PATH})
 endif()
-
-# toolchain setting
-set(CMAKE_C_COMPILER "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}clang")
-set(CMAKE_CXX_COMPILER "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}clang++")
-
-# disable auto-vectorizer
-add_compile_options(-fno-vectorize -fno-slp-vectorize)
-
-# emulator setting
-set(QEMU_CPU_OPTION "rv64,zba=true,zbb=true,zbc=true,zbs=true,v=true,vlen=512,elen=64,vext_spec=v1.0")
-set(CMAKE_CROSSCOMPILING_EMULATOR ${QEMU_PATH} -cpu ${QEMU_CPU_OPTION} -L ${TOOLCHAIN_PATH}/sysroot/)