xmake.lua 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package("nzsl")
  2. set_homepage("https://github.com/NazaraEngine/ShaderLang")
  3. set_description("NZSL is a shader language inspired by Rust and C++ which compiles to GLSL or SPIRV")
  4. set_license("MIT")
  5. add_urls("https://github.com/NazaraEngine/ShaderLang/archive/refs/tags/$(version).tar.gz",
  6. "https://github.com/NazaraEngine/ShaderLang.git")
  7. add_versions("v1.1.2", "48b3e5ce18f0c3d4bf22c0201ab41664b30c1d40f7df31b776d2d37a1559c0fb")
  8. add_versions("v1.1.1", "e4e37d3274936d8f040d4ed29d2aa20b6cc93de755aa070309fd01cc17140525")
  9. add_versions("v1.1.0", "8b401a199c6ee7b2cc3b24871bbec2857a70ff47a25f043e35db54fa1f4129ef")
  10. add_versions("v1.0.0", "ef434fec5d32ddf64f2f7c7691a4d96a6ac24cab4cc6c091d46a542c86825359")
  11. set_policy("package.strict_compatibility", true)
  12. add_deps("nazarautils")
  13. add_deps("fast_float", "frozen", "ordered_map", {private = true})
  14. add_configs("cbinding", {description = "Builds the C binding library (CNZSL)", default = false, type = "boolean"})
  15. add_configs("nzsla", {description = "Includes standalone archiver", default = true, type = "boolean"})
  16. add_configs("nzslc", {description = "Includes standalone compiler", default = true, type = "boolean"})
  17. add_configs("symbols", {description = "Enable debug symbols in release", default = false, type = "boolean"})
  18. if is_plat("windows", "linux", "mingw", "macosx", "bsd") then
  19. add_configs("fs_watcher", {description = "Includes filesystem watcher", default = true, type = "boolean"})
  20. end
  21. if is_plat("wasm") then
  22. add_configs("shared", {description = "Build shared library.", default = false, type = "boolean", readonly = true})
  23. end
  24. on_load(function (package)
  25. package:addenv("PATH", "bin")
  26. if not package:config("shared") then
  27. package:add("defines", "NZSL_STATIC")
  28. package:add("deps", "fmt")
  29. end
  30. if package:config("fs_watcher") then
  31. package:add("deps", "efsw")
  32. end
  33. if package:config("nzsla") then
  34. package:add("deps", "lz4", {private = package:config("shared")})
  35. end
  36. if package:config("nzslc") then
  37. package:add("deps", "cxxopts >=3.1.1", "nlohmann_json", {private = true})
  38. end
  39. end)
  40. on_install(function (package)
  41. local configs = {}
  42. configs.asan = package:config("asan")
  43. configs.cbinding = package:config("cbinding")
  44. configs.fs_watcher = package:config("fs_watcher") or false
  45. configs.erronwarn = false
  46. configs.examples = false
  47. configs.tests = false
  48. configs.with_nzsla = package:config("nzsla") or false
  49. configs.with_nzslc = package:config("nzslc") or false
  50. -- enable unitybuild for faster compilation except on MinGW (doesn't like big object even with /bigobj)
  51. if not os.getenv("NAZARA_DISABLE_UNITYBUILD") then
  52. configs.unitybuild = not package:is_plat("mingw")
  53. end
  54. if package:is_debug() then
  55. configs.mode = "debug"
  56. elseif package:config("symbols") then
  57. configs.mode = "releasedbg"
  58. else
  59. configs.mode = "release"
  60. end
  61. import("package.tools.xmake").install(package, configs)
  62. package:add("linkorders", "cnzsl", "nzsl")
  63. end)
  64. on_test(function (package)
  65. if (package:config("nzsla") or package:config("nzslc")) and not package:is_cross() then
  66. local envs
  67. if package:is_plat("windows") then
  68. import("core.tool.toolchain")
  69. local msvc = package:toolchain("msvc")
  70. if msvc and msvc:check() then
  71. envs = msvc:runenvs()
  72. end
  73. elseif package:is_plat("mingw") then
  74. import("core.tool.toolchain")
  75. local mingw = package:toolchain("mingw")
  76. if mingw and mingw:check() then
  77. envs = mingw:runenvs()
  78. end
  79. end
  80. if package:config("nzsla") then
  81. os.vrunv("nzsla", {"--version"}, {envs = envs})
  82. end
  83. if package:config("nzslc") then
  84. os.vrunv("nzslc", {"--version"}, {envs = envs})
  85. end
  86. end
  87. if not package:is_binary() then
  88. assert(package:check_cxxsnippets({test = [[
  89. void test() {
  90. nzsl::Ast::ModulePtr shaderModule = nzsl::Parse(R"(
  91. [nzsl_version("1.0")]
  92. module;
  93. struct FragOut
  94. {
  95. value: vec4[f32]
  96. }
  97. [entry(frag)]
  98. fn fragShader() -> FragOut
  99. {
  100. let output: FragOut;
  101. output.value = vec4[f32](0.0, 0.0, 1.0, 1.0);
  102. return output;
  103. }
  104. )");
  105. }
  106. ]]}, {configs = {languages = "c++17"}, includes = "NZSL/Parser.hpp"}))
  107. end
  108. end)