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.341.0.tar.gz" sha256 "dc65f1ea97dd0b2155c2281a79e87d27183c0737fb96377744091a3c8460ae1e" 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: "ffb31e96eb4dc43c6f9f73840414463bd4efe9dda9b968f963bce10fedbe6f0b" sha256 arm64_sequoia: "a85fcd934aec5357f4e7b30e92836c23d3fe0179693f4f1a65e0ace50682be21" sha256 arm64_sonoma: "b5a4852525168f179c919237923f3f1b63634d3d0a628ab4d865b8de4ff99a5e" sha256 cellar: :any, sonoma: "56e4f7b6c0bdbca461bea3d1f7cfde6d1fbf8fc482c4ee8b6bf6a6153a777c7b" sha256 cellar: :any_skip_relocation, arm64_linux: "d22b81469a824feac0579d9b695fda7b3ac29b498f9bdcbaae02d0b3f0a48757" sha256 cellar: :any_skip_relocation, x86_64_linux: "40c70106f3c6b5986bfaa94093d45dbdc29f00c0a67eb5840c1ed37a5577e394" 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