packaging: ship the Vulkan backend on all platforms, standard lib layout

- Linux CD builds no longer disable Vulkan: the AppImage, deb, rpm and
  Arch packages now build and ship liboakvulkan (the AppImage deploys
  it via linuxdeploy --library so libvulkan is bundled too, and the
  verify step checks both backend libraries); deb/rpm dependencies gain
  libvulkan1/vulkan-loader; the Arch PKGBUILD gains vulkan-headers
- macOS CD installs vulkan-loader and exports VULKAN_SDK so
  find_package(Vulkan) locates the Homebrew loader (previously the
  Vulkan backend silently never built there)
- ffmpeg_bridge now installs to the standard lib directory with
  /../lib RPATH instead of the non-standard ffmpeg_bridge/bin
  layout (verified: editor, worker, oakgl and oakvulkan all resolve it)
- build guides (EN/ZH) document the macOS Vulkan backend dependencies
  and the VULKAN_SDK variable
This commit is contained in:
2026-07-17 21:41:34 +08:00
parent 6229381426
commit ae908441c8
9 changed files with 68 additions and 25 deletions
+21 -10
View File
@@ -104,7 +104,7 @@ jobs:
- name: Install dependencies
run: |
brew update
brew install cmake ninja pkg-config qt@6 ffmpeg openimageio opencolorio openexr portaudio expat molten-vk vulkan-headers dylibbundler
brew install cmake ninja pkg-config qt@6 ffmpeg openimageio opencolorio openexr portaudio expat molten-vk vulkan-headers vulkan-loader dylibbundler
- name: Build OpenTimelineIO
run: |
@@ -121,6 +121,8 @@ jobs:
run: |
export PATH="$(brew --prefix qt@6)/bin:$PATH"
export CMAKE_PREFIX_PATH="$(brew --prefix qt@6)"
# CMake's FindVulkan locates the Homebrew loader via VULKAN_SDK
export VULKAN_SDK="$(brew --prefix vulkan-loader)"
cmake -S . -B build -G Ninja \
-DBUILD_QT6=ON \
-DCMAKE_BUILD_TYPE=Release \
@@ -307,6 +309,7 @@ jobs:
libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libswresample-dev libavfilter-dev \
libopencolorio-dev libopenimageio-dev libopenexr-dev libexpat1-dev \
portaudio19-dev libgl1-mesa-dev libxkbcommon-dev \
libvulkan-dev vulkan-headers \
wget fuse3 desktop-file-utils
- name: Build
@@ -314,8 +317,7 @@ jobs:
cmake -S . -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DBUILD_QT6=ON \
-DCMAKE_DISABLE_FIND_PACKAGE_Vulkan=ON
-DBUILD_QT6=ON
cmake --build build
- name: Install to AppDir
@@ -333,9 +335,16 @@ jobs:
wget -q "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage"
chmod +x linuxdeploy-x86_64.AppImage linuxdeploy-plugin-qt-x86_64.AppImage appimagetool-x86_64.AppImage
export PATH="${PWD}:${PATH}"
DEPLOY_ARGS=""
# The Vulkan backend is dlopen'ed at runtime, so linuxdeploy cannot
# discover it (and its dependencies) from the executable alone
if [ -f AppDir/usr/lib/liboakvulkan.so ]; then
DEPLOY_ARGS="--library AppDir/usr/lib/liboakvulkan.so"
fi
./linuxdeploy-x86_64.AppImage \
--appdir AppDir \
--plugin qt \
$DEPLOY_ARGS \
--desktop-file AppDir/usr/share/applications/org.oakvideoeditor.Oak.desktop \
--icon-file AppDir/usr/share/icons/hicolor/512x512/apps/org.oakvideoeditor.Oak.png \
--output appimage
@@ -357,11 +366,14 @@ jobs:
ls AppDir/usr/bin/oak-editor || (echo "Missing oak-editor" && exit 1)
ls AppDir/usr/bin/oak-render-worker || (echo "Missing oak-render-worker" && exit 1)
ls AppDir/usr/lib/liboakgl.so || (echo "Missing liboakgl.so" && exit 1)
ls AppDir/usr/ffmpeg_bridge/bin/libffmpeg_bridge.so || (echo "Missing libffmpeg_bridge.so" && exit 1)
ls AppDir/usr/lib/liboakvulkan.so || (echo "Missing liboakvulkan.so" && exit 1)
ls AppDir/usr/lib/libvulkan.so* || (echo "Missing libvulkan" && exit 1)
ls AppDir/usr/lib/libffmpeg_bridge.so || (echo "Missing libffmpeg_bridge.so" && exit 1)
# Ensure every shipped binary resolves all of its dependencies
! ldd AppDir/usr/bin/oak-editor | grep "not found"
! ldd AppDir/usr/bin/oak-render-worker | grep "not found"
! ldd AppDir/usr/lib/liboakgl.so | grep "not found"
! ldd AppDir/usr/lib/liboakvulkan.so | grep "not found"
- name: Upload artifact
uses: actions/upload-artifact@v4
@@ -387,15 +399,15 @@ jobs:
qt6-base-dev qt6-base-dev-tools qt6-base-private-dev qt6-tools-dev qt6-tools-dev-tools \
libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libswresample-dev libavfilter-dev \
libopencolorio-dev libopenimageio-dev libopenexr-dev libexpat1-dev \
portaudio19-dev libgl1-mesa-dev libxkbcommon-dev
portaudio19-dev libgl1-mesa-dev libxkbcommon-dev \
libvulkan-dev vulkan-headers
- name: Build
run: |
cmake -S . -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DBUILD_QT6=ON \
-DCMAKE_DISABLE_FIND_PACKAGE_Vulkan=ON
-DBUILD_QT6=ON
cmake --build build
- name: Create DEB package
@@ -449,8 +461,7 @@ jobs:
cmake -S . -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DBUILD_QT6=ON \
-DCMAKE_DISABLE_FIND_PACKAGE_Vulkan=ON
-DBUILD_QT6=ON
cmake --build build
- name: Create RPM package
@@ -503,7 +514,7 @@ jobs:
pacman -S --noconfirm --needed \
cmake ninja git pkgconf \
qt6-base qt6-tools ffmpeg openimageio opencolorio openexr expat portaudio \
mesa vulkan-icd-loader libxkbcommon fmt
mesa vulkan-headers vulkan-icd-loader libxkbcommon fmt
useradd -m builder
chown -R builder /build
su builder -c "makepkg -s --noconfirm"