Commit 69d6b806 authored by tqcq's avatar tqcq
Browse files

feat support mips64

parent cf8ee4a2
Loading
Loading
Loading
Loading
+82 −0
Original line number Diff line number Diff line
---
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`
+30 −0
Original line number Diff line number Diff line
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")