summary refs log tree commit diff
path: root/pkgs/tools
diff options
context:
space:
mode:
authorRandy Eckenrode <randy@largeandhighquality.com>2023-10-25 15:41:00 -0400
committerRandy Eckenrode <randy@largeandhighquality.com>2023-10-25 16:10:37 -0400
commit3a319a512eb398c143477e404f212ca5b847f4a9 (patch)
tree07e0e3f8b82c905770b23dcffa478f8cc232943e /pkgs/tools
parentbe44f2d9dbff9cd9daa645481526a94ae872a9b1 (diff)
downloadnixpkgs-3a319a512eb398c143477e404f212ca5b847f4a9.tar
nixpkgs-3a319a512eb398c143477e404f212ca5b847f4a9.tar.gz
nixpkgs-3a319a512eb398c143477e404f212ca5b847f4a9.tar.bz2
nixpkgs-3a319a512eb398c143477e404f212ca5b847f4a9.tar.lz
nixpkgs-3a319a512eb398c143477e404f212ca5b847f4a9.tar.xz
nixpkgs-3a319a512eb398c143477e404f212ca5b847f4a9.tar.zst
nixpkgs-3a319a512eb398c143477e404f212ca5b847f4a9.zip
vulkan-tools: fix build on Darwin
* Disable the cube demo, which requires `ibtool`;
* Modify it to find the MoltenVK ICD in the correct location;
* Modify CMakeLists.txt to install `vulkaninfo` to $out/bin; and
* Reenable Hydra platforms for Darwin.
Diffstat (limited to 'pkgs/tools')
-rw-r--r--pkgs/tools/graphics/vulkan-tools/default.nix34
-rw-r--r--pkgs/tools/graphics/vulkan-tools/use-nix-moltenvk.patch123
2 files changed, 13 insertions, 144 deletions
diff --git a/pkgs/tools/graphics/vulkan-tools/default.nix b/pkgs/tools/graphics/vulkan-tools/default.nix
index 1f5ec9231a8..e148f51d868 100644
--- a/pkgs/tools/graphics/vulkan-tools/default.nix
+++ b/pkgs/tools/graphics/vulkan-tools/default.nix
@@ -57,27 +57,19 @@ stdenv.mkDerivation rec {
     Cocoa
   ];
 
-  libraryPath = lib.strings.makeLibraryPath [ vulkan-loader ];
-
-  patches = lib.optionals stdenv.isDarwin [
-    # Vulkan-Tools expects to find the MoltenVK ICD and `libMoltenVK.dylib` in its source repo.
-    # Patch it to use the already-built binaries and ICD in nixpkgs.
-    ./use-nix-moltenvk.patch
-  ];
-
-  # vkcube.app and vkcubepp.app require `ibtool`, but the version in `xib2nib` is not capable of
-  # building these apps. Build them using `ibtool` from Xcode, but don’t allow any other binaries
-  # into the sandbox. Note that the CLT are not supported because `ibtool` requires Xcode.
-  sandboxProfile = lib.optionalString stdenv.isDarwin ''
-    (allow process-exec
-      (literal "/usr/bin/ibtool")
-      (regex "/Xcode.app/Contents/Developer/usr/bin/ibtool")
-      (regex "/Xcode.app/Contents/Developer/usr/bin/xcodebuild"))
-    (allow file-read*)
-    (deny file-read* (subpath "/usr/local") (with no-log))
-    (allow file-write* (subpath "/private/var/folders"))
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    # Modify mac_common.cmake to find the ICD where nixpkgs puts it.
+    substituteInPlace mac_common.cmake \
+      --replace MoltenVK/icd/MoltenVK_icd.json MoltenVK_icd.json
+    # Remove the unconditional check for `ibtool` since the cube demo that needs it won’t be built.
+    sed -e '/#.*Interface Builder/,/^endif()/d' -i mac_common.cmake
+    # Install `vulkaninfo` to $out/bin even on Darwin.
+    substituteInPlace vulkaninfo/CMakeLists.txt \
+      --replace 'install(TARGETS vulkaninfo RUNTIME DESTINATION "vulkaninfo")' 'install(TARGETS vulkaninfo)'
   '';
 
+  libraryPath = lib.strings.makeLibraryPath [ vulkan-loader ];
+
   dontPatchELF = true;
 
   cmakeFlags = [
@@ -91,7 +83,8 @@ stdenv.mkDerivation rec {
     "-Wno-dev"
   ] ++ lib.optionals stdenv.isDarwin [
     "-DMOLTENVK_REPO_ROOT=${moltenvk}/share/vulkan/icd.d"
-    "-DIBTOOL=/usr/bin/ibtool"
+    # Don’t build the cube demo because it requires `ibtool`, which is not available in nixpkgs.
+    "-DBUILD_CUBE=OFF"
   ];
 
   meta = with lib; {
@@ -102,7 +95,6 @@ stdenv.mkDerivation rec {
       use of the Vulkan API.
     '';
     homepage    = "https://github.com/KhronosGroup/Vulkan-Tools";
-    hydraPlatforms = [ "x86_64-linux" "i686-linux" ];
     platforms   = platforms.unix;
     license     = licenses.asl20;
     maintainers = [ maintainers.ralith ];
diff --git a/pkgs/tools/graphics/vulkan-tools/use-nix-moltenvk.patch b/pkgs/tools/graphics/vulkan-tools/use-nix-moltenvk.patch
deleted file mode 100644
index 5d09bff9c95..00000000000
--- a/pkgs/tools/graphics/vulkan-tools/use-nix-moltenvk.patch
+++ /dev/null
@@ -1,123 +0,0 @@
-diff --git a/cube/CMakeLists.txt b/cube/CMakeLists.txt
-index a2f026e7..327f5dba 100644
---- a/cube/CMakeLists.txt
-+++ b/cube/CMakeLists.txt
-@@ -257,14 +257,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()
-@@ -302,14 +295,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..0c43a2c9 100644
---- a/cube/macOS/cube/cube.cmake
-+++ b/cube/macOS/cube/cube.cmake
-@@ -72,12 +72,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..e528ae26 100644
---- a/cube/macOS/cubepp/cubepp.cmake
-+++ b/cube/macOS/cubepp/cubepp.cmake
-@@ -74,12 +74,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 d23dcf89..32aa0ebb 100644
---- a/vulkaninfo/CMakeLists.txt
-+++ b/vulkaninfo/CMakeLists.txt
-@@ -136,9 +136,5 @@ 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})
-