diff --git a/.github/workflows/linux-mips-cpu-gcc.yml b/.github/workflows/linux-mips-cpu-gcc.yml new file mode 100644 index 000000000..73cbb2a6f --- /dev/null +++ b/.github/workflows/linux-mips-cpu-gcc.yml @@ -0,0 +1,88 @@ +name: linux-mips-cpu-gcc +on: [push, pull_request] +jobs: + linux-gcc-mipsel: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + + - name: cache-qemu + id: cache-qemu + uses: actions/cache@v1 + with: + path: qemu-install + key: qemu-mipsel-install-1 + - name: checkout-qemu + if: steps.cache-qemu.outputs.cache-hit != 'true' + uses: actions/checkout@v2 + with: + repository: qemu/qemu + path: qemu + ref: 8746309137ba470d1b2e8f5ce86ac228625db940 + - name: qemu + if: steps.cache-qemu.outputs.cache-hit != 'true' + run: | + cd qemu + ./configure --prefix=install --target-list=mipsel-linux-user --disable-system + make -j2 + make install + cp -r mipsel-linux-user/install $GITHUB_WORKSPACE/qemu-install + + - name: mipsel-gnu-toolchain + run: | + sudo apt-get update + sudo apt-get install g++-mipsel-linux-gnu + + - name: configure + run: mkdir build && cd build && cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/mipsel-linux-gnu.toolchain.cmake -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF .. + - name: build + run: cmake --build build -j 2 + + - name: test + run: | + export PATH=$GITHUB_WORKSPACE/qemu-install/bin:$PATH + cd build + TESTS_EXECUTABLE_LOADER=qemu-mipsel TESTS_EXECUTABLE_LOADER_ARGUMENTS="-L;/usr/mipsel-linux-gnu" ctest --output-on-failure -j 2 + + linux-gcc-mipsisa32r6el: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + + - name: cache-qemu + id: cache-qemu + uses: actions/cache@v1 + with: + path: qemu-install + key: qemu-mipsel-install-1 + - name: checkout-qemu + if: steps.cache-qemu.outputs.cache-hit != 'true' + uses: actions/checkout@v2 + with: + repository: qemu/qemu + path: qemu + ref: 8746309137ba470d1b2e8f5ce86ac228625db940 + - name: qemu + if: steps.cache-qemu.outputs.cache-hit != 'true' + run: | + cd qemu + ./configure --prefix=install --target-list=mipsel-linux-user --disable-system + make -j2 + make install + cp -r mipsel-linux-user/install $GITHUB_WORKSPACE/qemu-install + + - name: mipsisa32r6el-gnu-toolchain + run: | + sudo apt-get update + sudo apt-get install g++-mipsisa32r6el-linux-gnu + + - name: configure + run: mkdir build && cd build && cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/mipsisa32r6el-linux-gnu.toolchain.cmake -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF .. + - name: build + run: cmake --build build -j 2 + + - name: test + run: | + export PATH=$GITHUB_WORKSPACE/qemu-install/bin:$PATH + cd build + TESTS_EXECUTABLE_LOADER=qemu-mipsel TESTS_EXECUTABLE_LOADER_ARGUMENTS="-L;/usr/mipsisa32r6el-linux-gnu" ctest --output-on-failure -j 2 diff --git a/.github/workflows/linux-mips32-mti.yml b/.github/workflows/linux-mips32-mti.yml deleted file mode 100644 index c2ad69c9d..000000000 --- a/.github/workflows/linux-mips32-mti.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: linux-mips32-mti -on: [push, pull_request] -jobs: - linux-mips-mti: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: mips-mti-compiler - continue-on-error: true - run: | - wget https://codescape.mips.com/components/toolchain/2019.09-01/Codescape.GNU.Tools.Package.2019.09-01.for.MIPS.MTI.Linux.CentOS-6.x86_64.tar.gz -O mips-mti-linux-gnu.tar.gz - tar -zxf mips-mti-linux-gnu.tar.gz - - name: configure - continue-on-error: true - run: | - export PATH=`pwd`/mips-mti-linux-gnu/2019.09-01/bin:$PATH - mkdir build && cd build && cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/mips-mti-linux-gnu.toolchain.cmake -DNCNN_BUILD_TOOLS=OFF .. - - name: build - continue-on-error: true - run: cmake --build build -j 2 diff --git a/.github/workflows/linux-mips64-cpu-gcc.yml b/.github/workflows/linux-mips64-cpu-gcc.yml new file mode 100644 index 000000000..ade9bfdba --- /dev/null +++ b/.github/workflows/linux-mips64-cpu-gcc.yml @@ -0,0 +1,88 @@ +name: linux-mips64-cpu-gcc +on: [push, pull_request] +jobs: + linux-gcc-mips64el: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + + - name: cache-qemu + id: cache-qemu + uses: actions/cache@v1 + with: + path: qemu-install + key: qemu-mips64el-install-1 + - name: checkout-qemu + if: steps.cache-qemu.outputs.cache-hit != 'true' + uses: actions/checkout@v2 + with: + repository: qemu/qemu + path: qemu + ref: 8746309137ba470d1b2e8f5ce86ac228625db940 + - name: qemu + if: steps.cache-qemu.outputs.cache-hit != 'true' + run: | + cd qemu + ./configure --prefix=install --target-list=mips64el-linux-user --disable-system + make -j2 + make install + cp -r mips64el-linux-user/install $GITHUB_WORKSPACE/qemu-install + + - name: mips64el-gnuabi64-toolchain + run: | + sudo apt-get update + sudo apt-get install g++-mips64el-linux-gnuabi64 + + - name: configure + run: mkdir build && cd build && cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/mips64el-linux-gnuabi64.toolchain.cmake -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF .. + - name: build + run: cmake --build build -j 2 + + - name: test + run: | + export PATH=$GITHUB_WORKSPACE/qemu-install/bin:$PATH + cd build + TESTS_EXECUTABLE_LOADER=qemu-mips64el TESTS_EXECUTABLE_LOADER_ARGUMENTS="-L;/usr/mips64el-linux-gnuabi64" ctest --output-on-failure -j 2 + + linux-gcc-mipsisa64r6el: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + + - name: cache-qemu + id: cache-qemu + uses: actions/cache@v1 + with: + path: qemu-install + key: qemu-mips64el-install-1 + - name: checkout-qemu + if: steps.cache-qemu.outputs.cache-hit != 'true' + uses: actions/checkout@v2 + with: + repository: qemu/qemu + path: qemu + ref: 8746309137ba470d1b2e8f5ce86ac228625db940 + - name: qemu + if: steps.cache-qemu.outputs.cache-hit != 'true' + run: | + cd qemu + ./configure --prefix=install --target-list=mips64el-linux-user --disable-system + make -j2 + make install + cp -r mips64el-linux-user/install $GITHUB_WORKSPACE/qemu-install + + - name: mipsisa64r6el-gnuabi64-toolchain + run: | + sudo apt-get update + sudo apt-get install g++-mipsisa64r6el-linux-gnuabi64 + + - name: configure + run: mkdir build && cd build && cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/mipsisa64r6el-linux-gnuabi64.toolchain.cmake -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF .. + - name: build + run: cmake --build build -j 2 + + - name: test + run: | + export PATH=$GITHUB_WORKSPACE/qemu-install/bin:$PATH + cd build + TESTS_EXECUTABLE_LOADER=qemu-mips64el TESTS_EXECUTABLE_LOADER_ARGUMENTS="-L;/usr/mipsisa64r6el-linux-gnuabi64" ctest --output-on-failure -j 2 diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml index e6445735e..a6477537d 100644 --- a/.github/workflows/test-coverage.yml +++ b/.github/workflows/test-coverage.yml @@ -230,3 +230,117 @@ jobs: with: token: ${{ secrets.CODECOV_TOKEN }} file: build/lcov.info + + linux-gcc-mipsisa32r6el: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + + - name: lcov + run: sudo apt-get install lcov + - name: cache-qemu + id: cache-qemu + uses: actions/cache@v1 + with: + path: qemu-install + key: qemu-mipsel-install-1 + - name: checkout-qemu + if: steps.cache-qemu.outputs.cache-hit != 'true' + uses: actions/checkout@v2 + with: + repository: qemu/qemu + path: qemu + ref: 8746309137ba470d1b2e8f5ce86ac228625db940 + - name: qemu + if: steps.cache-qemu.outputs.cache-hit != 'true' + run: | + cd qemu + ./configure --prefix=install --target-list=mipsel-linux-user --disable-system + make -j2 + make install + cp -r mipsel-linux-user/install $GITHUB_WORKSPACE/qemu-install + + - name: mipsisa32r6el-gnu-toolchain + run: | + sudo apt-get update + sudo apt-get install g++-mipsisa32r6el-linux-gnu + + - name: configure + run: mkdir build && cd build && cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/mipsisa32r6el-linux-gnu.toolchain.cmake -DCMAKE_BUILD_TYPE=debug -DNCNN_COVERAGE=ON -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF .. + - name: build + run: cmake --build build -j 2 + + - name: test + run: | + export PATH=$GITHUB_WORKSPACE/qemu-install/bin:$PATH + cd build + TESTS_EXECUTABLE_LOADER=qemu-mipsel TESTS_EXECUTABLE_LOADER_ARGUMENTS="-L;/usr/mipsisa32r6el-linux-gnu" ctest --output-on-failure -j 2 + + - name: lcov-collect + run: | + cd build + lcov -d ./src -c -o lcov.info + lcov -r lcov.info '/usr/*' -o lcov.info + lcov --list lcov.info + - name: codecov + uses: codecov/codecov-action@v1.0.11 + with: + token: ${{ secrets.CODECOV_TOKEN }} + file: build/lcov.info + + linux-gcc-mipsisa64r6el: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + + - name: lcov + run: sudo apt-get install lcov + - name: cache-qemu + id: cache-qemu + uses: actions/cache@v1 + with: + path: qemu-install + key: qemu-mips64el-install-1 + - name: checkout-qemu + if: steps.cache-qemu.outputs.cache-hit != 'true' + uses: actions/checkout@v2 + with: + repository: qemu/qemu + path: qemu + ref: 8746309137ba470d1b2e8f5ce86ac228625db940 + - name: qemu + if: steps.cache-qemu.outputs.cache-hit != 'true' + run: | + cd qemu + ./configure --prefix=install --target-list=mips64el-linux-user --disable-system + make -j2 + make install + cp -r mips64el-linux-user/install $GITHUB_WORKSPACE/qemu-install + + - name: mipsisa64r6el-gnuabi64-toolchain + run: | + sudo apt-get update + sudo apt-get install g++-mipsisa64r6el-linux-gnuabi64 + + - name: configure + run: mkdir build && cd build && cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/mipsisa64r6el-linux-gnuabi64.toolchain.cmake -DCMAKE_BUILD_TYPE=debug -DNCNN_COVERAGE=ON -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF .. + - name: build + run: cmake --build build -j 2 + + - name: test + run: | + export PATH=$GITHUB_WORKSPACE/qemu-install/bin:$PATH + cd build + TESTS_EXECUTABLE_LOADER=qemu-mips64el TESTS_EXECUTABLE_LOADER_ARGUMENTS="-L;/usr/mipsisa64r6el-linux-gnuabi64" ctest --output-on-failure -j 2 + + - name: lcov-collect + run: | + cd build + lcov -d ./src -c -o lcov.info + lcov -r lcov.info '/usr/*' -o lcov.info + lcov --list lcov.info + - name: codecov + uses: codecov/codecov-action@v1.0.11 + with: + token: ${{ secrets.CODECOV_TOKEN }} + file: build/lcov.info diff --git a/toolchains/mips64el-linux-gnuabi64.toolchain.cmake b/toolchains/mips64el-linux-gnuabi64.toolchain.cmake new file mode 100644 index 000000000..4d41abc71 --- /dev/null +++ b/toolchains/mips64el-linux-gnuabi64.toolchain.cmake @@ -0,0 +1,16 @@ +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++") + +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_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") diff --git a/toolchains/mipsel-linux-gnu.toolchain.cmake b/toolchains/mipsel-linux-gnu.toolchain.cmake new file mode 100644 index 000000000..3c9c5d924 --- /dev/null +++ b/toolchains/mipsel-linux-gnu.toolchain.cmake @@ -0,0 +1,16 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR mipsel) + +set(CMAKE_C_COMPILER "mipsel-linux-gnu-gcc") +set(CMAKE_CXX_COMPILER "mipsel-linux-gnu-g++") + +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_C_FLAGS "-march=mips32") +set(CMAKE_CXX_FLAGS "-march=mips32") + +# cache flags +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags") diff --git a/toolchains/mipsisa32r6-linux-gnu.toolchain.cmake b/toolchains/mipsisa32r6-linux-gnu.toolchain.cmake deleted file mode 100644 index 8ac887afb..000000000 --- a/toolchains/mipsisa32r6-linux-gnu.toolchain.cmake +++ /dev/null @@ -1,19 +0,0 @@ -# set cross-compiled system type, it's better not use the type which cmake cannot recognized. -SET ( CMAKE_SYSTEM_NAME Linux ) -SET ( CMAKE_SYSTEM_PROCESSOR mips ) -# make sure mipsisa32r6-linux-gnu-gcc and mipsisa32r6-linux-gnu-g++ can be found in $PATH: -SET ( CMAKE_C_COMPILER "mipsisa32r6-linux-gnu-gcc" ) -SET ( CMAKE_CXX_COMPILER "mipsisa32r6-linux-gnu-g++" ) - -# set searching rules for cross-compiler -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_C_FLAGS} and ${CMAKE_CXX_FLAGS}flag for cross-compiled process -SET ( CMAKE_CXX_FLAGS "-std=c++11 -march=mips32r6 -mmsa -fopenmp ${CMAKE_CXX_FLAGS}" ) - -# other settings -add_definitions(-D__MIPS_MSA) -add_definitions(-DLINUX) -SET ( LINUX true) diff --git a/toolchains/mipsisa32r6el-linux-gnu.toolchain.cmake b/toolchains/mipsisa32r6el-linux-gnu.toolchain.cmake new file mode 100644 index 000000000..156fb3b97 --- /dev/null +++ b/toolchains/mipsisa32r6el-linux-gnu.toolchain.cmake @@ -0,0 +1,16 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR mipsisa32r6el) + +set(CMAKE_C_COMPILER "mipsisa32r6el-linux-gnu-gcc") +set(CMAKE_CXX_COMPILER "mipsisa32r6el-linux-gnu-g++") + +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_C_FLAGS "-march=mips32r6") +set(CMAKE_CXX_FLAGS "-march=mips32r6") + +# cache flags +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags") diff --git a/toolchains/mipsisa64r6el-linux-gnuabi64.toolchain.cmake b/toolchains/mipsisa64r6el-linux-gnuabi64.toolchain.cmake new file mode 100644 index 000000000..baf18e033 --- /dev/null +++ b/toolchains/mipsisa64r6el-linux-gnuabi64.toolchain.cmake @@ -0,0 +1,16 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR mipsisa64r6el) + +set(CMAKE_C_COMPILER "mipsisa64r6el-linux-gnuabi64-gcc") +set(CMAKE_CXX_COMPILER "mipsisa64r6el-linux-gnuabi64-g++") + +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_C_FLAGS "-march=mips64r6 -mmsa -mhard-float -mfp64 -mnan=2008") +set(CMAKE_CXX_FLAGS "-march=mips64r6 -mmsa -mhard-float -mfp64 -mnan=2008") + +# cache flags +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags")