|
@@ -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)
|