From: Vladislav Shchapov Date: Sun, 8 Jun 2025 16:53:47 +0000 (+0500) Subject: Add support for cross-compiling for LoongArch64 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3f88416223c11aad5cf2b3be570a68f65e81958e;p=thirdparty%2Fzlib-ng.git Add support for cross-compiling for LoongArch64 Signed-off-by: Vladislav Shchapov --- diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 7a09b5bb..e3c4d5e2 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -310,6 +310,14 @@ jobs: cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-riscv-clang.cmake packages: qemu-user crossbuild-essential-riscv64 + - name: Ubuntu GCC 14 LoongArch64 + os: ubuntu-latest + cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-loongarch64-gcc-14.cmake -DWITH_BENCHMARKS=ON + packages: qemu-user gcc-14-loongarch64-linux-gnu g++-14-loongarch64-linux-gnu libc-dev-loong64-cross + ldflags: -static + gcov-exec: loongarch64-linux-gnu-gcov-14 + codecov: ubuntu_gcc14_loongarch64 + - name: Ubuntu GCC SPARC64 os: ubuntu-latest cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-sparc64.cmake diff --git a/.github/workflows/configure.yml b/.github/workflows/configure.yml index b46aa1e3..2f3e9d7a 100644 --- a/.github/workflows/configure.yml +++ b/.github/workflows/configure.yml @@ -249,6 +249,24 @@ jobs: chost: riscv64-linux-gnu packages: qemu-user crossbuild-essential-riscv64 + - name: Ubuntu GCC 14 LoongArch64 + os: ubuntu-latest + compiler: loongarch64-linux-gnu-gcc-14 + configure-args: --warn --static + chost: loongarch64-linux-gnu + packages: qemu-user gcc-14-loongarch64-linux-gnu g++-14-loongarch64-linux-gnu libc-dev-loong64-cross + cflags: -static + ldflags: -static + + - name: Ubuntu GCC 14 LoongArch64 Compat No Opt + os: ubuntu-latest + compiler: loongarch64-linux-gnu-gcc-14 + configure-args: --warn --static --zlib-compat --without-optimizations --without-new-strategies + chost: loongarch64-linux-gnu + packages: qemu-user gcc-14-loongarch64-linux-gnu g++-14-loongarch64-linux-gnu libc-dev-loong64-cross + cflags: -static + ldflags: -static + steps: - name: Checkout repository uses: actions/checkout@v4 diff --git a/cmake/toolchain-loongarch64-gcc-14.cmake b/cmake/toolchain-loongarch64-gcc-14.cmake new file mode 100644 index 00000000..c551abc6 --- /dev/null +++ b/cmake/toolchain-loongarch64-gcc-14.cmake @@ -0,0 +1,25 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR loongarch64) +set(CMAKE_SYSTEM_VERSION 1) + +set(CMAKE_C_COMPILER_TARGET loongarch64-linux-gnu) +set(CMAKE_CXX_COMPILER_TARGET loongarch64-linux-gnu) + +set(CMAKE_CROSSCOMPILING TRUE) +set(CMAKE_CROSSCOMPILING_EMULATOR qemu-loongarch64 -cpu la464-loongarch-cpu -L /usr/${CMAKE_C_COMPILER_TARGET}/) + +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) + +find_program(C_COMPILER_FULL_PATH NAMES ${CMAKE_C_COMPILER_TARGET}-gcc-14) +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}) + +find_program(CXX_COMPILER_FULL_PATH NAMES g++-14-${CMAKE_CXX_COMPILER_TARGET} ${CMAKE_CXX_COMPILER_TARGET}-g++-14) +if(CXX_COMPILER_FULL_PATH) + set(CMAKE_CXX_COMPILER ${CXX_COMPILER_FULL_PATH}) +endif()