cmake: backport update from main

This commit is contained in:
Corentin Le Molgat
2024-11-15 09:56:36 +01:00
parent 9d12968c14
commit 1273928df0
9 changed files with 155 additions and 15 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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"

View File

@@ -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 ($<TARGET_FILE:...>) that file(GENERATE) can manage.
set(is_windows "$<PLATFORM_ID:Windows>")
set(is_not_windows "$<NOT:$<PLATFORM_ID:Windows>>")
set(need_unix_zlib_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_ZLIB}>>")
set(need_windows_zlib_lib "$<AND:${is_windows},$<BOOL:${BUILD_ZLIB}>>")
set(need_unix_absl_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_absl}>>")
set(need_windows_absl_lib "$<AND:${is_windows},$<BOOL:${BUILD_absl}>>")
set(need_unix_re2_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_re2}>>")
set(need_windows_re2_lib "$<AND:${is_windows},$<BOOL:${BUILD_re2}>>")
set(need_unix_protobuf_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_Protobuf}>>")
set(need_windows_protobuf_lib "$<AND:${is_windows},$<BOOL:${BUILD_Protobuf}>>")
set(need_coinutils_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_CoinUtils}>>")
set(need_osi_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_Osi}>>")
set(need_clp_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_Clp}>>")
set(need_cgl_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_Cgl}>>")
set(need_cbc_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_Cbc}>>")
set(need_unix_highs_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_HIGHS}>>")
set(need_windows_highs_lib "$<AND:${is_windows},$<BOOL:${BUILD_HIGHS}>>")
set(is_ortools_shared "$<STREQUAL:$<TARGET_PROPERTY:ortools,TYPE>,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()

View File

@@ -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

View File

@@ -273,11 +273,38 @@ configure_file(
${JAVA_NATIVE_PROJECT_DIR}/pom.xml
@ONLY)
set(is_windows "$<PLATFORM_ID:Windows>")
set(is_not_windows "$<NOT:$<PLATFORM_ID:Windows>>")
set(need_unix_zlib_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_ZLIB}>>")
set(need_windows_zlib_lib "$<AND:${is_windows},$<BOOL:${BUILD_ZLIB}>>")
set(need_unix_absl_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_absl}>>")
set(need_windows_absl_lib "$<AND:${is_windows},$<BOOL:${BUILD_absl}>>")
set(need_unix_re2_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_re2}>>")
set(need_windows_re2_lib "$<AND:${is_windows},$<BOOL:${BUILD_re2}>>")
set(need_unix_protobuf_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_Protobuf}>>")
set(need_windows_protobuf_lib "$<AND:${is_windows},$<BOOL:${BUILD_Protobuf}>>")
set(need_unix_coinutils_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_CoinUtils}>>")
set(need_unix_osi_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_Osi}>>")
set(need_unix_clp_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_Clp}>>")
set(need_unix_cgl_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_Cgl}>>")
set(need_unix_cbc_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_Cbc}>>")
set(need_unix_highs_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_HIGHS}>>")
set(need_windows_highs_lib "$<AND:${is_windows},$<BOOL:${BUILD_HIGHS}>>")
set(is_ortools_shared "$<STREQUAL:$<TARGET_PROPERTY:ortools,TYPE>,SHARED_LIBRARY>")
add_custom_command(
OUTPUT ${JAVA_NATIVE_PROJECT_DIR}/timestamp
COMMAND ${CMAKE_COMMAND} -E remove -f timestamp
COMMAND ${CMAKE_COMMAND} -E copy
$<TARGET_FILE:jni${JAVA_ARTIFACT}>
$<$<NOT:$<PLATFORM_ID:Windows>>:$<TARGET_SONAME_FILE:${PROJECT_NAME}>>
$<${is_ortools_shared}:$<TARGET_SONAME_FILE:ortools>>
${JAVA_RESSOURCES_PATH}/${JAVA_NATIVE_PROJECT}/
COMMAND ${MAVEN_EXECUTABLE} compile -B
COMMAND ${MAVEN_EXECUTABLE} package -B $<$<BOOL:${BUILD_FAT_JAR}>:-Dfatjar=true>

View File

@@ -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 "$<PLATFORM_ID:Windows>")
set(is_not_windows "$<NOT:$<PLATFORM_ID:Windows>>")
set(need_unix_zlib_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_ZLIB}>>")
set(need_windows_zlib_lib "$<AND:${is_windows},$<BOOL:${BUILD_ZLIB}>>")
set(need_unix_absl_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_absl}>>")
set(need_windows_absl_lib "$<AND:${is_windows},$<BOOL:${BUILD_absl}>>")
set(need_unix_re2_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_re2}>>")
set(need_windows_re2_lib "$<AND:${is_windows},$<BOOL:${BUILD_re2}>>")
set(need_unix_protobuf_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_Protobuf}>>")
set(need_windows_protobuf_lib "$<AND:${is_windows},$<BOOL:${BUILD_Protobuf}>>")
set(need_unix_coinutils_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_CoinUtils}>>")
set(need_unix_osi_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_Osi}>>")
set(need_unix_clp_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_Clp}>>")
set(need_unix_cgl_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_Cgl}>>")
set(need_unix_cbc_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_Cbc}>>")
set(need_unix_highs_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_HIGHS}>>")
set(need_windows_highs_lib "$<AND:${is_windows},$<BOOL:${BUILD_HIGHS}>>")
set(is_ortools_shared "$<STREQUAL:$<TARGET_PROPERTY:ortools,TYPE>,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
$<IF:$<STREQUAL:$<TARGET_PROPERTY:ortools,TYPE>,SHARED_LIBRARY>,copy,true>
$<$<STREQUAL:$<TARGET_PROPERTY:ortools,TYPE>,SHARED_LIBRARY>:$<TARGET_SONAME_FILE:ortools>>

View File

@@ -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)