diff --git a/pkgs/tools/graphics/vulkan-tools/default.nix b/pkgs/tools/graphics/vulkan-tools/default.nix index 1f5ec9231a8e..e148f51d8689 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 5d09bff9c958..000000000000 --- 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}/$/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) - 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}/$/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) - 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}) -