From: Icenowy Zheng Date: Tue, 25 Mar 2025 08:29:56 +0000 (+0800) Subject: ci: add a GCC RISCV test target with latest Ubuntu and system toolchain X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1089bcdc833caa9ec4aab4592c68cb8f82f7dfff;p=thirdparty%2Fzlib-ng.git ci: add a GCC RISCV test target with latest Ubuntu and system toolchain Signed-off-by: Icenowy Zheng --- diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 9623e4f9..16944acf 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -298,6 +298,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 diff --git a/cmake/toolchain-riscv.cmake b/cmake/toolchain-riscv.cmake index 9cf8fdb7..241f2a7d 100644 --- a/cmake/toolchain-riscv.cmake +++ b/cmake/toolchain-riscv.cmake @@ -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/)