Pārlūkot izejas kodu

radeonrays: add package (#6606)

* radeonrays: add package

* fix windows-static

* fix dx12

* fix tools install

* improve spdlog deps
star9029 4 mēneši atpakaļ
vecāks
revīzija
7453c6ea2d
1 mainītis faili ar 91 papildinājumiem un 0 dzēšanām
  1. 91 0
      packages/r/radeonrays/xmake.lua

+ 91 - 0
packages/r/radeonrays/xmake.lua

@@ -0,0 +1,91 @@
+package("radeonrays")
+    set_homepage("https://github.com/GPUOpen-LibrariesAndSDKs/RadeonRays_SDK")
+    set_description("Radeon Rays is ray intersection acceleration library for hardware and software multiplatforms using CPU and GPU")
+    set_license("MIT")
+
+    add_urls("https://github.com/GPUOpen-LibrariesAndSDKs/RadeonRays_SDK/archive/refs/tags/$(version).tar.gz",
+             "https://github.com/GPUOpen-LibrariesAndSDKs/RadeonRays_SDK.git", {submodules = false})
+
+    add_versions("4.1", "96ea69b8942d2b0d58295723aa82ef19517193a09a137d0f7c6bcd44a8ae0368")
+
+    add_configs("dx12", {description = "Enable DX12 backend", default = false, type = "boolean"})
+    add_configs("vulkan", {description = "Enable Vulkan backend", default = false, type = "boolean"})
+    add_configs("embedded", {description = "Enable embedding kernels/shaders into library", default = false, type = "boolean"})
+    add_configs("tools", {description = "Build tools (bvh_analyzer)", default = false, type = "boolean"})
+
+    add_deps("cmake")
+    add_deps("spdlog", {configs = {header_only = false}}) -- require cmake config file
+
+    if is_plat("linux", "bsd") then
+        add_syslinks("pthread")
+    end
+
+    on_load(function (package)
+        if package:config("vulkan") then
+            package:add("deps", "vulkansdk")
+        end
+        if package:config("dx12") then
+            package:add("syslinks", "d3d12", "dxgi", "dxguid")
+        end
+    end)
+
+    on_install(function (package)
+        -- After fmt 10, enum or enum class must have their own specialization (from spdlog)
+        io.replace("src/core/src/radeonrays.cpp", [["rrSetLogLevel({})", log_level]], [["rrSetLogLevel({})", (int)log_level]], {plain = true})
+        if package:config("dx12") then
+            io.replace("src/core/CMakeLists.txt",
+[[add_custom_command(
+        TARGET radeonrays POST_BUILD
+        COMMAND ${CMAKE_COMMAND} -E copy
+        ${PROJECT_SOURCE_DIR}/third_party/dxc/bin/dxcompiler.dll
+        "\$\(OutDir\)/dxcompiler.dll")]] , "", {plain = true})
+            io.replace("src/core/CMakeLists.txt",
+[[add_custom_command(
+        TARGET radeonrays POST_BUILD
+        COMMAND ${CMAKE_COMMAND} -E copy
+        ${PROJECT_SOURCE_DIR}/third_party/dxc/bin/dxil.dll
+        "\$\(OutDir\)/dxil.dll")]] , "", {plain = true})
+        end
+        if not package:config("tools") then
+            io.replace("CMakeLists.txt", "add_subdirectory(bvh_analyzer)", "", {plain = true})
+        end
+        if not package:config("shared") then
+            io.replace("src/core/include/radeonrays.h", "__declspec(dllexport)", "", {plain = true})
+            io.replace("src/core/include/radeonrays.h", "__declspec(dllimport)", "", {plain = true})
+        end
+
+        local file = io.open("CMakeLists.txt", "a")
+        file:write([[
+            include(GNUInstallDirs)
+            install(TARGETS radeonrays
+                RUNTIME DESTINATION bin
+                LIBRARY DESTINATION lib
+                ARCHIVE DESTINATION lib
+            )
+            install(DIRECTORY src/core/include/ DESTINATION include)
+        ]])
+        if package:config("tools") then
+            file:write([[
+                install(TARGETS bvh_analyzer DESTINATION bin)
+            ]])
+        end
+        file:close()
+
+        local configs = {"-DENABLE_TESTING=OFF", "-DENABLE_FUZZING=OFF"}
+        table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:is_debug() and "Debug" or "Release"))
+        table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF"))
+        table.insert(configs, "-DENABLE_VULKAN=" .. (package:config("vulkan") and "ON" or "OFF"))
+        table.insert(configs, "-DENABLE_DX12=" .. (package:config("dx12") and "ON" or "OFF"))
+        table.insert(configs, "-DEMBEDDED_KERNELS=" .. (package:config("embedded") and "ON" or "OFF"))
+        import("package.tools.cmake").install(package, configs)
+    end)
+
+    on_test(function (package)
+        assert(package:has_cxxfuncs("rrCreateContext", {includes = "radeonrays.h"}))
+        if package:config("dx12") then
+            assert(package:has_cxxfuncs("rrGetDevicePtrFromD3D12Resource", {includes = "radeonrays_dx.h"}))
+        end
+        if package:config("vulkan") then
+            assert(package:has_cxxfuncs("rrGetDevicePtrFromVkBuffer", {includes = "radeonrays_vlk.h"}))
+        end
+    end)