xmake.lua 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package("xgrammar")
  2. set_homepage("https://xgrammar.mlc.ai/")
  3. set_description("Fast, Flexible and Portable Structured Generation")
  4. set_license("Apache-2.0")
  5. add_urls("https://github.com/mlc-ai/xgrammar/archive/refs/tags/$(version).tar.gz",
  6. "https://github.com/mlc-ai/xgrammar.git")
  7. add_versions("v0.1.19", "f05f8d05b12b29523a2f299535a42180e665ce80109360a6afafc300d82f1b78")
  8. add_configs("python_bindings", {description = "Build Python bindings", default = false, type = "boolean"})
  9. add_deps("dlpack 1.1")
  10. on_check("windows", function (package)
  11. import("core.tool.toolchain")
  12. local msvc = toolchain.load("msvc", {plat = package:plat(), arch = package:arch()})
  13. local vs = msvc:config("vs")
  14. if vs and tonumber(vs) < 2022 and package:is_arch("arm64") then
  15. if package:config("shared") then
  16. raise("package(xgrammar): MSVC 2019 and earlier do not support ARM64 shared library builds.")
  17. end
  18. end
  19. end)
  20. on_install("!bsd", function (package)
  21. local configs = {}
  22. configs.python_bindings = package:config("python_bindings")
  23. os.cp(path.join(package:scriptdir(), "port", "xmake.lua"), "xmake.lua")
  24. import("package.tools.xmake").install(package, configs)
  25. end)
  26. on_test(function (package)
  27. assert(package:check_cxxsnippets({test = [[
  28. #include <string>
  29. #include <vector>
  30. static auto test() -> void {
  31. auto compiler = xgrammar::GrammarCompiler{
  32. xgrammar::TokenizerInfo{std::vector<std::string>{}},
  33. };
  34. constexpr auto rule =
  35. R"(
  36. root ::= rule1 rule2 | "abc"
  37. rule1 ::= "abc" | ""
  38. rule2 ::= "def" rule3 | ""
  39. rule3 ::= "ghi""
  40. )";
  41. compiler.CompileJSONSchema(rule);
  42. }
  43. ]]}, {configs = {languages = "c++17"}, includes = "xgrammar/xgrammar.h"}))
  44. end)