From 69d6b806380d0d3b328e736bc98606a07e7c84f5 Mon Sep 17 00:00:00 2001 From: tqcq <99722391+tqcq@users.noreply.github.com> Date: Fri, 29 Mar 2024 10:34:30 +0800 Subject: [PATCH] feat support mips64 --- .gitea/workflows/linux-mips64-gcc.yml | 82 +++++++++++++++++++ .../mips64el-linux-gnuabi64.toolchain.cmake | 30 +++++++ 2 files changed, 112 insertions(+) create mode 100644 .gitea/workflows/linux-mips64-gcc.yml create mode 100644 toolchains/mips64el-linux-gnuabi64.toolchain.cmake diff --git a/.gitea/workflows/linux-mips64-gcc.yml b/.gitea/workflows/linux-mips64-gcc.yml new file mode 100644 index 0000000..21b176d --- /dev/null +++ b/.gitea/workflows/linux-mips64-gcc.yml @@ -0,0 +1,82 @@ +--- +name: linux-mips64-gcc +on: + push: + paths: + - .gitea/workflows/linux-mips64-gcc.yml + - toolchains/mips64el-linux-gnuabi64.toolchain.cmake + - 3party/** + - include/** + - src/** + - tests/** + - CMakeLists.txt + - cmake/** + pull_request: + paths: + - .gitea/workflows/linux-mips64-gcc.yml + - toolchains/mips64el-linux-gnuabi64.toolchain.cmake + - 3party/** + - include/** + - src/** + - tests/** + - CMakeLists.txt + - cmake/** +concurrency: + group: linux-mips64-gcc-${{ github.ref }} + cancel-in-progress: true +permissions: [read] +jobs: + linux-gcc-mips64el: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v4 + with: + submodules: true + - name: cache-qemu + id: cache-qemu + uses: actions/cache@v3 + with: + path: qemu-install + key: qemu-mips64el-install-20220502-2 + - name: checkout-qemu + # uses: actions/checkout@v4 + if: steps.cache-qemu.outputs.cache-hit != 'true' + run: | + mkdir qemu && cd qemu + git init + git remote add origin https://gitlab.com/qemu-project/qemu.git + git fetch --depth=1 origin f5643914a9e8f79c606a76e6a9d7ea82a3fc3e65 + git checkout f5643914a9e8f79c606a76e6a9d7ea82a3fc3e65 + - name: install-qemu-build-deps + if: steps.cache-qemu.outputs.cache-hit != 'true' + run: | + sudo apt-get update -y + sudo apt-get install -y autoconf automake autotools-dev ninja-build + - name: qemu + if: steps.cache-qemu.outputs.cache-hit != 'true' + run: | + cd $GITHUB_WORKSPACE/qemu + ./configure --target-list=mips64el-linux-user --prefix=$GITHUB_WORKSPACE/qemu-install + make -j `nproc` + make install + - name: set-qemu-cache + uses: actions/cache/save@v3 + if: steps.cache-qemu.outputs.cache-hit != 'true' + with: + key: qemu-mips64el-install-20220502-2 + path: qemu-install + - name: mips64el-gnuabi64-toolchain + run: | + sudo apt-get update -y + sudo apt-get install -y cmake make g++-mips64el-linux-gnuabi64 + - name: configure + run: | + mkdir build && cd build + cmake .. -DULIB_BUILD_TESTS=ON -DCMAKE_TOOLCHAIN_FILE=../toolchains/mips64el-linux-gnuabi64.toolchain.cmake -DCMAKE_CROSSCOMPILING_EMULATOR="qemu-mips64el;-L;/usr/mips64el-linux-gnuabi64" + - name: build + run: cmake --build build --target all -j `nproc` + - name: test + run: |- + export PATH=$GITHUB_WORKSPACE/qemu-install/bin:$PATH + cd build + ctest --output-on-failure -j`nproc` diff --git a/toolchains/mips64el-linux-gnuabi64.toolchain.cmake b/toolchains/mips64el-linux-gnuabi64.toolchain.cmake new file mode 100644 index 0000000..62e188b --- /dev/null +++ b/toolchains/mips64el-linux-gnuabi64.toolchain.cmake @@ -0,0 +1,30 @@ +set(CMAKE_CROSSCOMPILING TRUE) +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR mips64el) + +set(CMAKE_C_COMPILER "mips64el-linux-gnuabi64-gcc") +set(CMAKE_CXX_COMPILER "mips64el-linux-gnuabi64-g++") + +if(NOT CMAKE_FIND_ROOT_PATH_MODE_PROGRAM) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +endif() +if(NOT CMAKE_FIND_ROOT_PATH_MODE_LIBRARY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +endif() +if(NOT CMAKE_FIND_ROOT_PATH_MODE_INCLUDE) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() +if(NOT CMAKE_FIND_ROOT_PATH_MODE_PACKAGE) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) +endif() + +set(CMAKE_C_FLAGS "-march=mips64") +set(CMAKE_CXX_FLAGS "-march=mips64") + +# cache flags +set(CMAKE_C_FLAGS + "${CMAKE_C_FLAGS}" + CACHE STRING "c flags") +set(CMAKE_CXX_FLAGS + "${CMAKE_CXX_FLAGS}" + CACHE STRING "c++ flags")