Merge branch 'feature/ncnn-backend' of https://github.com/kendryte/nn… #8549
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: compiler-build | |
on: [push, pull_request] | |
concurrency: | |
group: compiler-build-${{ github.ref }} | |
cancel-in-progress: ${{ github.ref != 'refs/heads/master' && !startsWith(github.ref, 'refs/heads/release/') }} | |
env: | |
NUGET_CERT_REVOCATION_MODE: offline | |
NUGET_PACKAGES: ${{ github.workspace }}/.nuget/packages | |
jobs: | |
build-native: | |
name: build-native-${{matrix.config.name}} | |
runs-on: ${{matrix.config.os}} | |
strategy: | |
matrix: | |
config: | |
- {name: aarch64-macos, os: macos-14, cmakeArgs: '', buildType: Release} | |
- {name: x86_64-linux, os: ubuntu-latest, cmakeArgs: '', buildType: Release} | |
- {name: x86_64-windows, os: windows-latest, arch: x64, cmakeArgs: -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl, buildType: Release} | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: seanmiddleditch/gha-setup-ninja@master | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.10' | |
- name: Set up build environment (Windows, Visual Studio) | |
uses: ilammy/msvc-dev-cmd@v1 | |
with: | |
arch: ${{matrix.config.arch}} | |
if: runner.os == 'Windows' | |
- name: Install Conan | |
shell: bash | |
run: | | |
pip install conan==1.64 | |
- name: Configure Conan (Linux) | |
run: | | |
conan profile new default --detect | |
conan profile update settings.compiler.libcxx=libstdc++11 default | |
echo "CC=gcc-10" >> $GITHUB_ENV | |
echo "CXX=g++-10" >> $GITHUB_ENV | |
if: runner.os == 'Linux' | |
- name: Configure Conan (Macos) | |
run: | | |
conan config init | |
sed -i '' 's/xtensalx7]/xtensalx7, arm64]/g' ~/.conan/settings.yml | |
sed -i '' 's/"14.0"]/"14.0", "15"]/g' ~/.conan/settings.yml | |
if: runner.os == 'Macos' | |
- name: Configure CMake | |
shell: bash | |
run: | | |
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${{matrix.config.buildType}} ${{matrix.config.cmakeArgs}} -DPython3_ROOT_DIR=${pythonLocation} | |
- name: Build & Install | |
run: | | |
cmake --build build --config ${{matrix.config.buildType}} | |
cmake --install build --prefix install | |
- name: Upload nncase Native Build Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: nncase-native-${{matrix.config.name}} | |
path: ${{github.workspace}}/install | |
if-no-files-found: error | |
build-compiler: | |
needs: [build-native] | |
name: build-${{matrix.config.name}} | |
runs-on: ${{matrix.config.os}} | |
strategy: | |
matrix: | |
dotnet-version: ['7.0'] | |
config: | |
- {name: aarch64-macos, os: macos-14, shell: bash, rid: osx-arm64, buildType: Release} | |
- {name: x86_64-linux, os: ubuntu-latest, shell: bash, rid: linux-x64, buildType: Release} | |
- {name: x86_64-windows, os: windows-latest, arch: x64, shell: bash, rid: win-x64, buildType: Release} | |
steps: | |
- uses: actions/checkout@v2 | |
- uses: seanmiddleditch/gha-setup-ninja@master | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v1 | |
with: | |
dotnet-version: ${{matrix.dotnet-version}} | |
- name: Cache NuGet packages | |
uses: actions/cache@v3 | |
with: | |
path: ${{ github.workspace }}/.nuget/packages | |
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }} | |
restore-keys: | | |
${{ runner.os }}-nuget- | |
- name: Install nncase native Artifact | |
uses: actions/[email protected] | |
with: | |
name: nncase-native-${{matrix.config.name}} | |
path: ${{github.workspace}}/install | |
- name: Build | |
run: | | |
dotnet restore -r ${{matrix.config.rid}} | |
dotnet build -c ${{matrix.config.buildType}} --no-restore | |
dotnet publish src/Nncase.Compiler -c ${{matrix.config.buildType}} --no-restore --sc false -r ${{matrix.config.rid}} | |
dotnet publish src/Nncase.Studio -c ${{matrix.config.buildType}} --no-restore --sc false -r ${{matrix.config.rid}} | |
- name: Set up Dotnet Test settings | |
uses: 1arp/[email protected] | |
with: | |
file: 'test.runsettings' | |
content: | | |
<?xml version="1.0" encoding="utf-8"?> | |
<!-- File name extension must be .runsettings --> | |
<RunSettings> | |
<RunConfiguration> | |
<EnvironmentVariables> | |
<LD_LIBRARY_PATH>${{github.workspace}}/install/lib</LD_LIBRARY_PATH> | |
<DYLD_LIBRARY_PATH>${{github.workspace}}/install/lib</DYLD_LIBRARY_PATH> | |
</EnvironmentVariables> | |
</RunConfiguration> | |
</RunSettings> | |
- name: Set up test environment (Windows) | |
shell: pwsh | |
run: | | |
echo "PATH=${env:PATH};${env:GITHUB_WORKSPACE}/install/bin" >> $env:GITHUB_ENV | |
if: runner.os == 'Windows' | |
- name: Dotnet Test | |
working-directory: ${{github.workspace}} | |
run: | | |
dotnet tool install --global dotnet-coverage | |
dotnet-coverage collect -s tools/dotnet_coverage.settings.xml -f cobertura -o coverage/unit.xml "dotnet test -c ${{matrix.config.buildType}} -s test.runsettings --no-build --verbosity normal --blame" | |
dotnet-coverage merge -o coverage.unit.xml -f cobertura -r coverage/*.xml | |
- name: Upload Coverage | |
uses: actions/upload-artifact@v3 | |
if: matrix.config.name == 'x86_64-linux' | |
with: | |
name: nncase-coverage-unit | |
path: coverage.unit.xml | |
if-no-files-found: error | |
- name: Upload nncase Build Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: nncase-${{matrix.config.name}} | |
path: ${{github.workspace}}/src/Nncase.Compiler/bin/${{matrix.config.buildType}}/net${{matrix.dotnet-version}}/${{matrix.config.rid}}/publish | |
if-no-files-found: error | |
test-compiler: | |
needs: [build-compiler] | |
name: test-${{matrix.config.name}} | |
runs-on: ${{matrix.config.os}} | |
strategy: | |
matrix: | |
dotnet-version: ['7.0'] | |
config: | |
- {name: aarch64-macos, os: macos-14, shell: bash} | |
- {name: x86_64-linux, os: ubuntu-latest, shell: bash} | |
- {name: x86_64-windows, os: windows-latest, arch: x64, shell: bash} | |
env: | |
VULKANSDK_VER: 1.3.280.0 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: seanmiddleditch/gha-setup-ninja@master | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v1 | |
with: | |
dotnet-version: ${{matrix.dotnet-version}} | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.10' | |
cache: 'pip' | |
cache-dependency-path: '**/requirements.test.txt' | |
- name: Install nncase native Artifact | |
uses: actions/download-artifact@v3 | |
with: | |
name: nncase-native-${{matrix.config.name}} | |
path: ${{github.workspace}}/install | |
- name: Install nncase | |
uses: actions/download-artifact@v3 | |
with: | |
name: nncase-${{matrix.config.name}} | |
path: ${{github.workspace}}/install | |
- name: Set up test environment (macOS) | |
run: | | |
aria2c --parameterized-uri=true https://sdk.lunarg.com/sdk/download/${VULKANSDK_VER}/mac/vulkansdk-macos-${VULKANSDK_VER}.dmg | |
hdiutil attach ./vulkansdk-macos-*.dmg | |
sudo /Volumes/vulkansdk-macos-*/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $HOME/VulkanSDK --accept-licenses --default-answer --confirm-command install | |
hdiutil detach /Volumes/vulkansdk-macos-* | |
echo "VULKAN_SDK=$HOME/VulkanSDK/macOS" >> $GITHUB_ENV | |
cp install/lib/*.dylib install/ | |
echo "PYTHONPATH=$GITHUB_WORKSPACE/install/lib:$GITHUB_WORKSPACE/install/python:$GITHUB_WORKSPACE/tests" >> $GITHUB_ENV | |
if: runner.os == 'macOS' | |
- name: Set up test environment (Linux) | |
run: | | |
wget https://sdk.lunarg.com/sdk/download/${VULKANSDK_VER}/linux/vulkansdk-linux-x86_64-${VULKANSDK_VER}.tar.xz -O vulkansdk.tar.xz | |
tar xf vulkansdk.tar.xz | |
sudo cp -P ${VULKANSDK_VER}/x86_64/lib/libvulkan.so* /usr/local/lib/ | |
wget https://github.com/sunnycase/swiftshader/releases/download/v1.0/swiftshader-ubuntu-18.04-x86_64.zip -O swiftshader.zip | |
unzip swiftshader.zip | |
sudo cmake -E make_directory /usr/local/share/vulkan/icd.d | |
sudo cp lib/* /usr/local/share/vulkan/icd.d | |
cp install/lib/*.so install/ | |
echo "PYTHONPATH=$GITHUB_WORKSPACE/install/lib:$GITHUB_WORKSPACE/install/python:$GITHUB_WORKSPACE/tests" >> $GITHUB_ENV | |
if: runner.os == 'Linux' | |
- name: Set up test environment (Windows) | |
shell: pwsh | |
run: | | |
# Invoke-WebRequest -Uri https://sdk.lunarg.com/sdk/download/${env:VULKANSDK_VER}/windows/VulkanSDK-${env:VULKANSDK_VER}-Installer.exe -O VulkanSDK-Installer.exe | |
# .\VulkanSDK-Installer.exe /S | |
Invoke-WebRequest -Uri https://github.com/sunnycase/swiftshader/releases/download/v1.0/swiftshader-windows-2019-x86_64.zip -OutFile swiftshader.zip | |
Expand-Archive swiftshader.zip | |
Copy-Item swiftshader\lib\vk_swiftshader_icd.json swiftshader\bin\ | |
Copy-Item install/bin/*.dll install/ | |
Copy-Item install/bin/*.dll install/lib/ | |
echo "VK_ICD_FILENAMES=${env:GITHUB_WORKSPACE}/swiftshader/bin/vk_swiftshader_icd.json" >> $env:GITHUB_ENV | |
echo "PYTHONPATH=${env:GITHUB_WORKSPACE}/install/lib;${env:GITHUB_WORKSPACE}/install/python;${env:GITHUB_WORKSPACE}/tests" >> $env:GITHUB_ENV | |
echo "PATH=${env:PATH};${env:GITHUB_WORKSPACE}/install/bin" >> $env:GITHUB_ENV | |
if: runner.os == 'Windows' | |
- name: Install Python Packages | |
run: | |
python -m pip install --upgrade pip | |
pip install -r requirements.test.txt | |
- name: Create Test Environment | |
run: mkdir test_results | |
- name: Test | |
working-directory: ${{github.workspace}} | |
shell: bash | |
env: | |
NNCASE_COMPILER: ${{github.workspace}}/install/Nncase.Compiler.dll | |
run: | | |
dotnet tool install --global dotnet-coverage | |
dotnet-coverage collect -s tools/dotnet_coverage.settings.xml -f cobertura -o coverage/onnx_basic.xml pytest tests/importer/onnx_/basic/ --doctest-modules --junitxml=test_results/onnx_basic.xml | |
dotnet-coverage collect -s tools/dotnet_coverage.settings.xml -f cobertura -o coverage/onnx_combine.xml pytest tests/importer/onnx_/combine/ --doctest-modules --junitxml=test_results/onnx_combine.xml | |
dotnet-coverage collect -s tools/dotnet_coverage.settings.xml -f cobertura -o coverage/tflite_basic.xml pytest tests/importer/tflite_/basic/ --doctest-modules --junitxml=test_results/tflite_basic.xml | |
dotnet-coverage collect -s tools/dotnet_coverage.settings.xml -f cobertura -o coverage/tflite_combine.xml pytest tests/importer/tflite_/combine/ --doctest-modules --junitxml=test_results/tflite_combine.xml | |
#dotnet-coverage collect -s tools/dotnet_coverage.settings.xml -f cobertura -o coverage/tflite_model.xml pytest tests/importer/tflite_/model/ --doctest-modules --junitxml=test_results/tflite_model.xml | |
dotnet-coverage collect -s tools/dotnet_coverage.settings.xml -f cobertura -o coverage/ncnn_basic.xml pytest tests/importer/ncnn_/basic/ --doctest-modules --junitxml=test_results/ncnn_basic.xml | |
dotnet-coverage merge -o coverage.integration.xml -f cobertura -r coverage/*.xml | |
- name: Upload Coverage | |
uses: actions/upload-artifact@v3 | |
if: matrix.config.name == 'x86_64-linux' | |
with: | |
name: nncase-coverage-integration | |
path: coverage.integration.xml | |
if-no-files-found: error | |
- name: Publish Test Results | |
uses: EnricoMi/publish-unit-test-result-action@v2 | |
if: always() && matrix.config.name == 'x86_64-linux' | |
with: | |
files: test_results/*.xml | |
upload-coverage: | |
needs: [test-compiler] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v1 | |
with: | |
dotnet-version: "7.0" | |
- name: Download Unit Test Coverage | |
uses: actions/download-artifact@v3 | |
with: | |
name: nncase-coverage-unit | |
path: ${{github.workspace}}/coverage | |
- name: Download Integration Test Coverage | |
uses: actions/download-artifact@v3 | |
with: | |
name: nncase-coverage-integration | |
path: ${{github.workspace}}/coverage | |
- name: Upload Codecov (Unit) | |
uses: codecov/codecov-action@v3 | |
with: | |
files: coverage/coverage.unit.xml | |
flags: unit | |
- name: Upload Codecov (Integration) | |
uses: codecov/codecov-action@v3 | |
with: | |
files: coverage/coverage.integration.xml | |
flags: integration | |
- name: Generate Coverage Report | |
run: | | |
dotnet tool install --global dotnet-coverage | |
dotnet tool install -g dotnet-reportgenerator-globaltool | |
dotnet-coverage merge -o coverage.xml -f cobertura -r coverage/*.xml | |
reportgenerator -reports:coverage.xml -targetdir:"coveragereport" -reporttypes:Html | |
- name: Upload Coverage Report | |
uses: actions/upload-artifact@v3 | |
with: | |
name: nncase-coverage-report | |
path: coveragereport | |
if-no-files-found: error |