@@ -39,6 +39,7 @@ if(NOT nanobind_FOUND)
3939 external/nanobind
4040 ${CMAKE_CURRENT_BINARY_DIR} /external/nanobind
4141 )
42+ message (STATUS "Will use nanobind submodule." )
4243else ()
4344 message (STATUS "Found installed nanobind." )
4445endif ()
@@ -107,12 +108,18 @@ function(list_filter list regular_expression dest_list)
107108 set (${dest_list} ${list} PARENT_SCOPE)
108109endfunction (list_filter)
109110
110- function (CREATE_PYTHON_TARGET target_name COMPILE_OPTIONS dependencies)
111+ function (
112+ create_python_target
113+ target_name
114+ compile_options
115+ dependencies
116+ generate_stubs
117+ )
111118 nanobind_add_module(${target_name} ${PYWRAP_SOURCES} ${PYWRAP_HEADERS} )
112119 add_dependencies (${PROJECT_NAME} _python ${target_name} )
113120
114121 target_link_libraries (${target_name} PUBLIC ${dependencies} )
115- target_compile_options (${target_name} PRIVATE ${COMPILE_OPTIONS } )
122+ target_compile_options (${target_name} PRIVATE ${compile_options } )
116123 target_link_libraries (${target_name} PRIVATE proxsuite)
117124 target_compile_definitions (
118125 ${target_name}
@@ -133,7 +140,7 @@ function(CREATE_PYTHON_TARGET target_name COMPILE_OPTIONS dependencies)
133140 if (LINK_PYTHON_INTERFACE_TO_OPENMP)
134141 target_link_libraries (${target_name} PRIVATE ${OpenMP_CXX_LIBRARIES} )
135142 endif (LINK_PYTHON_INTERFACE_TO_OPENMP)
136- else (BUILD_WITH_OPENMP_SUPPORT )
143+ else ()
137144 list_filter("${PYWRAP_HEADERS} " "expose-parallel" PYWRAP_HEADERS)
138145 endif (BUILD_WITH_OPENMP_SUPPORT)
139146
@@ -173,16 +180,26 @@ function(CREATE_PYTHON_TARGET target_name COMPILE_OPTIONS dependencies)
173180 endif ()
174181
175182 install (TARGETS ${target_name} DESTINATION ${${PYWRAP} _INSTALL_DIR})
176- if (GENERATE_PYTHON_STUBS)
183+ if (${generate_stubs} )
184+ set (
185+ stub_outputs
186+ ${target_name} /__init__.pyi
187+ ${target_name} /helpers.pyi
188+ ${target_name} /proxqp/__init__.pyi
189+ ${target_name} /proxqp/dense.pyi
190+ ${target_name} /proxqp/sparse.pyi
191+ )
177192 nanobind_add_stub(
178193 ${target_name} _stub
179194 MODULE ${target_name}
180- OUTPUT ${target_name} .pyi
195+ OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}
196+ OUTPUT ${stub_outputs}
197+ RECURSIVE
181198 PYTHON_PATH $<TARGET_FILE_DIR:${target_name} >
182199 DEPENDS ${target_name}
183200 )
184201 install (
185- FILES ${CMAKE_CURRENT_BINARY_DIR} /${target_name} .pyi
202+ DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /${target_name}
186203 DESTINATION ${${PYWRAP} _INSTALL_DIR}
187204 )
188205 endif ()
@@ -200,23 +217,25 @@ else()
200217 set (AVX512_COMPILE_OPTION "-mavx512f" )
201218endif ()
202219
203- CREATE_PYTHON_TARGET (proxsuite_pywrap "" proxsuite)
220+ create_python_target (proxsuite_pywrap "" proxsuite ${GENERATE_PYTHON_STUBS} )
204221if (
205222 BUILD_WITH_VECTORIZATION_SUPPORT
206223 AND ${CMAKE_SYSTEM_PROCESSOR} MATCHES "(x86)|(X86)|(amd64)|(AMD64)"
207224)
208225 if (BUILD_BINDINGS_WITH_AVX2_SUPPORT)
209- CREATE_PYTHON_TARGET (
226+ create_python_target (
210227 proxsuite_pywrap_avx2
211228 "${AVX2_COMPILE_OPTION} ;${FMA_COMPILE_OPTION} "
212229 proxsuite-vectorized
230+ FALSE
213231 )
214232 endif (BUILD_BINDINGS_WITH_AVX2_SUPPORT)
215233 if (BUILD_BINDINGS_WITH_AVX512_SUPPORT)
216- CREATE_PYTHON_TARGET (
234+ create_python_target (
217235 proxsuite_pywrap_avx512
218236 "${AVX512_COMPILE_OPTION} ;${FMA_COMPILE_OPTION} "
219237 proxsuite-vectorized
238+ FALSE
220239 )
221240 endif (BUILD_BINDINGS_WITH_AVX512_SUPPORT)
222241endif ()
0 commit comments