name: windows on: push: branches: [master] paths: - '.github/workflows/windows.yml' - 'CMakeLists.txt' - 'cmake/**' - 'src/*' - 'src/layer/*' - 'src/layer/x86/**' - 'src/layer/vulkan/**' - 'tests/**' - 'tools/**' - '!tools/pnnx/**' - 'examples/**' pull_request: branches: [master] paths: - '.github/workflows/windows.yml' - 'CMakeLists.txt' - 'cmake/**' - 'src/*' - 'src/layer/*' - 'src/layer/x86/**' - 'src/layer/vulkan/**' - 'tests/**' - 'tools/**' - '!tools/pnnx/**' - 'examples/**' concurrency: group: windows-${{ github.ref }} cancel-in-progress: true permissions: contents: read jobs: windows-gpu: name: ${{ matrix.vs-version }} runs-on: ${{ matrix.os }} strategy: matrix: include: - vs-version: vs2015 toolset-version: v140 os: windows-2019 - vs-version: vs2017 toolset-version: v141 os: windows-2019 - vs-version: vs2019 toolset-version: v142 os: windows-2022 - vs-version: vs2022 toolset-version: v143 os: windows-2022 env: UseMultiToolTask: true steps: - uses: actions/checkout@v4 with: submodules: true - name: cache-protobuf id: cache-protobuf uses: actions/cache@v4 with: path: "protobuf-install" key: protobuf-${{ matrix.vs-version }}-x64-install-2 - name: protobuf if: steps.cache-protobuf.outputs.cache-hit != 'true' run: | Invoke-WebRequest -Uri https://github.com/protocolbuffers/protobuf/archive/v3.11.2.zip -OutFile protobuf-3.11.2.zip 7z x ./protobuf-3.11.2.zip cd protobuf-3.11.2 mkdir build-${{ matrix.vs-version }}; cd build-${{ matrix.vs-version }}; cmake -T ${{ matrix.toolset-version }},host=x64 -A x64 -DCMAKE_INSTALL_PREFIX="$env:GITHUB_WORKSPACE\protobuf-install" -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=OFF -DNCNN_BUILD_TESTS=ON ../cmake cmake --build . --config Release -j 4 cmake --build . --config Release --target install - name: cache-swiftshader if: matrix.vs-version != 'vs2015' && matrix.vs-version != 'vs2017' id: cache-swiftshader uses: actions/cache@v4 with: path: swiftshader-install key: swiftshader-${{ matrix.vs-version }}-x64-install-20240622 - name: checkout-swiftshader if: matrix.vs-version != 'vs2015' && matrix.vs-version != 'vs2017' && steps.cache-swiftshader.outputs.cache-hit != 'true' uses: actions/checkout@v4 with: repository: google/swiftshader path: swiftshader ref: de870ac7518fe2b6bb651ecc22fc36647cf7b986 - name: checkout-swiftshader-submodules if: matrix.vs-version != 'vs2015' && matrix.vs-version != 'vs2017' && steps.cache-swiftshader.outputs.cache-hit != 'true' run: | cd swiftshader git -c submodule."third_party/git-hooks".update=none submodule update --init --recursive - name: swiftshader if: matrix.vs-version != 'vs2015' && matrix.vs-version != 'vs2017' && steps.cache-swiftshader.outputs.cache-hit != 'true' run: | cd swiftshader mkdir build-${{ matrix.vs-version }}; cd build-${{ matrix.vs-version }} cmake -T ${{ matrix.toolset-version }},host=x64 -A x64 -DCMAKE_INSTALL_PREFIX=install -DSWIFTSHADER_BUILD_EGL=FALSE -DSWIFTSHADER_BUILD_GLESv2=FALSE -DSWIFTSHADER_BUILD_GLES_CM=FALSE -DSWIFTSHADER_BUILD_VULKAN=TRUE -DSWIFTSHADER_BUILD_PVR=FALSE -DSWIFTSHADER_BUILD_TESTS=FALSE -DSWIFTSHADER_ENABLE_ASTC=FALSE -DSWIFTSHADER_WARNINGS_AS_ERRORS=FALSE -DREACTOR_BACKEND=Subzero -DREACTOR_DEFAULT_OPT_LEVEL=Default -DCMAKE_BUILD_TYPE=Release .. cmake --build . --config Release -j 4 mkdir "$env:GITHUB_WORKSPACE/swiftshader-install" Copy-Item -Path "Windows\*" -Destination "$env:GITHUB_WORKSPACE\swiftshader-install" - name: x64 run: | mkdir build-x64; cd build-x64 cmake -T ${{ matrix.toolset-version }},host=x64 -A x64 -Dprotobuf_DIR="$env:GITHUB_WORKSPACE\protobuf-install\cmake" -DNCNN_VULKAN=ON -DNCNN_BUILD_TESTS=ON .. cmake --build . --config Release -j 4 - name: x64-test if: matrix.vs-version != 'vs2015' && matrix.vs-version != 'vs2017' run: | echo "[Processor]`nThreadCount=1`n" > build-x64/tests/Release/SwiftShader.ini Copy-Item -Path "$env:GITHUB_WORKSPACE\swiftshader-install\vulkan-1.dll" -Destination 'build-x64\tests' cd build-x64; ctest -C Release --output-on-failure -j 4 - name: x64-sse2 run: | mkdir build-x64-sse2; cd build-x64-sse2 cmake -T ${{ matrix.toolset-version }},host=x64 -A x64 -DNCNN_RUNTIME_CPU=OFF -DNCNN_XOP=OFF -DNCNN_AVX=OFF -DNCNN_AVX2=OFF -DNCNN_AVX512=OFF -DNCNN_BUILD_TESTS=ON -DNCNN_DISABLE_RTTI=ON -DNCNN_DISABLE_EXCEPTION=ON -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF .. cmake --build . --config Release -j 4 - name: x64-sse2-test run: cd build-x64-sse2; ctest -C Release --output-on-failure -j 4 - name: x64-avx run: | mkdir build-x64-avx; cd build-x64-avx cmake -T ${{ matrix.toolset-version }},host=x64 -A x64 -DNCNN_RUNTIME_CPU=OFF -DNCNN_XOP=OFF -DNCNN_AVX=ON -DNCNN_AVX2=OFF -DNCNN_AVX512=OFF -DNCNN_BUILD_TESTS=ON -DNCNN_DISABLE_RTTI=ON -DNCNN_DISABLE_EXCEPTION=ON -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF .. cmake --build . --config Release -j 4 - name: x64-avx-test run: cd build-x64-avx; ctest -C Release --output-on-failure -j 4 - name: x86 run: | mkdir build-x86; cd build-x86 cmake -T ${{ matrix.toolset-version }},host=x64 -A Win32 -DNCNN_SHARED_LIB=ON -DNCNN_BUILD_TESTS=ON -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF .. cmake --build . --config Release -j 4 - name: x86-test run: | Copy-Item -Path "build-x86\src\Release\ncnn.dll" -Destination 'build-x86\tests' cd build-x86; ctest -C Release --output-on-failure -j 4