class VulkanTools < Formula desc "Vulkan utilities and tools" homepage "https://github.com/KhronosGroup/Vulkan-Tools" url "https://github.com/KhronosGroup/Vulkan-Tools/archive/refs/tags/vulkan-sdk-1.4.335.0.tar.gz" sha256 "85bf51a54271c87925711f7159ea66cc6c5abf6afd5f2bbf452d444fd7deccf3" license "Apache-2.0" head "https://github.com/KhronosGroup/Vulkan-Tools.git", branch: "main" livecheck do url :stable regex(/^vulkan-sdk[._-]v?(\d+(?:\.\d+)+)$/i) end bottle do sha256 arm64_tahoe: "ed580a73b6bdc8721f0453c8312203dee62439babd8b11213b2644627f49a741" sha256 arm64_sequoia: "24237d99c1fa18190b73dba3be77b7e349f9108d6a69fb1e3a9333753e3dbb54" sha256 arm64_sonoma: "b2addfe52958c3e3218ab5a5760e929b5e7cb978a396d20c64bc75d8bd11159c" sha256 cellar: :any, sonoma: "25902da3967d58422e934913a8c3573a6b003622d9d34040a11c183a101fb171" sha256 cellar: :any_skip_relocation, arm64_linux: "be1453bff71c9fd172ccae483b9838b9d5413d50326a25dbb42c52f31f08e8ca" sha256 cellar: :any_skip_relocation, x86_64_linux: "68d974b3cef85b11a5ed25fef259d80231ac6e97c8bf951d38ef71cea1cc66a6" end depends_on "cmake" => :build depends_on "pkgconf" => :build depends_on xcode: :build # for ibtool depends_on "glslang" depends_on "vulkan-headers" depends_on "vulkan-loader" on_macos do depends_on "molten-vk" end on_linux do depends_on "libx11" depends_on "libxcb" depends_on "libxkbfile" depends_on "libxrandr" depends_on "wayland" depends_on "wayland-protocols" end def install if OS.mac? # account for using already-built MoltenVK instead of the source repo inreplace "cube/CMakeLists.txt", "${MOLTENVK_DIR}/MoltenVK/icd/MoltenVK_icd.json", "${MOLTENVK_DIR}/etc/vulkan/icd.d/MoltenVK_icd.json" inreplace buildpath.glob("*/macOS/*/CMakeLists.txt"), "${MOLTENVK_DIR}/Package/Release/MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib", "${MOLTENVK_DIR}/lib/libMoltenVK.dylib" end args = [ "-DBUILD_ICD=ON", "-DBUILD_CUBE=ON", "-DBUILD_VULKANINFO=ON", "-DINSTALL_ICD=OFF", # we will manually place it in a nonconflicting location "-DGLSLANG_INSTALL_DIR=#{Formula["glslang"].opt_prefix}", "-DVULKAN_HEADERS_INSTALL_DIR=#{Formula["vulkan-headers"].opt_prefix}", "-DVULKAN_LOADER_INSTALL_DIR=#{Formula["vulkan-loader"].opt_prefix}", "-DCMAKE_INSTALL_RPATH=#{rpath(target: Formula["vulkan-loader"].opt_lib)}", ] args += if OS.mac? ["-DMOLTENVK_REPO_ROOT=#{Formula["molten-vk"].opt_prefix}"] else [ "-DBUILD_WSI_DIRECTFB_SUPPORT=OFF", "-DBUILD_WSI_WAYLAND_SUPPORT=ON", "-DBUILD_WSI_XCB_SUPPORT=ON", "-DBUILD_WSI_XLIB_SUPPORT=ON", ] end system "cmake", "-S", ".", "-B", "build", *args, *std_cmake_args system "cmake", "--build", "build" system "cmake", "--install", "build" (lib/"mock_icd").install (buildpath/"build/icd/VkICD_mock_icd.json").realpath, shared_library("build/icd/libVkICD_mock_icd") return unless OS.mac? targets = [ Formula["molten-vk"].opt_lib/shared_library("libMoltenVK"), Formula["vulkan-loader"].opt_lib/shared_library("libvulkan", Formula["vulkan-loader"].version.to_s), ] prefix.glob("cube/*.app/Contents/Frameworks").each do |framework_dir| ln_sf targets, framework_dir, verbose: true end (bin/"vkcube").write_env_script "/usr/bin/open", "-a #{prefix}/cube/vkcube.app", {} (bin/"vkcubepp").write_env_script "/usr/bin/open", "-a #{prefix}/cube/vkcubepp.app", {} end def caveats <<~EOS The mock ICD files have been installed in #{opt_lib}/mock_icd You can use them with the Vulkan Loader by setting export VK_ICD_FILENAMES=#{opt_lib}/mock_icd/VkICD_mock_icd.json EOS end test do with_env(VK_ICD_FILENAMES: lib/"mock_icd/VkICD_mock_icd.json") do assert_match "Vulkan Mock Device", shell_output("#{bin}/vulkaninfo --summary") end return if !OS.mac? || (Hardware::CPU.intel? && ENV["HOMEBREW_GITHUB_ACTIONS"]) with_env(XDG_DATA_DIRS: testpath) do assert_match "DRIVER_ID_MOLTENVK", shell_output("#{bin}/vulkaninfo --summary") end end end