Skip to content

Commit 355689c

Browse files
committed
Generate and install stubfiles into the wheel
1 parent e7a1dea commit 355689c

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ endif()
7878

7979
if(XGRAMMAR_BUILD_PYTHON_BINDINGS)
8080
add_subdirectory(${PROJECT_SOURCE_DIR}/cpp/nanobind)
81-
install(TARGETS xgrammar_bindings DESTINATION .)
8281
endif()
8382

8483
if(XGRAMMAR_BUILD_CXX_TESTS)

cpp/nanobind/CMakeLists.txt

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,41 @@ target_link_libraries(xgrammar_bindings PRIVATE python_methods)
1818

1919
if(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)
2222
else()
2323
set(LIB_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/python/xgrammar)
2424
endif()
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+
2656
set_target_properties(xgrammar_bindings PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${LIB_OUTPUT_DIRECTORY})
2757
set_target_properties(
2858
xgrammar_bindings PROPERTIES LIBRARY_OUTPUT_DIRECTORY_DEBUG ${LIB_OUTPUT_DIRECTORY}
@@ -33,3 +63,6 @@ set_target_properties(
3363
set_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

Comments
 (0)