xmake.lua 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package("slang")
  2. set_homepage("https://github.com/shader-slang/slang")
  3. set_description("Making it easier to work with shaders")
  4. set_license("MIT")
  5. add_urls("https://github.com/shader-slang/slang.git")
  6. add_versions("v2025.11.0", "ee51fe592747fc66bd0b5757207583198068b5bd")
  7. add_versions("v2025.6.3", "b9300bae08a77df6ef2efe2b62de14a13b10b9a4")
  8. add_versions("v2024.1.18", "efdbb954c57b89362e390f955d45f90e59d66878")
  9. add_versions("v2024.1.17", "62b7219e715bd4c0f984bcd98c9767fb6422c78f")
  10. add_configs("shared", { description = "Build shared library", default = true, type = "boolean", readonly = true })
  11. add_configs("embed_stdlib_source", { description = "Embed stdlib source in the binary", default = true, type = "boolean" })
  12. add_configs("embed_stdlib", { description = "Build slang with an embedded version of the stdlib", default = false, type = "boolean" })
  13. add_configs("full_ir_validation", { description = "Enable full IR validation (SLOW!)", default = false, type = "boolean" })
  14. add_configs("gfx", { description = "Enable gfx targets", default = false, type = "boolean" })
  15. add_configs("slangd", { description = "Enable language server target", default = false, type = "boolean" })
  16. add_configs("slangc", { description = "Enable standalone compiler target", default = true, type = "boolean" })
  17. add_configs("slangrt", { description = "Enable runtime target", default = false, type = "boolean" })
  18. add_configs("slang_glslang", { description = "Enable glslang dependency and slang-glslang wrapper target", default = false, type = "boolean" })
  19. add_configs("slang_llvm_flavor", { description = "How to get or build slang-llvm (available options: FETCH_BINARY, USE_SYSTEM_LLVM, DISABLE)", default = "DISABLE", type = "string" })
  20. add_deps("cmake")
  21. add_deps("miniz")
  22. on_install("windows|x64", "macosx", "linux|x86_64", function (package)
  23. io.replace("cmake/SlangTarget.cmake", [[set_property(TARGET ${target} PROPERTY SUFFIX ".dylib")]], "", {plain = true})
  24. local configs = {"-DSLANG_ENABLE_TESTS=OFF", "-DSLANG_ENABLE_EXAMPLES=OFF", "-DSLANG_USE_SYSTEM_MINIZ=ON"}
  25. table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:is_debug() and "Debug" or "Release"))
  26. table.insert(configs, "-DSLANG_LIB_TYPE=" .. (package:config("shared") and "SHARED" or "STATIC"))
  27. table.insert(configs, "-DSLANG_EMBED_STDLIB_SOURCE=" .. (package:config("embed_stdlib_source") and "ON" or "OFF"))
  28. table.insert(configs, "-DSLANG_EMBED_STDLIB=" .. (package:config("embed_stdlib") and "ON" or "OFF"))
  29. table.insert(configs, "-DSLANG_ENABLE_FULL_IR_VALIDATION=" .. (package:config("full_ir_validation") and "ON" or "OFF"))
  30. table.insert(configs, "-DSLANG_ENABLE_ASAN=" .. (package:config("asan") and "ON" or "OFF"))
  31. table.insert(configs, "-DSLANG_ENABLE_GFX=" .. (package:config("gfx") and "ON" or "OFF"))
  32. table.insert(configs, "-DSLANG_ENABLE_SLANGD=" .. (package:config("slangd") and "ON" or "OFF"))
  33. table.insert(configs, "-DSLANG_ENABLE_SLANGC=" .. (package:config("slangc") and "ON" or "OFF"))
  34. table.insert(configs, "-DSLANG_ENABLE_SLANGRT=" .. (package:config("slangrt") and "ON" or "OFF"))
  35. table.insert(configs, "-DSLANG_ENABLE_SLANG_GLSLANG=" .. (package:config("slang_glslang") and "ON" or "OFF"))
  36. table.insert(configs, "-DSLANG_SLANG_LLVM_FLAVOR=" .. package:config("slang_llvm_flavor"))
  37. io.replace("CMakeLists.txt", [[find_package(Threads REQUIRED)]], [[find_package(Threads REQUIRED)
  38. find_package(miniz CONFIG REQUIRED)
  39. add_library(miniz ALIAS miniz::miniz)
  40. get_target_property(MINIZ_INCLUDE_DIRS miniz::miniz INTERFACE_INCLUDE_DIRECTORIES)
  41. include_directories(MINIZ_INCLUDE_DIRS)]], {plain = true})
  42. import("package.tools.cmake").install(package, configs)
  43. package:addenv("PATH", "bin")
  44. end)
  45. on_test(function (package)
  46. assert(package:check_cxxsnippets({ test = [[
  47. #include <slang-com-ptr.h>
  48. #include <slang.h>
  49. void test() {
  50. Slang::ComPtr<slang::IGlobalSession> global_session;
  51. slang::createGlobalSession(global_session.writeRef());
  52. }
  53. ]] }, {configs = {languages = "c++17"}}))
  54. end)