diff --git a/CMakeLists.txt b/CMakeLists.txt index 85014b32f6..c38ed49775 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -192,21 +192,22 @@ message(STATUS "Build eigen3: ${BUILD_Eigen3}") if(BUILD_LP_PARSER OR BUILD_TESTING) CMAKE_DEPENDENT_OPTION(BUILD_re2 "Build the re2 dependency Library" OFF "NOT BUILD_DEPS" ON) - message(STATUS "Build re2: ${BUILD_re2}") +else() + set(BUILD_re2 OFF) endif() +message(STATUS "Build re2: ${BUILD_re2}") if(BUILD_TESTING) CMAKE_DEPENDENT_OPTION(BUILD_googletest "Build googletest" OFF "NOT BUILD_DEPS" ON) - message(STATUS "Build googletest: ${BUILD_googletest}") - CMAKE_DEPENDENT_OPTION(BUILD_benchmark "Build benchmark" OFF "NOT BUILD_DEPS" ON) - message(STATUS "Build benchmark: ${BUILD_benchmark}") else() set(BUILD_googletest OFF) set(BUILD_benchmark OFF) endif() +message(STATUS "Build googletest: ${BUILD_googletest}") +message(STATUS "Build benchmark: ${BUILD_benchmark}") # Optional third party solvers (enabled by default) ## BOP @@ -237,6 +238,12 @@ if(USE_COINOR) CMAKE_DEPENDENT_OPTION(BUILD_Cbc "Build the Cbc dependency Library" OFF "NOT BUILD_DEPS" ON) message(STATUS "Build Cbc: ${BUILD_Cbc}") +else() + set(BUILD_CoinUtils OFF) + set(BUILD_Osi OFF) + set(BUILD_Clp OFF) + set(BUILD_Cgl OFF) + set(BUILD_Cbc OFF) endif() ## GLOP @@ -252,8 +259,10 @@ message(STATUS "GLPK support: ${USE_GLPK}") if(USE_GLPK) CMAKE_DEPENDENT_OPTION(BUILD_GLPK "Build the GLPK dependency Library" OFF "NOT BUILD_DEPS" ON) - message(STATUS "Build GLPK: ${BUILD_GLPK}") +else() + set(BUILD_GLPK OFF) endif() +message(STATUS "Build GLPK: ${BUILD_GLPK}") ## GUROBI # Since it is dynamicaly loaded upon use, OFF is currently not supported. @@ -267,8 +276,10 @@ message(STATUS "HiGHS support: ${USE_HIGHS}") if(USE_HIGHS) CMAKE_DEPENDENT_OPTION(BUILD_HIGHS "Build the HiGHS dependency Library" OFF "NOT BUILD_DEPS" ON) - message(STATUS "Build HiGHS: ${BUILD_HIGHS}") +else() + set(BUILD_HIGHS OFF) endif() +message(STATUS "Build HiGHS: ${BUILD_HIGHS}") ## PDLP CMAKE_DEPENDENT_OPTION(USE_PDLP "Use the PDLP solver" ON "BUILD_CXX" OFF) @@ -276,8 +287,10 @@ message(STATUS "PDLP support: ${USE_PDLP}") if(USE_PDLP) CMAKE_DEPENDENT_OPTION(BUILD_PDLP "Build the PDLP dependency Library" ON "NOT BUILD_DEPS" ON) - message(STATUS "Build PDLP: ${BUILD_PDLP}") +else() + set(BUILD_PDLP OFF) endif() +message(STATUS "Build PDLP: ${BUILD_PDLP}") ## SCIP # see: https://github.com/scipopt/scip @@ -286,8 +299,10 @@ message(STATUS "SCIP support: ${USE_SCIP}") if(USE_SCIP) CMAKE_DEPENDENT_OPTION(BUILD_SCIP "Build the SCIP dependency Library" OFF "NOT BUILD_DEPS" ON) - message(STATUS "Build SCIP: ${BUILD_SCIP}") +else() + set(BUILD_SCIP OFF) endif() +message(STATUS "Build SCIP: ${BUILD_SCIP}") # Optional third party solvers (disabled by default) ## CPLEX @@ -349,6 +364,12 @@ if(BUILD_DOTNET) option(USE_DOTNET_7 "Use .Net 7.0 support" OFF) message(STATUS ".Net: Use .Net 7.0 support: ${USE_DOTNET_7}") + + option(USE_DOTNET_8 "Use .Net 8.0 LTS support" OFF) + message(STATUS ".Net: Use .Net 8.0 support: ${USE_DOTNET_8}") + + option(USE_DOTNET_9 "Use .Net 9.0 support" OFF) + message(STATUS ".Net: Use .Net 9.0 support: ${USE_DOTNET_9}") endif() if(BUILD_JAVA) diff --git a/Dependencies.txt b/Dependencies.txt index 3644d3f8dd..2ec6f3297b 100644 --- a/Dependencies.txt +++ b/Dependencies.txt @@ -9,7 +9,7 @@ Clp=1.17.7 Cgl=0.60.5 Cbc=2.10.7 GLPK=5.0 -HiGHS=v1.7.2 +HiGHS=v1.8.0 Scip=v900 # Python pybind11=v2.12.0 @@ -17,3 +17,4 @@ pybind11_abseil=52f2739 pybind11_protobuf=3b11990 # Testing googletest=v1.15.2 +benchmark=v1.8.4 diff --git a/cmake/check_deps.cmake b/cmake/check_deps.cmake index 0b565d5b52..88bc8c4db2 100644 --- a/cmake/check_deps.cmake +++ b/cmake/check_deps.cmake @@ -117,8 +117,13 @@ if(USE_CPLEX AND NOT TARGET CPLEX::CPLEX) endif() # CXX Test -if(BUILD_TESTING AND NOT TARGET GTest::gtest_main) - message(FATAL_ERROR "Target GTest::gtest_main not available.") +if(BUILD_TESTING) + if(NOT TARGET GTest::gtest_main) + message(FATAL_ERROR "Target GTest::gtest_main not available.") + endif() + if(NOT TARGET benchmark::benchmark) + message(FATAL_ERROR "Target benchmark::benchmark not available.") + endif() endif() # Check language Dependencies diff --git a/cmake/cpp.cmake b/cmake/cpp.cmake index 2764562a2e..ea3ec59840 100644 --- a/cmake/cpp.cmake +++ b/cmake/cpp.cmake @@ -176,6 +176,10 @@ function(ortools_cxx_test) "${multiValueArgs}" ${ARGN} ) + if(NOT BUILD_TESTING) + return() + endif() + if(NOT TEST_NAME) message(FATAL_ERROR "no NAME provided") endif() @@ -624,8 +628,7 @@ configure_package_config_file(cmake/${PROJECT_NAME}Config.cmake.in NO_CHECK_REQUIRED_COMPONENTS_MACRO) write_basic_package_version_file( "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" - COMPATIBILITY SameMajorVersion - ) + COMPATIBILITY SameMajorVersion) install( FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" diff --git a/cmake/dotnet.cmake b/cmake/dotnet.cmake index c97cc3c7f0..0d7cbb5214 100644 --- a/cmake/dotnet.cmake +++ b/cmake/dotnet.cmake @@ -98,6 +98,9 @@ endif() if(USE_DOTNET_8) list(APPEND TFM "net8.0") endif() +if(USE_DOTNET_9) + list(APPEND TFM "net9.0") +endif() list(LENGTH TFM TFM_LENGTH) if(TFM_LENGTH EQUAL "0") @@ -284,6 +287,13 @@ function(add_dotnet_test) ${DOTNET_EXECUTABLE} test --nologo --framework net8.0 -c Release WORKING_DIRECTORY ${DOTNET_TEST_DIR}) endif() + if(USE_DOTNET_9) + add_test( + NAME dotnet_${COMPONENT_NAME}_${TEST_NAME}_net90 + COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME + ${DOTNET_EXECUTABLE} test --nologo --framework net9.0 -c Release + WORKING_DIRECTORY ${DOTNET_TEST_DIR}) + endif() endif() message(STATUS "Configuring test ${TEST_FILE_NAME} ...DONE") endfunction() @@ -360,6 +370,32 @@ file(MAKE_DIRECTORY ${DOTNET_PACKAGES_DIR}) # *.csproj.in contains: # CMake variable(s) (@PROJECT_NAME@) that configure_file() can manage and # generator expression ($) that file(GENERATE) can manage. +set(is_windows "$") +set(is_not_windows "$>") + +set(need_unix_zlib_lib "$>") +set(need_windows_zlib_lib "$>") + +set(need_unix_absl_lib "$>") +set(need_windows_absl_lib "$>") + +set(need_unix_re2_lib "$>") +set(need_windows_re2_lib "$>") + +set(need_unix_protobuf_lib "$>") +set(need_windows_protobuf_lib "$>") + +set(need_coinutils_lib "$>") +set(need_osi_lib "$>") +set(need_clp_lib "$>") +set(need_cgl_lib "$>") +set(need_cbc_lib "$>") + +set(need_unix_highs_lib "$>") +set(need_windows_highs_lib "$>") + +set(is_ortools_shared "$,SHARED_LIBRARY>") + configure_file( ${PROJECT_SOURCE_DIR}/ortools/dotnet/${DOTNET_PACKAGE}.runtime.csproj.in ${DOTNET_NATIVE_PROJECT_DIR}/${DOTNET_NATIVE_PROJECT}.csproj.in @@ -588,6 +624,13 @@ function(add_dotnet_sample) ${DOTNET_EXECUTABLE} run --no-build --framework net8.0 -c Release WORKING_DIRECTORY ${DOTNET_SAMPLE_DIR}) endif() + if(USE_DOTNET_9) + add_test( + NAME dotnet_${COMPONENT_NAME}_${SAMPLE_NAME}_net90 + COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME + ${DOTNET_EXECUTABLE} run --no-build --framework net9.0 -c Release + WORKING_DIRECTORY ${DOTNET_SAMPLE_DIR}) + endif() endif() message(STATUS "Configuring sample ${SAMPLE_FILE_NAME} ...DONE") endfunction() @@ -702,6 +745,13 @@ if(NOT EXAMPLE_FILE_NAME) ${DOTNET_EXECUTABLE} run --no-build --framework net8.0 -c Release ${EXAMPLE_NAME}.csproj WORKING_DIRECTORY ${DOTNET_EXAMPLE_DIR}) endif() + if(USE_DOTNET_9) + add_test( + NAME dotnet_${COMPONENT_NAME}_${EXAMPLE_NAME}_net90 + COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME + ${DOTNET_EXECUTABLE} run --no-build --framework net9.0 -c Release ${EXAMPLE_NAME}.csproj + WORKING_DIRECTORY ${DOTNET_EXAMPLE_DIR}) + endif() endif() message(STATUS "Configuring example ${EXAMPLE_FILE_NAME} ...DONE") endfunction() diff --git a/cmake/glop.cmake b/cmake/glop.cmake index 3be3a62544..dc2ca034f8 100644 --- a/cmake/glop.cmake +++ b/cmake/glop.cmake @@ -228,6 +228,9 @@ target_compile_options(glop PUBLIC ${GLOP_COMPILE_OPTIONS}) # Properties if(NOT APPLE) set_target_properties(glop PROPERTIES VERSION ${PROJECT_VERSION}) + if(UNIX) + set_target_properties(glop PROPERTIES INSTALL_RPATH "$ORIGIN") + endif() else() # Clang don't support version x.y.z with z > 255 set_target_properties(glop PROPERTIES diff --git a/cmake/java.cmake b/cmake/java.cmake index 02a4414031..5b2f2e6bd5 100644 --- a/cmake/java.cmake +++ b/cmake/java.cmake @@ -273,11 +273,38 @@ configure_file( ${JAVA_NATIVE_PROJECT_DIR}/pom.xml @ONLY) +set(is_windows "$") +set(is_not_windows "$>") + +set(need_unix_zlib_lib "$>") +set(need_windows_zlib_lib "$>") + +set(need_unix_absl_lib "$>") +set(need_windows_absl_lib "$>") + +set(need_unix_re2_lib "$>") +set(need_windows_re2_lib "$>") + +set(need_unix_protobuf_lib "$>") +set(need_windows_protobuf_lib "$>") + +set(need_unix_coinutils_lib "$>") +set(need_unix_osi_lib "$>") +set(need_unix_clp_lib "$>") +set(need_unix_cgl_lib "$>") +set(need_unix_cbc_lib "$>") + +set(need_unix_highs_lib "$>") +set(need_windows_highs_lib "$>") + +set(is_ortools_shared "$,SHARED_LIBRARY>") + add_custom_command( OUTPUT ${JAVA_NATIVE_PROJECT_DIR}/timestamp + COMMAND ${CMAKE_COMMAND} -E remove -f timestamp COMMAND ${CMAKE_COMMAND} -E copy $ - $<$>:$> + $<${is_ortools_shared}:$> ${JAVA_RESSOURCES_PATH}/${JAVA_NATIVE_PROJECT}/ COMMAND ${MAVEN_EXECUTABLE} compile -B COMMAND ${MAVEN_EXECUTABLE} package -B $<$:-Dfatjar=true> diff --git a/cmake/python.cmake b/cmake/python.cmake index 9f4201e4a3..619eae713e 100644 --- a/cmake/python.cmake +++ b/cmake/python.cmake @@ -361,6 +361,7 @@ if(BUILD_MATH_OPT) ortools/math_opt/python/errors.py ortools/math_opt/python/expressions.py ortools/math_opt/python/hash_model_storage.py + ortools/math_opt/python/init_arguments.py ortools/math_opt/python/mathopt.py ortools/math_opt/python/message_callback.py ortools/math_opt/python/model.py @@ -424,11 +425,36 @@ configure_file( ${PROJECT_BINARY_DIR}/python/LICENSE COPYONLY) +set(is_windows "$") +set(is_not_windows "$>") + +set(need_unix_zlib_lib "$>") +set(need_windows_zlib_lib "$>") + +set(need_unix_absl_lib "$>") +set(need_windows_absl_lib "$>") + +set(need_unix_re2_lib "$>") +set(need_windows_re2_lib "$>") + +set(need_unix_protobuf_lib "$>") +set(need_windows_protobuf_lib "$>") + +set(need_unix_coinutils_lib "$>") +set(need_unix_osi_lib "$>") +set(need_unix_clp_lib "$>") +set(need_unix_cgl_lib "$>") +set(need_unix_cbc_lib "$>") + +set(need_unix_highs_lib "$>") +set(need_windows_highs_lib "$>") + +set(is_ortools_shared "$,SHARED_LIBRARY>") + add_custom_command( OUTPUT python/ortools_timestamp COMMAND ${CMAKE_COMMAND} -E remove -f ortools_timestamp COMMAND ${CMAKE_COMMAND} -E make_directory ${PYTHON_PROJECT}/.libs - # Don't need to copy static lib on Windows. COMMAND ${CMAKE_COMMAND} -E $,SHARED_LIBRARY>,copy,true> $<$,SHARED_LIBRARY>:$> diff --git a/cmake/system_deps.cmake b/cmake/system_deps.cmake index d9ae923c15..4dd0402b6f 100644 --- a/cmake/system_deps.cmake +++ b/cmake/system_deps.cmake @@ -92,6 +92,10 @@ if(BUILD_TESTING AND NOT BUILD_googletest) find_package(GTest REQUIRED) endif() +if(BUILD_TESTING AND NOT BUILD_benchmark) + find_package(benchmark REQUIRED) +endif() + # Check language Dependencies if(BUILD_PYTHON) if(NOT BUILD_pybind11)