From ed8f74273c3852dd0d9bc28397eea41d4e7de4e1 Mon Sep 17 00:00:00 2001 From: Laurent Perron Date: Wed, 16 Jul 2025 17:41:50 +0200 Subject: [PATCH] fix python cp-sat under bazel --- ortools/sat/python/CMakeLists.txt | 51 +++++++++++++++---------------- ortools/sat/python/cp_model.py | 7 ++++- 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/ortools/sat/python/CMakeLists.txt b/ortools/sat/python/CMakeLists.txt index 504c457325..147eb3f34d 100644 --- a/ortools/sat/python/CMakeLists.txt +++ b/ortools/sat/python/CMakeLists.txt @@ -26,7 +26,7 @@ target_link_libraries(${WRAPPERS_NAME} PUBLIC protobuf::libprotobuf) add_library(${PROJECT_NAMESPACE}::${WRAPPERS_NAME} ALIAS ${WRAPPERS_NAME}) -# gen_cp_model_builder_pybind +# gen_cp_model_builder_pybind code generator. add_executable(gen_cp_model_builder_pybind) target_sources(gen_cp_model_builder_pybind PRIVATE "gen_cp_model_builder_pybind.cc") target_include_directories(gen_cp_model_builder_pybind PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) @@ -58,32 +58,10 @@ install(TARGETS gen_cp_model_builder_pybind) add_custom_command( OUTPUT cp_model_builder_pybind.cc COMMAND gen_cp_model_builder_pybind > cp_model_builder_pybind.cc - # DEPENDS ${PROTO_FILE} ${PROTOC_PRG} - COMMENT "Generate C++ protocol buffer for ${PROTO_FILE}" + COMMENT "Generate C++ cp_model_builder_pybind.cc" VERBATIM) - -pybind11_add_module(cp_model_builder_pybind MODULE cp_model_builder_pybind.cc) -set_target_properties(cp_model_builder_pybind PROPERTIES - LIBRARY_OUTPUT_NAME "cp_model_builder") - -# note: macOS is APPLE and also UNIX ! -if(APPLE) - set_target_properties(cp_model_builder_pybind PROPERTIES - SUFFIX ".so" - INSTALL_RPATH "@loader_path;@loader_path/../../../${PYTHON_PROJECT}/.libs") -elseif(UNIX) - set_target_properties(cp_model_builder_pybind PROPERTIES - INSTALL_RPATH "$ORIGIN:$ORIGIN/../../../${PYTHON_PROJECT}/.libs") -endif() -target_link_libraries(cp_model_builder_pybind PRIVATE - ${PROJECT_NAMESPACE}::ortools - protobuf::libprotobuf) - -target_include_directories(cp_model_builder_pybind PRIVATE ${protobuf_SOURCE_DIR}) -add_library(${PROJECT_NAMESPACE}::cp_model_builder_pybind ALIAS cp_model_builder_pybind) - -# gen_sat_parameters_builder_pybind +# gen_sat_parameters_builder_pybind code generator. add_executable(gen_sat_parameters_builder_pybind) target_sources(gen_sat_parameters_builder_pybind PRIVATE "gen_sat_parameters_builder_pybind.cc") target_include_directories(gen_sat_parameters_builder_pybind PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) @@ -115,10 +93,29 @@ install(TARGETS gen_sat_parameters_builder_pybind) add_custom_command( OUTPUT sat_parameters_builder_pybind.cc COMMAND gen_sat_parameters_builder_pybind > sat_parameters_builder_pybind.cc - # DEPENDS ${PROTO_FILE} ${PROTOC_PRG} - COMMENT "Generate C++ protocol buffer for ${PROTO_FILE}" + COMMENT "Generate C++ sat_parameters_builder_pybind.cc" VERBATIM) +# Generate both pybind extensins (cp_model_builder and sat_parameters_builder). +pybind11_add_module(cp_model_builder_pybind MODULE cp_model_builder_pybind.cc) +set_target_properties(cp_model_builder_pybind PROPERTIES + LIBRARY_OUTPUT_NAME "cp_model_builder") + +# note: macOS is APPLE and also UNIX ! +if(APPLE) + set_target_properties(cp_model_builder_pybind PROPERTIES + SUFFIX ".so" + INSTALL_RPATH "@loader_path;@loader_path/../../../${PYTHON_PROJECT}/.libs") +elseif(UNIX) + set_target_properties(cp_model_builder_pybind PROPERTIES + INSTALL_RPATH "$ORIGIN:$ORIGIN/../../../${PYTHON_PROJECT}/.libs") +endif() +target_link_libraries(cp_model_builder_pybind PRIVATE + ${PROJECT_NAMESPACE}::ortools + protobuf::libprotobuf) + +target_include_directories(cp_model_builder_pybind PRIVATE ${protobuf_SOURCE_DIR}) +add_library(${PROJECT_NAMESPACE}::cp_model_builder_pybind ALIAS cp_model_builder_pybind) pybind11_add_module(sat_parameters_builder_pybind MODULE sat_parameters_builder_pybind.cc) set_target_properties(sat_parameters_builder_pybind PROPERTIES diff --git a/ortools/sat/python/cp_model.py b/ortools/sat/python/cp_model.py index 236eb3cba7..a24a0fb9db 100644 --- a/ortools/sat/python/cp_model.py +++ b/ortools/sat/python/cp_model.py @@ -64,8 +64,13 @@ import warnings import numpy as np import pandas as pd +# Make sure the generated cp_model_helper is imported before the builder +# modules as the import duplicates versions of the protobufs. +from ortools.sat.python import ( + cp_model_helper as cmh, +) # pylint: disable=g-bad-import-order + from ortools.sat.python import cp_model_builder as cmb -from ortools.sat.python import cp_model_helper as cmh from ortools.sat.python import sat_parameters_builder as spb from ortools.util.python import sorted_interval_list