Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 3 additions & 12 deletions .github/workflows/ios.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ jobs:
-DLIBOMP_OMPT_SUPPORT=OFF \
-DLIBOMP_USE_HWLOC=OFF \

MOLTENVK_VERSION: 'v1.2.8'
NCNN_CMAKE_OPTIONS: |
-DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake \
-DDEPLOYMENT_TARGET=$IOS_DEPLOYMENT_TARGET \
Expand Down Expand Up @@ -144,26 +143,18 @@ jobs:
sudo cp $GITHUB_WORKSPACE/openmp-install/ios-simulator/include/* $DEVELOPER_DIR/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include
sudo cp $GITHUB_WORKSPACE/openmp-install/ios-simulator/lib/libomp.a $DEVELOPER_DIR/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib

- name: moltenvk
run: |
wget -q https://github.com/KhronosGroup/MoltenVK/releases/download/${{ env.MOLTENVK_VERSION }}/MoltenVK-all.tar
tar -xf MoltenVK-all.tar

- name: arm64
run: |
mkdir build-arm64 && cd build-arm64
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=OS64 -DARCHS="arm64" \
-DVulkan_LIBRARY=$GITHUB_WORKSPACE/MoltenVK/MoltenVK/static/MoltenVK.xcframework/ios-arm64/libMoltenVK.a ..
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=OS64 -DARCHS="arm64" ..
cmake --build . -j 4
- name: simulator-x86_64
run: |
mkdir build-simulator-x86_64 && cd build-simulator-x86_64
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=SIMULATOR64 -DARCHS="x86_64" \
-DVulkan_LIBRARY=$GITHUB_WORKSPACE/MoltenVK/MoltenVK/static/MoltenVK.xcframework/ios-arm64_x86_64-simulator/libMoltenVK.a ..
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=SIMULATOR64 -DARCHS="x86_64" ..
cmake --build . -j 4
- name: simulator-arm64
run: |
mkdir build-simulator-arm64 && cd build-simulator-arm64
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=SIMULATORARM64 -DARCHS="arm64" \
-DVulkan_LIBRARY=$GITHUB_WORKSPACE/MoltenVK/MoltenVK/static/MoltenVK.xcframework/ios-arm64_x86_64-simulator/libMoltenVK.a ..
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=SIMULATORARM64 -DARCHS="arm64" ..
cmake --build . -j 4
12 changes: 2 additions & 10 deletions .github/workflows/mac-catalyst.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ jobs:
-DLIBOMP_OMPT_SUPPORT=OFF \
-DLIBOMP_USE_HWLOC=OFF \

MOLTENVK_VERSION: 'v1.2.8'
NCNN_CMAKE_OPTIONS: |
-DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake \
-DDEPLOYMENT_TARGET=$MAC_CATALYST_DEPLOYMENT_TARGET \
Expand Down Expand Up @@ -128,20 +127,13 @@ jobs:
sudo cp $GITHUB_WORKSPACE/openmp-install/mac-catalyst/include/* $DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
sudo cp $GITHUB_WORKSPACE/openmp-install/mac-catalyst/lib/libomp.a $DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib

- name: moltenvk
run: |
wget -q https://github.com/KhronosGroup/MoltenVK/releases/download/${{ env.MOLTENVK_VERSION }}/MoltenVK-all.tar
tar -xf MoltenVK-all.tar

- name: x86_64
run: |
mkdir build-x86_64 && cd build-x86_64
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=MAC_CATALYST -DARCHS="x86_64" \
-DVulkan_LIBRARY=$GITHUB_WORKSPACE/MoltenVK/MoltenVK/static/MoltenVK.xcframework/ios-arm64_x86_64-maccatalyst/libMoltenVK.a ..
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=MAC_CATALYST -DARCHS="x86_64" ..
cmake --build . -j 4
- name: arm64
run: |
mkdir build-arm64 && cd build-arm64
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=MAC_CATALYST_ARM64 -DARCHS="arm64" \
-DVulkan_LIBRARY=$GITHUB_WORKSPACE/MoltenVK/MoltenVK/static/MoltenVK.xcframework/ios-arm64_x86_64-maccatalyst/libMoltenVK.a ..
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=MAC_CATALYST_ARM64 -DARCHS="arm64" ..
cmake --build . -j 4
22 changes: 6 additions & 16 deletions .github/workflows/macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@ jobs:
-DLIBOMP_OMPT_SUPPORT=OFF \
-DLIBOMP_USE_HWLOC=OFF \

MOLTENVK_VERSION: 'v1.2.8'
NCNN_CMAKE_OPTIONS: |
-DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake \
-DDEPLOYMENT_TARGET=$MAC_DEPLOYMENT_TARGET \
Expand Down Expand Up @@ -158,43 +157,34 @@ jobs:
cd swiftshader
mkdir -p build; cd build
cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5 -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 . -j 3
cmake --build . -j 4
mkdir $GITHUB_WORKSPACE/swiftshader-install
cp Darwin/* $GITHUB_WORKSPACE/swiftshader-install

- name: moltenvk
run: |
wget -q https://github.com/KhronosGroup/MoltenVK/releases/download/${{ env.MOLTENVK_VERSION }}/MoltenVK-all.tar
tar -xf MoltenVK-all.tar

- name: arm64
run: |
mkdir build-arm64 && cd build-arm64
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=MAC_ARM64 -DARCHS="arm64" \
-DVulkan_LIBRARY=$GITHUB_WORKSPACE/MoltenVK/MoltenVK/static/MoltenVK.xcframework/macos-arm64_x86_64/libMoltenVK.a ..
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=MAC_ARM64 -DARCHS="arm64" ..
cmake --build . -j 4
- name: x86_64
run: |
mkdir build-x86_64 && cd build-x86_64
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=MAC -DARCHS="x86_64" \
-DVulkan_LIBRARY=$GITHUB_WORKSPACE/swiftshader-install/libvulkan.dylib \
-DNCNN_BUILD_TESTS=ON ..
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=MAC -DARCHS="x86_64" -DNCNN_BUILD_TESTS=ON ..
cmake --build . -j 4

- name: arm64-shared
run: |
mkdir build-arm64-shared && cd build-arm64-shared
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=MAC_ARM64 -DARCHS="arm64" -DNCNN_SHARED_LIB=ON \
-DVulkan_LIBRARY=$GITHUB_WORKSPACE/MoltenVK/MoltenVK/dynamic/MoltenVK.xcframework/macos-arm64_x86_64/MoltenVK.framework/MoltenVK ..
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=MAC_ARM64 -DARCHS="arm64" -DNCNN_SHARED_LIB=ON ..
cmake --build . -j 4
- name: x86_64-shared
run: |
mkdir build-x86_64-shared && cd build-x86_64-shared
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=MAC -DARCHS="x86_64" -DNCNN_SHARED_LIB=ON \
-DVulkan_LIBRARY=$GITHUB_WORKSPACE/MoltenVK/MoltenVK/dynamic/MoltenVK.xcframework/macos-arm64_x86_64/MoltenVK.framework/MoltenVK ..
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=MAC -DARCHS="x86_64" -DNCNN_SHARED_LIB=ON ..
cmake --build . -j 4

- name: x86_64-test
run: |
printf "[Processor]\nThreadCount=1\n" > build-x86_64/tests/SwiftShader.ini
export VK_ICD_FILENAMES="$GITHUB_WORKSPACE/swiftshader-install/vk_swiftshader_icd.json"
cd build-x86_64 && ctest --output-on-failure -j 4
10 changes: 5 additions & 5 deletions .github/workflows/release-python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -220,9 +220,9 @@ jobs:
- name: vulkansdk for macos
if: matrix.os == 'macos-15-intel'
run: |
wget https://sdk.lunarg.com/sdk/download/1.3.290.0/mac/vulkansdk-macos-1.3.290.0.dmg?Human=true -O vulkansdk-macos-1.3.290.0.dmg
hdiutil attach vulkansdk-macos-1.3.290.0.dmg
sudo /Volumes/vulkansdk-macos-1.3.290.0/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $GITHUB_WORKSPACE/vulkansdk-macos-1.3.290.0 --accept-licenses --default-answer --confirm-command install
wget https://sdk.lunarg.com/sdk/download/1.4.335.1/mac/vulkansdk-macos-1.4.335.1.zip?Human=true -O vulkansdk-macos-1.4.335.1.zip
unzip vulkansdk-macos-1.4.335.1.zip
sudo vulkansdk-macOS-1.4.335.1.app/Contents/MacOS/vulkansdk-macOS-1.4.335.1 --root $GITHUB_WORKSPACE/vulkansdk-macos-1.4.335.1 --accept-licenses --default-answer --confirm-command install

- name: Build wheels for macos x86_64
if: matrix.os == 'macos-15-intel' && matrix.arch == 'x86_64'
Expand All @@ -238,7 +238,7 @@ jobs:
OpenMP_C_FLAGS="-Xclang -fopenmp" OpenMP_CXX_FLAGS="-Xclang -fopenmp"
OpenMP_C_LIB_NAMES="libomp" OpenMP_CXX_LIB_NAMES="libomp"
OpenMP_libomp_LIBRARY="libomp.a"
Vulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.290.0/macOS/lib/libMoltenVK.dylib
Vulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.4.335.1/macOS/lib/libMoltenVK.dylib
MACOSX_DEPLOYMENT_TARGET=$MAC_DEPLOYMENT_TARGET
with:
output-dir: wheelhouse
Expand All @@ -257,7 +257,7 @@ jobs:
OpenMP_C_FLAGS="-Xclang -fopenmp" OpenMP_CXX_FLAGS="-Xclang -fopenmp"
OpenMP_C_LIB_NAMES="libomp" OpenMP_CXX_LIB_NAMES="libomp"
OpenMP_libomp_LIBRARY="libomp.a"
Vulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.290.0/macOS/lib/libMoltenVK.dylib
Vulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.4.335.1/macOS/lib/libMoltenVK.dylib
MACOSX_DEPLOYMENT_TARGET=$MAC_DEPLOYMENT_TARGET
with:
output-dir: wheelhouse
Expand Down
18 changes: 4 additions & 14 deletions .github/workflows/tvos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ jobs:
-DLIBOMP_OMPT_SUPPORT=OFF \
-DLIBOMP_USE_HWLOC=OFF \

MOLTENVK_VERSION: 'v1.2.8'
NCNN_CMAKE_OPTIONS: |
-DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake \
-DDEPLOYMENT_TARGET=$TVOS_DEPLOYMENT_TARGET \
Expand Down Expand Up @@ -155,32 +154,23 @@ jobs:
sudo cp $GITHUB_WORKSPACE/openmp-install/tvos-simulator/include/* $DEVELOPER_DIR/Platforms/AppleTVSimulator.platform/Developer/SDKs/AppleTVSimulator.sdk/usr/include
sudo cp $GITHUB_WORKSPACE/openmp-install/tvos-simulator/lib/libomp.a $DEVELOPER_DIR/Platforms/AppleTVSimulator.platform/Developer/SDKs/AppleTVSimulator.sdk/usr/lib

- name: moltenvk
run: |
wget -q https://github.com/KhronosGroup/MoltenVK/releases/download/${{ env.MOLTENVK_VERSION }}/MoltenVK-all.tar
tar -xf MoltenVK-all.tar

- name: arm64
run: |
mkdir build-arm64 && cd build-arm64
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=TVOS -DARCHS="arm64" \
-DVulkan_LIBRARY=$GITHUB_WORKSPACE/MoltenVK/MoltenVK/static/MoltenVK.xcframework/tvos-arm64_arm64e/libMoltenVK.a ..
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=TVOS -DARCHS="arm64" ..
cmake --build . -j 4
- name: arm64e
run: |
mkdir build-arm64e && cd build-arm64e
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=TVOS -DARCHS="arm64e" \
-DVulkan_LIBRARY=$GITHUB_WORKSPACE/MoltenVK/MoltenVK/static/MoltenVK.xcframework/tvos-arm64_arm64e/libMoltenVK.a ..
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=TVOS -DARCHS="arm64e" ..
cmake --build . -j 4
- name: simulator-x86_64
run: |
mkdir build-simulator-x86_64 && cd build-simulator-x86_64
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=SIMULATOR_TVOS -DARCHS="x86_64" \
-DVulkan_LIBRARY=$GITHUB_WORKSPACE/MoltenVK/MoltenVK/static/MoltenVK.xcframework/tvos-arm64_x86_64-simulator/libMoltenVK.a ..
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=SIMULATOR_TVOS -DARCHS="x86_64" ..
cmake --build . -j 4
- name: simulator-arm64
run: |
mkdir build-simulator-arm64 && cd build-simulator-arm64
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=SIMULATORARM64_TVOS -DARCHS="arm64" \
-DVulkan_LIBRARY=$GITHUB_WORKSPACE/MoltenVK/MoltenVK/static/MoltenVK.xcframework/tvos-arm64_x86_64-simulator/libMoltenVK.a ..
cmake ${{ env.NCNN_CMAKE_OPTIONS }} -DPLATFORM=SIMULATORARM64_TVOS -DARCHS="arm64" ..
cmake --build . -j 4
3 changes: 3 additions & 0 deletions .github/workflows/visionos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,12 @@ jobs:
-DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \
-DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \
-DOpenMP_libomp_LIBRARY="libomp.a" \
-DNCNN_VULKAN=ON \

steps:
- uses: actions/checkout@v6
with:
submodules: true

- name: cache-openmp
id: cache-openmp
Expand Down
9 changes: 8 additions & 1 deletion docs/developer-guide/vulkan-driver-loader.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,9 @@ vulkan-1.dll
libvulkan.so

#### macOS iOS and other APPLE platforms
Requires static meltvk driver linking and should always succeed
libvulkan.dylib

If static moltenvk driver linked, should always succeed

If failed, it will try to find graphics driver object and load it

Expand Down Expand Up @@ -101,6 +103,11 @@ for 32bit applications
- /vendor/lib/hw/vulkan.adreno.so
- /vendor/lib/egl/libGLES_mali.so

#### macOS iOS and other APPLE platforms
`dlopen()` search for
- libMoltenVK.dylib
- libvulkan_kosmickrisp.dylib

## Load from driver_path

for advanced developer
Expand Down
65 changes: 35 additions & 30 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -273,14 +273,43 @@ endif()
if(NCNN_VULKAN)
if(NCNN_SIMPLEVK)
if(APPLE)
# simplevk always use static vulkan linkage on apple platform
if(NOT DEFINED Vulkan_LIBRARY)
message(WARNING "Vulkan_LIBRARY shall be defined for simplevk static linkage on APPLE platforms")
# simplevk use static vulkan linkage on apple platform as fallback
if(DEFINED Vulkan_LIBRARY)
message(STATUS "simplevk static vulkan linkage as fallback enabled on APPLE platforms")
target_link_libraries(ncnn PUBLIC ${Vulkan_LIBRARY})

# https://github.com/KhronosGroup/MoltenVK/blob/main/Docs/MoltenVK_Runtime_UserGuide.md#optionally-link-to-required-system-libraries
if(NOT NCNN_SHARED_LIB)
find_library(Metal NAMES Metal)
find_library(Foundation NAMES Foundation)
find_library(QuartzCore NAMES QuartzCore)
find_library(CoreGraphics NAMES CoreGraphics)
find_library(IOSurface NAMES IOSurface)
list(APPEND vulkan_dependent_LINK_LIBRARIES ${Metal} ${Foundation} ${QuartzCore} ${CoreGraphics} ${IOSurface})
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
if(NOT IOS)
find_library(AppKit NAMES AppKit)
list(APPEND vulkan_dependent_LINK_LIBRARIES ${AppKit})
endif()
find_library(IOKit NAMES IOKit)
list(APPEND vulkan_dependent_LINK_LIBRARIES ${IOKit})
endif()
if(IOS OR CMAKE_SYSTEM_NAME STREQUAL "iOS" OR CMAKE_SYSTEM_NAME STREQUAL "tvOS")
find_library(UIKit NAMES UIKit)
list(APPEND vulkan_dependent_LINK_LIBRARIES ${UIKit})
endif()
target_link_libraries(ncnn PRIVATE ${vulkan_dependent_LINK_LIBRARIES})
endif()

else()
message(WARNING "Vulkan_LIBRARY shall be defined for simplevk static linkage as fallback on APPLE platforms")

# link simplevk stub
set(SIMPLEVK_TBD "${CMAKE_CURRENT_SOURCE_DIR}/simplevk.tbd")
target_link_libraries(ncnn PRIVATE "-Wl,-weak_library,${SIMPLEVK_TBD}")
endif()
target_link_libraries(ncnn PUBLIC ${Vulkan_LIBRARY})
else()
target_link_libraries(ncnn PRIVATE ${CMAKE_DL_LIBS})
endif()
target_link_libraries(ncnn PRIVATE ${CMAKE_DL_LIBS})
else()
find_package(Vulkan QUIET)
if(NOT Vulkan_FOUND)
Expand All @@ -306,30 +335,6 @@ if(NCNN_VULKAN)
target_link_libraries(ncnn PUBLIC Vulkan::Vulkan)
endif()

# Support mac platform static library compilation
# https://github.com/KhronosGroup/MoltenVK/blob/main/Docs/MoltenVK_Runtime_UserGuide.md#optionally-link-to-required-system-libraries
if(NOT NCNN_SHARED_LIB AND APPLE)
find_library(Metal NAMES Metal)
find_library(Foundation NAMES Foundation)
find_library(QuartzCore NAMES QuartzCore)
find_library(CoreGraphics NAMES CoreGraphics)
find_library(IOSurface NAMES IOSurface)
list(APPEND vulkan_dependent_LINK_LIBRARIES ${Metal} ${Foundation} ${QuartzCore} ${CoreGraphics} ${IOSurface})
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
if(NOT IOS)
find_library(AppKit NAMES AppKit)
list(APPEND vulkan_dependent_LINK_LIBRARIES ${AppKit})
endif()
find_library(IOKit NAMES IOKit)
list(APPEND vulkan_dependent_LINK_LIBRARIES ${IOKit})
endif()
if(IOS OR CMAKE_SYSTEM_NAME STREQUAL "iOS" OR CMAKE_SYSTEM_NAME STREQUAL "tvOS")
find_library(UIKit NAMES UIKit)
list(APPEND vulkan_dependent_LINK_LIBRARIES ${UIKit})
endif()
target_link_libraries(ncnn PRIVATE ${vulkan_dependent_LINK_LIBRARIES})
endif()

# link in-house glslang
target_include_directories(ncnn PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../>)
target_link_libraries(ncnn PRIVATE glslang SPIRV)
Expand Down
Loading
Loading