소스 검색

Add xgrammar package (#7169)

* feat: try to support xgrammar

* chore: 1. support shared (not limited to static) 2. move xmake.lua to port

* Update packages/x/xgrammar/port/xmake.lua

Co-authored-by: Saikari <[email protected]>

* Support arm64 for MSVC 2019

* fixup

* Update xmake.lua

* Try wrap static in `on_load` for MSVC 2019 arm64

* Update xmake.lua

* on_check("windows", function (package)

* Limit BSD OS

* Update xmake.lua

* Update xmake.lua

* Update xmake.lua

---------

Co-authored-by: Saikari <[email protected]>
DarkSharpness 3 달 전
부모
커밋
b77f8f9816
2개의 변경된 파일80개의 추가작업 그리고 0개의 파일을 삭제
  1. 29 0
      packages/x/xgrammar/port/xmake.lua
  2. 51 0
      packages/x/xgrammar/xmake.lua

+ 29 - 0
packages/x/xgrammar/port/xmake.lua

@@ -0,0 +1,29 @@
+option("python_bindings", {default = false, description = "Build Python bindings"})
+
+add_requires("dlpack 1.1")
+add_rules("mode.debug", "mode.release")
+
+-- config dependencies
+if has_config("python_bindings") then
+    add_requires("nanobind v2.5.0")
+end
+
+-- common global settings
+add_packages("dlpack")
+set_languages("c++17")
+add_includedirs("3rdparty/picojson")
+add_includedirs("include", {public = true})
+add_headerfiles("include/(**.h)")
+
+-- xgrammar static library
+target("xgrammar")
+    set_kind("$(kind)")
+    add_files("cpp/*.cc")
+    add_files("cpp/support/*.cc")
+    if has_config("python_bindings") then
+        add_files("cpp/nanobind/*.cc")
+        add_packages("nanobind")
+    end
+    if is_plat("windows") and is_kind("shared") then
+        add_rules("utils.symbols.export_all", {export_classes = true})
+    end

+ 51 - 0
packages/x/xgrammar/xmake.lua

@@ -0,0 +1,51 @@
+package("xgrammar")
+    set_homepage("https://xgrammar.mlc.ai/")
+    set_description("Fast, Flexible and Portable Structured Generation")
+    set_license("Apache-2.0")
+
+    add_urls("https://github.com/mlc-ai/xgrammar/archive/refs/tags/$(version).tar.gz",
+             "https://github.com/mlc-ai/xgrammar.git")
+    add_versions("v0.1.19", "f05f8d05b12b29523a2f299535a42180e665ce80109360a6afafc300d82f1b78")
+
+    add_configs("python_bindings", {description = "Build Python bindings", default = false, type = "boolean"})
+    add_deps("dlpack 1.1")
+
+    on_check("windows", function (package)
+        import("core.tool.toolchain")
+        local msvc = toolchain.load("msvc", {plat = package:plat(), arch = package:arch()})
+        local vs = msvc:config("vs")
+        if vs and tonumber(vs) < 2022 and package:is_arch("arm64") then
+            if package:config("shared") then
+                raise("package(xgrammar): MSVC 2019 and earlier do not support ARM64 shared library builds.")
+            end
+        end
+    end)
+
+    on_install("!bsd", function (package)
+        local configs = {}
+        configs.python_bindings = package:config("python_bindings")
+        os.cp(path.join(package:scriptdir(), "port", "xmake.lua"), "xmake.lua")
+        import("package.tools.xmake").install(package, configs)
+    end)
+
+    on_test(function (package)
+        assert(package:check_cxxsnippets({test = [[
+#include <string>
+#include <vector>
+
+static auto test() -> void {
+  auto compiler = xgrammar::GrammarCompiler{
+      xgrammar::TokenizerInfo{std::vector<std::string>{}},
+  };
+  constexpr auto rule =
+      R"(
+root ::= rule1 rule2 | "abc"
+rule1 ::= "abc" | ""
+rule2 ::= "def" rule3 | ""
+rule3 ::= "ghi""
+)";
+
+  compiler.CompileJSONSchema(rule);
+}
+        ]]}, {configs = {languages = "c++17"}, includes = "xgrammar/xgrammar.h"}))
+    end)