From 4ca5464e48e4cdb085e07a726f46d59eedc3a301 Mon Sep 17 00:00:00 2001 From: Mizux Seiha Date: Tue, 19 Aug 2025 19:41:20 +0200 Subject: [PATCH] cmake: fix ortools/util/python --- cmake/python.cmake | 11 ++++++ ortools/python/setup.py.in | 2 ++ ortools/util/python/CMakeLists.txt | 55 ++++++++++++++++++++++++++++-- 3 files changed, 66 insertions(+), 2 deletions(-) diff --git a/cmake/python.cmake b/cmake/python.cmake index 7c0e6979f8..2dbb192d3c 100644 --- a/cmake/python.cmake +++ b/cmake/python.cmake @@ -424,6 +424,9 @@ file(COPY ortools/sat/colab/flags.py ortools/sat/colab/visualization.py DESTINATION ${PYTHON_PROJECT_DIR}/sat/colab) +file(COPY + ortools/util/python/solve_interrupter.py + DESTINATION ${PYTHON_PROJECT_DIR}/util/python) # Adds py.typed to make typed packages. file(TOUCH ${PYTHON_PROJECT_DIR}/linear_solver/python/py.typed) @@ -704,6 +707,11 @@ add_custom_command( $ ${PYTHON_PROJECT}/set_cover/python COMMAND ${CMAKE_COMMAND} -E copy $ ${PYTHON_PROJECT}/util/python + COMMAND ${CMAKE_COMMAND} -E copy + $ ${PYTHON_PROJECT}/util/python + COMMAND ${CMAKE_COMMAND} -E + $,copy,true> + $<$:$> ${PYTHON_PROJECT}/util/python COMMAND ${CMAKE_COMMAND} -E touch ${PROJECT_BINARY_DIR}/python/pybind11_timestamp MAIN_DEPENDENCY ortools/python/setup.py.in @@ -727,6 +735,8 @@ add_custom_command( rcpsp_pybind11 set_cover_pybind11 sorted_interval_list_pybind11 + solve_interrupter_pybind11 + $ WORKING_DIRECTORY python COMMAND_EXPAND_LISTS) @@ -767,6 +777,7 @@ add_custom_command( COMMAND ${stubgen_EXECUTABLE} -p ortools.scheduling.python.rcpsp --output . COMMAND ${stubgen_EXECUTABLE} -p ortools.set_cover.python.set_cover --output . COMMAND ${stubgen_EXECUTABLE} -p ortools.util.python.sorted_interval_list --output . + COMMAND ${stubgen_EXECUTABLE} -p ortools.util.python.pybind_solve_interrupter --output . COMMAND ${CMAKE_COMMAND} -E touch ${PROJECT_BINARY_DIR}/python/stub_timestamp MAIN_DEPENDENCY ortools/python/setup.py.in diff --git a/ortools/python/setup.py.in b/ortools/python/setup.py.in index d148a1b0a3..15eccfca83 100644 --- a/ortools/python/setup.py.in +++ b/ortools/python/setup.py.in @@ -139,6 +139,8 @@ setup( ], '@PYTHON_PROJECT@.util.python':[ '$', + '$', + '$', '*.pyi' ], }, diff --git a/ortools/util/python/CMakeLists.txt b/ortools/util/python/CMakeLists.txt index 9631a1b7f2..376830d873 100644 --- a/ortools/util/python/CMakeLists.txt +++ b/ortools/util/python/CMakeLists.txt @@ -14,7 +14,6 @@ pybind11_add_module(sorted_interval_list_pybind11 MODULE sorted_interval_list.cc) set_target_properties(sorted_interval_list_pybind11 PROPERTIES LIBRARY_OUTPUT_NAME "sorted_interval_list") - # note: macOS is APPLE and also UNIX ! if(APPLE) set_target_properties(sorted_interval_list_pybind11 PROPERTIES @@ -24,11 +23,63 @@ elseif(UNIX) set_target_properties(sorted_interval_list_pybind11 PROPERTIES INSTALL_RPATH "$ORIGIN:$ORIGIN/../../../${PYTHON_PROJECT}/.libs") endif() - target_link_libraries(sorted_interval_list_pybind11 PRIVATE ${PROJECT_NAMESPACE}::ortools) add_library(${PROJECT_NAMESPACE}::sorted_interval_list_pybind11 ALIAS sorted_interval_list_pybind11) +add_library(py_solve_interrupter OBJECT + "py_solve_interrupter.h" + "py_solve_interrupter.cc") +set_target_properties(py_solve_interrupter PROPERTIES POSITION_INDEPENDENT_CODE ON) +target_include_directories(py_solve_interrupter PUBLIC + $ + $) +target_link_libraries(py_solve_interrupter PRIVATE absl::base) + +pybind11_add_module(solve_interrupter_pybind11 MODULE pybind_solve_interrupter.cc) +target_sources(solve_interrupter_pybind11 PRIVATE + $) +set_target_properties(solve_interrupter_pybind11 PROPERTIES + LIBRARY_OUTPUT_NAME "pybind_solve_interrupter") +# note: macOS is APPLE and also UNIX ! +if(APPLE) + set_target_properties(solve_interrupter_pybind11 PROPERTIES + SUFFIX ".so" + INSTALL_RPATH "@loader_path;@loader_path/../../../${PYTHON_PROJECT}/.libs") +elseif(UNIX) + set_target_properties(solve_interrupter_pybind11 PROPERTIES + INSTALL_RPATH "$ORIGIN:$ORIGIN/../../../${PYTHON_PROJECT}/.libs") +endif() +target_link_libraries(solve_interrupter_pybind11 PRIVATE ${PROJECT_NAMESPACE}::ortools) +add_library(${PROJECT_NAMESPACE}::solve_interrupter_pybind11 ALIAS solve_interrupter_pybind11) + + if(BUILD_TESTING) + add_library(py_solve_interrupter_testing OBJECT + "py_solve_interrupter_testing.cc") + set_target_properties(py_solve_interrupter_testing PROPERTIES POSITION_INDEPENDENT_CODE ON) + target_include_directories(py_solve_interrupter_testing PUBLIC + $ + $) + target_link_libraries(py_solve_interrupter_testing PRIVATE absl::base) + + pybind11_add_module(solve_interrupter_testing_pybind11 MODULE + pybind_solve_interrupter_testing.cc) + target_sources(solve_interrupter_testing_pybind11 PRIVATE + $ + ) + set_target_properties(solve_interrupter_testing_pybind11 PROPERTIES + LIBRARY_OUTPUT_NAME "pybind_solve_interrupter_testing") + # note: macOS is APPLE and also UNIX ! + if(APPLE) + set_target_properties(solve_interrupter_testing_pybind11 PROPERTIES + SUFFIX ".so" + INSTALL_RPATH "@loader_path;@loader_path/../../../${PYTHON_PROJECT}/.libs") + elseif(UNIX) + set_target_properties(solve_interrupter_testing_pybind11 PROPERTIES + INSTALL_RPATH "$ORIGIN:$ORIGIN/../../../${PYTHON_PROJECT}/.libs") + endif() + target_link_libraries(solve_interrupter_testing_pybind11 PRIVATE ${PROJECT_NAMESPACE}::ortools) + file(GLOB PYTHON_SRCS "*_test.py") foreach(FILE_NAME IN LISTS PYTHON_SRCS) add_python_test(FILE_NAME ${FILE_NAME})