@@ -18,11 +18,41 @@ target_link_libraries(xgrammar_bindings PRIVATE python_methods)
1818
1919if (DEFINED SKBUILD_PROJECT_NAME)
2020 # Building wheel through scikit-build-core
21- set (LIB_OUTPUT_DIRECTORY xgrammar)
21+ set (LIB_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} / xgrammar)
2222else ()
2323 set (LIB_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR} /python/xgrammar)
2424endif ()
2525
26+ set (STUBFILE_OUTPUTS
27+ ${LIB_OUTPUT_DIRECTORY} /xgrammar_bindings/__init__.pyi
28+ ${LIB_OUTPUT_DIRECTORY} /xgrammar_bindings/config.pyi
29+ ${LIB_OUTPUT_DIRECTORY} /xgrammar_bindings/kernels.pyi
30+ ${LIB_OUTPUT_DIRECTORY} /xgrammar_bindings/testing/__init__.pyi
31+ ${LIB_OUTPUT_DIRECTORY} /xgrammar_bindings/testing/grammar_functor.pyi
32+ )
33+
34+ add_custom_command (
35+ OUTPUT ${STUBFILE_OUTPUTS}
36+ COMMAND "${Python_EXECUTABLE} " -m nanobind.stubgen -m xgrammar_bindings -r -O
37+ "${LIB_OUTPUT_DIRECTORY} "
38+ COMMAND ${CMAKE_COMMAND} -E make_directory ${LIB_OUTPUT_DIRECTORY} /xgrammar_bindings/testing
39+ # See https://github.com/wjakob/nanobind/issues/989 - the default place that these bindings are
40+ # generated in is incorrect.
41+ COMMAND ${CMAKE_COMMAND} -E rename ${LIB_OUTPUT_DIRECTORY} /xgrammar_bindings.pyi
42+ ${LIB_OUTPUT_DIRECTORY} /xgrammar_bindings/__init__.pyi
43+ COMMAND ${CMAKE_COMMAND} -E rename ${LIB_OUTPUT_DIRECTORY} /config/__init__.pyi
44+ ${LIB_OUTPUT_DIRECTORY} /xgrammar_bindings/config.pyi
45+ COMMAND ${CMAKE_COMMAND} -E rename ${LIB_OUTPUT_DIRECTORY} /kernels/__init__.pyi
46+ ${LIB_OUTPUT_DIRECTORY} /xgrammar_bindings/kernels.pyi
47+ COMMAND ${CMAKE_COMMAND} -E rename ${LIB_OUTPUT_DIRECTORY} /testing/__init__.pyi
48+ ${LIB_OUTPUT_DIRECTORY} /xgrammar_bindings/testing/__init__.pyi
49+ COMMAND ${CMAKE_COMMAND} -E rename ${LIB_OUTPUT_DIRECTORY} /testing/grammar_functor/__init__.pyi
50+ ${LIB_OUTPUT_DIRECTORY} /xgrammar_bindings/testing/grammar_functor.pyi
51+ WORKING_DIRECTORY "${LIB_OUTPUT_DIRECTORY} "
52+ DEPENDS xgrammar_bindings
53+ )
54+ add_custom_target (xgrammar_stubfiles ALL DEPENDS ${STUBFILE_OUTPUTS} )
55+
2656set_target_properties (xgrammar_bindings PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${LIB_OUTPUT_DIRECTORY} )
2757set_target_properties (
2858 xgrammar_bindings PROPERTIES LIBRARY_OUTPUT_DIRECTORY_DEBUG ${LIB_OUTPUT_DIRECTORY}
@@ -33,3 +63,6 @@ set_target_properties(
3363set_target_properties (
3464 xgrammar_bindings PROPERTIES LIBRARY_OUTPUT_DIRECTORY_REL_WITH_DEB_INFO ${LIB_OUTPUT_DIRECTORY}
3565)
66+
67+ install (TARGETS xgrammar_bindings DESTINATION .)
68+ install (DIRECTORY ${LIB_OUTPUT_DIRECTORY} /xgrammar_bindings DESTINATION .)
0 commit comments