xmake.lua 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package("radeonrays")
  2. set_homepage("https://github.com/GPUOpen-LibrariesAndSDKs/RadeonRays_SDK")
  3. set_description("Radeon Rays is ray intersection acceleration library for hardware and software multiplatforms using CPU and GPU")
  4. set_license("MIT")
  5. add_urls("https://github.com/GPUOpen-LibrariesAndSDKs/RadeonRays_SDK/archive/refs/tags/$(version).tar.gz",
  6. "https://github.com/GPUOpen-LibrariesAndSDKs/RadeonRays_SDK.git", {submodules = false})
  7. add_versions("4.1", "96ea69b8942d2b0d58295723aa82ef19517193a09a137d0f7c6bcd44a8ae0368")
  8. add_configs("dx12", {description = "Enable DX12 backend", default = false, type = "boolean"})
  9. add_configs("vulkan", {description = "Enable Vulkan backend", default = false, type = "boolean"})
  10. add_configs("embedded", {description = "Enable embedding kernels/shaders into library", default = false, type = "boolean"})
  11. add_configs("tools", {description = "Build tools (bvh_analyzer)", default = false, type = "boolean"})
  12. add_deps("cmake")
  13. add_deps("spdlog", {configs = {header_only = false}}) -- require cmake config file
  14. if is_plat("linux", "bsd") then
  15. add_syslinks("pthread")
  16. end
  17. on_load(function (package)
  18. if package:config("vulkan") then
  19. package:add("deps", "vulkansdk")
  20. end
  21. if package:config("dx12") then
  22. package:add("syslinks", "d3d12", "dxgi", "dxguid")
  23. end
  24. end)
  25. on_install(function (package)
  26. -- After fmt 10, enum or enum class must have their own specialization (from spdlog)
  27. io.replace("src/core/src/radeonrays.cpp", [["rrSetLogLevel({})", log_level]], [["rrSetLogLevel({})", (int)log_level]], {plain = true})
  28. if package:config("dx12") then
  29. io.replace("src/core/CMakeLists.txt",
  30. [[add_custom_command(
  31. TARGET radeonrays POST_BUILD
  32. COMMAND ${CMAKE_COMMAND} -E copy
  33. ${PROJECT_SOURCE_DIR}/third_party/dxc/bin/dxcompiler.dll
  34. "\$\(OutDir\)/dxcompiler.dll")]] , "", {plain = true})
  35. io.replace("src/core/CMakeLists.txt",
  36. [[add_custom_command(
  37. TARGET radeonrays POST_BUILD
  38. COMMAND ${CMAKE_COMMAND} -E copy
  39. ${PROJECT_SOURCE_DIR}/third_party/dxc/bin/dxil.dll
  40. "\$\(OutDir\)/dxil.dll")]] , "", {plain = true})
  41. end
  42. if not package:config("tools") then
  43. io.replace("CMakeLists.txt", "add_subdirectory(bvh_analyzer)", "", {plain = true})
  44. end
  45. if not package:config("shared") then
  46. io.replace("src/core/include/radeonrays.h", "__declspec(dllexport)", "", {plain = true})
  47. io.replace("src/core/include/radeonrays.h", "__declspec(dllimport)", "", {plain = true})
  48. end
  49. local file = io.open("CMakeLists.txt", "a")
  50. file:write([[
  51. include(GNUInstallDirs)
  52. install(TARGETS radeonrays
  53. RUNTIME DESTINATION bin
  54. LIBRARY DESTINATION lib
  55. ARCHIVE DESTINATION lib
  56. )
  57. install(DIRECTORY src/core/include/ DESTINATION include)
  58. ]])
  59. if package:config("tools") then
  60. file:write([[
  61. install(TARGETS bvh_analyzer DESTINATION bin)
  62. ]])
  63. end
  64. file:close()
  65. local configs = {"-DENABLE_TESTING=OFF", "-DENABLE_FUZZING=OFF"}
  66. table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:is_debug() and "Debug" or "Release"))
  67. table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF"))
  68. table.insert(configs, "-DENABLE_VULKAN=" .. (package:config("vulkan") and "ON" or "OFF"))
  69. table.insert(configs, "-DENABLE_DX12=" .. (package:config("dx12") and "ON" or "OFF"))
  70. table.insert(configs, "-DEMBEDDED_KERNELS=" .. (package:config("embedded") and "ON" or "OFF"))
  71. import("package.tools.cmake").install(package, configs)
  72. end)
  73. on_test(function (package)
  74. assert(package:has_cxxfuncs("rrCreateContext", {includes = "radeonrays.h"}))
  75. if package:config("dx12") then
  76. assert(package:has_cxxfuncs("rrGetDevicePtrFromD3D12Resource", {includes = "radeonrays_dx.h"}))
  77. end
  78. if package:config("vulkan") then
  79. assert(package:has_cxxfuncs("rrGetDevicePtrFromVkBuffer", {includes = "radeonrays_vlk.h"}))
  80. end
  81. end)