summary refs log tree commit diff
path: root/pkgs/tools/graphics/vulkan-tools/use-nix-moltenvk.patch
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/tools/graphics/vulkan-tools/use-nix-moltenvk.patch')
-rw-r--r--pkgs/tools/graphics/vulkan-tools/use-nix-moltenvk.patch155
1 files changed, 155 insertions, 0 deletions
diff --git a/pkgs/tools/graphics/vulkan-tools/use-nix-moltenvk.patch b/pkgs/tools/graphics/vulkan-tools/use-nix-moltenvk.patch
new file mode 100644
index 00000000000..5cbcec6a8a1
--- /dev/null
+++ b/pkgs/tools/graphics/vulkan-tools/use-nix-moltenvk.patch
@@ -0,0 +1,155 @@
+diff --git a/cube/CMakeLists.txt b/cube/CMakeLists.txt
+index 616fbc96..d2811c8d 100644
+--- a/cube/CMakeLists.txt
++++ b/cube/CMakeLists.txt
+@@ -262,14 +262,7 @@ else()
+ endif()
+ 
+ if(APPLE)
+-    # Keep RPATH so fixup_bundle can use it to find libraries
+-    set_target_properties(vkcube PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE)
+-    install(TARGETS vkcube BUNDLE DESTINATION "cube")
+-    # Fix up the library references to be self-contained within the bundle.
+-    install(CODE "
+-        include(BundleUtilities)
+-        fixup_bundle(\${CMAKE_INSTALL_PREFIX}/cube/vkcube.app \"\" \"${Vulkan_LIBRARY_DIR}\")
+-        ")
++    install(TARGETS vkcube BUNDLE DESTINATION "Applications")
+ else()
+     install(TARGETS vkcube RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+ endif()
+@@ -309,14 +302,7 @@ else()
+ endif()
+ 
+ if(APPLE)
+-    # Keep RPATH so fixup_bundle can use it to find libraries
+-    set_target_properties(vkcubepp PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE)
+-    install(TARGETS vkcubepp BUNDLE DESTINATION "cube")
+-    # Fix up the library references to be self-contained within the bundle.
+-    install(CODE "
+-        include(BundleUtilities)
+-        fixup_bundle(\${CMAKE_INSTALL_PREFIX}/cube/vkcubepp.app \"\" \"${Vulkan_LIBRARY_DIR}\")
+-        ")
++    install(TARGETS vkcubepp BUNDLE DESTINATION "Applications")
+ else()
+     install(TARGETS vkcubepp RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+ endif()
+diff --git a/cube/macOS/cube/cube.cmake b/cube/macOS/cube/cube.cmake
+index 9b823f95..238c3e67 100644
+--- a/cube/macOS/cube/cube.cmake
++++ b/cube/macOS/cube/cube.cmake
+@@ -72,12 +69,14 @@ set_source_files_properties("${CMAKE_BINARY_DIR}/staging-json/MoltenVK_icd.json"
+ # Copy the MoltenVK lib into the bundle.
+ if(${CMAKE_GENERATOR} MATCHES "^Xcode.*")
+     add_custom_command(TARGET vkcube POST_BUILD
+-                       COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/MoltenVK/dylib/macOS/libMoltenVK.dylib"
++                       COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/vkcube.app/Contents/Frameworks
++                       COMMAND ${CMAKE_COMMAND} -E create_symlink "${MOLTENVK_DIR}/lib/libMoltenVK.dylib"
+                                ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/vkcube.app/Contents/Frameworks/libMoltenVK.dylib
+                        DEPENDS vulkan)
+ else()
+     add_custom_command(TARGET vkcube POST_BUILD
+-                       COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/MoltenVK/dylib/macOS/libMoltenVK.dylib"
++                       COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/vkcube.app/Contents/Frameworks
++                       COMMAND ${CMAKE_COMMAND} -E create_symlink "${MOLTENVK_DIR}/lib/libMoltenVK.dylib"
+                                ${CMAKE_CURRENT_BINARY_DIR}/vkcube.app/Contents/Frameworks/libMoltenVK.dylib
+                        DEPENDS vulkan)
+ endif()
+diff --git a/cube/macOS/cubepp/cubepp.cmake b/cube/macOS/cubepp/cubepp.cmake
+index eae4de3c..0acd18f9 100644
+--- a/cube/macOS/cubepp/cubepp.cmake
++++ b/cube/macOS/cubepp/cubepp.cmake
+@@ -74,12 +71,14 @@ set_source_files_properties("${CMAKE_BINARY_DIR}/staging-json/MoltenVK_icd.json"
+ # Copy the MoltenVK lib into the bundle.
+ if(${CMAKE_GENERATOR} MATCHES "^Xcode.*")
+     add_custom_command(TARGET vkcubepp POST_BUILD
+-                       COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/MoltenVK/dylib/macOS/libMoltenVK.dylib"
++                       COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/vkcubepp.app/Contents/Frameworks
++                       COMMAND ${CMAKE_COMMAND} -E create_symlink "${MOLTENVK_DIR}/lib/libMoltenVK.dylib"
+                                ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/vkcubepp.app/Contents/Frameworks/libMoltenVK.dylib
+                        DEPENDS vulkan)
+ else()
+     add_custom_command(TARGET vkcubepp POST_BUILD
+-                       COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/MoltenVK/dylib/macOS/libMoltenVK.dylib"
++                       COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/vkcubepp.app/Contents/Frameworks
++                       COMMAND ${CMAKE_COMMAND} -E create_symlink "${MOLTENVK_DIR}/lib/libMoltenVK.dylib"
+                                ${CMAKE_CURRENT_BINARY_DIR}/vkcubepp.app/Contents/Frameworks/libMoltenVK.dylib
+                        DEPENDS vulkan)
+ endif()
+diff --git a/mac_common.cmake b/mac_common.cmake
+index bad3c414..b498906d 100644
+--- a/mac_common.cmake
++++ b/mac_common.cmake
+@@ -23,9 +23,8 @@ set(MOLTENVK_DIR ${MOLTENVK_REPO_ROOT})
+ # MoltenVK JSON File
+ 
+ execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/staging-json)
+-execute_process(COMMAND sed -e "/\"library_path\":/s$:[[:space:]]*\"[[:space:]]*[\\.\\/]*$: \"..\\/..\\/..\\/Frameworks\\/$"
+-                        ${MOLTENVK_DIR}/MoltenVK/icd/MoltenVK_icd.json
+-                OUTPUT_FILE ${CMAKE_BINARY_DIR}/staging-json/MoltenVK_icd.json)
++execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${MOLTENVK_DIR}/MoltenVK_icd.json
++                        ${CMAKE_BINARY_DIR}/staging-json/MoltenVK_icd.json)
+ 
+ # ~~~
+ # Modify the ICD JSON file to adjust the library path.
+@@ -36,10 +35,9 @@ execute_process(COMMAND sed -e "/\"library_path\":/s$:[[:space:]]*\"[[:space:]]*
+ # ~~~
+ add_custom_target(MoltenVK_icd-staging-json ALL
+                   COMMAND mkdir -p ${CMAKE_BINARY_DIR}/staging-json
+-                  COMMAND sed -e "/\"library_path\":/s$:[[:space:]]*\"[[:space:]]*[\\.\\/]*$: \"..\\/..\\/..\\/Frameworks\\/$"
+-                          ${MOLTENVK_DIR}/MoltenVK/icd/MoltenVK_icd.json > ${CMAKE_BINARY_DIR}/staging-json/MoltenVK_icd.json
+-                  VERBATIM
+-                  DEPENDS "${MOLTENVK_DIR}/MoltenVK/icd/MoltenVK_icd.json")
++                  COMMAND ${CMAKE_COMMAND} -E create_symlink ${MOLTENVK_DIR}/MoltenVK_icd.json
++                          ${CMAKE_BINARY_DIR}/staging-json/MoltenVK_icd.json
++                  DEPENDS "${MOLTENVK_DIR}/MoltenVK_icd.json")
+ set_source_files_properties(${CMAKE_BINARY_DIR}/staging-json/MoltenVK_icd.json PROPERTIES GENERATED TRUE)
+ 
+ find_library(COCOA NAMES Cocoa)
+diff --git a/vulkaninfo/CMakeLists.txt b/vulkaninfo/CMakeLists.txt
+index fb236a5b..3c8270d4 100644
+--- a/vulkaninfo/CMakeLists.txt
++++ b/vulkaninfo/CMakeLists.txt
+@@ -139,9 +139,4 @@ elseif(APPLE)
+     add_definitions(-DVK_USE_PLATFORM_MACOS_MVK -DVK_USE_PLATFORM_METAL_EXT)
+ endif()
+ 
+-if(APPLE)
+-    install(TARGETS vulkaninfo RUNTIME DESTINATION "vulkaninfo")
+-else()
+-    install(TARGETS vulkaninfo RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+-endif()
+-
++install(TARGETS vulkaninfo RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+diff --git a/vulkaninfo/macOS/vulkaninfo.cmake b/vulkaninfo/macOS/vulkaninfo.cmake
+index 9614530e..56af3b89 100644
+--- a/vulkaninfo/macOS/vulkaninfo.cmake
++++ b/vulkaninfo/macOS/vulkaninfo.cmake
+@@ -48,26 +48,4 @@ set_source_files_properties(${CMAKE_BINARY_DIR}/staging-json/MoltenVK_icd.json
+                             MACOSX_PACKAGE_LOCATION
+                             "Resources/vulkan/icd.d")
+ 
+-# Xcode projects need some extra help with what would be install steps.
+-if(${CMAKE_GENERATOR} MATCHES "^Xcode.*")
+-    add_custom_command(TARGET vulkaninfo-bundle POST_BUILD
+-                       COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/MoltenVK/dylib/macOS/libMoltenVK.dylib"
+-                               ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/vulkaninfo.app/Contents/Frameworks/libMoltenVK.dylib
+-                       DEPENDS vulkan)
+-else()
+-    add_custom_command(TARGET vulkaninfo-bundle POST_BUILD
+-                       COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/MoltenVK/dylib/macOS/libMoltenVK.dylib"
+-                               ${CMAKE_CURRENT_BINARY_DIR}/vulkaninfo.app/Contents/Frameworks/libMoltenVK.dylib
+-                       DEPENDS vulkan)
+-endif()
+-
+-# Keep RPATH so fixup_bundle can use it to find libraries
+-set_target_properties(vulkaninfo-bundle PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE)
+-install(TARGETS vulkaninfo-bundle BUNDLE DESTINATION "vulkaninfo")
+-# Fix up the library search path in the executable to find (loader) libraries in the bundle. When fixup_bundle() is passed a bundle
+-# in the first argument, it looks at the Info.plist file to determine the BundleExecutable. In this case, the executable is a
+-# script, which can't be fixed up. Instead pass it the explicit name of the executable.
+-install(CODE "
+-    include(BundleUtilities)
+-    fixup_bundle(\${CMAKE_INSTALL_PREFIX}/vulkaninfo/vulkaninfo.app/Contents/MacOS/vulkaninfo \"\" \"${Vulkan_LIBRARY_DIR}\")
+-    ")
++install(TARGETS vulkaninfo-bundle BUNDLE DESTINATION "Applications")