cmake: add constraint_solver_pybind11 support

This commit is contained in:
Corentin Le Molgat
2024-04-19 10:40:57 +02:00
parent 4cad8a7756
commit 96ddef27d9
4 changed files with 38 additions and 1 deletions

View File

@@ -314,6 +314,7 @@ file(GENERATE OUTPUT ${PYTHON_PROJECT_DIR}/algorithms/__init__.py CONTENT "")
file(GENERATE OUTPUT ${PYTHON_PROJECT_DIR}/algorithms/python/__init__.py CONTENT "")
file(GENERATE OUTPUT ${PYTHON_PROJECT_DIR}/bop/__init__.py CONTENT "")
file(GENERATE OUTPUT ${PYTHON_PROJECT_DIR}/constraint_solver/__init__.py CONTENT "")
file(GENERATE OUTPUT ${PYTHON_PROJECT_DIR}/constraint_solver/python/__init__.py CONTENT "")
file(GENERATE OUTPUT ${PYTHON_PROJECT_DIR}/glop/__init__.py CONTENT "")
file(GENERATE OUTPUT ${PYTHON_PROJECT_DIR}/graph/__init__.py CONTENT "")
file(GENERATE OUTPUT ${PYTHON_PROJECT_DIR}/graph/python/__init__.py CONTENT "")
@@ -461,6 +462,8 @@ add_custom_command(
$<TARGET_FILE:min_cost_flow_pybind11> ${PYTHON_PROJECT}/graph/python
COMMAND ${CMAKE_COMMAND} -E copy
$<TARGET_FILE:pywrapcp> ${PYTHON_PROJECT}/constraint_solver
COMMAND ${CMAKE_COMMAND} -E copy
$<TARGET_FILE:constraint_solver_pybind11> ${PYTHON_PROJECT}/constraint_solver/python
COMMAND ${CMAKE_COMMAND} -E copy
$<TARGET_FILE:pywraplp> ${PYTHON_PROJECT}/linear_solver
COMMAND ${CMAKE_COMMAND} -E copy
@@ -490,6 +493,7 @@ add_custom_command(
max_flow_pybind11
min_cost_flow_pybind11
pywrapcp
constraint_solver_pybind11
routing_pybind11
pywraplp
model_builder_helper_pybind11
@@ -526,6 +530,7 @@ add_custom_command(
COMMAND ${stubgen_EXECUTABLE} -p ortools.graph.python.max_flow --output .
COMMAND ${stubgen_EXECUTABLE} -p ortools.graph.python.min_cost_flow --output .
COMMAND ${stubgen_EXECUTABLE} -p ortools.constraint_solver.pywrapcp --output .
COMMAND ${stubgen_EXECUTABLE} -p ortools.constraint_solver.python.constraint_solver --output .
COMMAND ${stubgen_EXECUTABLE} -p ortools.linear_solver.pywraplp --output .
COMMAND ${stubgen_EXECUTABLE} -p ortools.linear_solver.python.model_builder_helper --output .
COMMAND ${stubgen_EXECUTABLE} -p pybind11_abseil.status --output .

View File

@@ -11,6 +11,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
# pywrapcp
set_property(SOURCE routing.i PROPERTY CPLUSPLUS ON)
set_property(SOURCE routing.i PROPERTY SWIG_MODULE_NAME pywrapcp)
set_property(SOURCE routing.i PROPERTY COMPILE_DEFINITIONS
@@ -47,6 +48,33 @@ if(MSVC)
target_link_libraries(pywrapcp PRIVATE ${Python3_LIBRARIES})
endif()
# constraint_solver
pybind11_add_module(constraint_solver_pybind11 MODULE constraint_solver.cc)
set_target_properties(constraint_solver_pybind11 PROPERTIES
LIBRARY_OUTPUT_NAME "constraint_solver")
# note: macOS is APPLE and also UNIX !
if(APPLE)
set_target_properties(constraint_solver_pybind11 PROPERTIES
SUFFIX ".so"
INSTALL_RPATH "@loader_path;@loader_path/../../../${PYTHON_PROJECT}/.libs"
)
set_property(TARGET constraint_solver_pybind11 APPEND PROPERTY
LINK_FLAGS "-flat_namespace -undefined suppress"
)
elseif(UNIX)
set_target_properties(constraint_solver_pybind11 PROPERTIES
INSTALL_RPATH "$ORIGIN:$ORIGIN/../../../${PYTHON_PROJECT}/.libs"
)
endif()
target_link_libraries(constraint_solver_pybind11 PRIVATE
${PROJECT_NAMESPACE}::ortools
pybind11_native_proto_caster
)
add_library(${PROJECT_NAMESPACE}::constraint_solver_pybind11 ALIAS constraint_solver_pybind11)
# Test
if(BUILD_TESTING)
file(GLOB PYTHON_SRCS "*_test.py")
foreach(FILE_NAME IN LISTS PYTHON_SRCS)

View File

@@ -15,7 +15,7 @@
"""Test for constraint_solver pybind11 layer."""
from absl.testing import absltest
from ortools.constraint_solver import constraint_solver
from ortools.constraint_solver.python import constraint_solver
class ConstraintSolverTest(absltest.TestCase):

View File

@@ -71,6 +71,10 @@ setup(
'$<TARGET_FILE_NAME:pywrapcp>',
'*.pyi'
],
'@PYTHON_PROJECT@.constraint_solver.python':[
'$<TARGET_FILE_NAME:constraint_solver_pybind11>',
'*.pyi'
],
'@PYTHON_PROJECT@.linear_solver':[
'$<TARGET_FILE_NAME:pywraplp>',
'*.pyi'