From 9814de8263d6c211c4351ed6e91979c19aa043d7 Mon Sep 17 00:00:00 2001 From: Corentin Le Molgat Date: Thu, 6 Feb 2020 18:32:40 +0100 Subject: [PATCH] CMake: Coin-OR is optional --- CMakeLists.txt | 45 +++++++++++++------- cmake/cpp.cmake | 62 ++++++++++++++++------------ ortools/graph/CMakeLists.txt | 12 ++++-- ortools/linear_solver/CMakeLists.txt | 16 ++++--- ortools/sat/CMakeLists.txt | 12 ++++-- 5 files changed, 90 insertions(+), 57 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a36a9ac29a..efe8010190 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,35 +70,48 @@ CMAKE_DEPENDENT_OPTION(BUILD_gflags "Build the gflags dependency Library" OFF "NOT BUILD_DEPS" ON) CMAKE_DEPENDENT_OPTION(BUILD_glog "Build the glog dependency Library" OFF "NOT BUILD_DEPS" ON) + CMAKE_DEPENDENT_OPTION(BUILD_Protobuf "Build the Protobuf dependency Library" OFF "NOT BUILD_DEPS" ON) -CMAKE_DEPENDENT_OPTION(BUILD_CoinUtils "Build the CoinUtils dependency Library" OFF - "NOT BUILD_DEPS" ON) -CMAKE_DEPENDENT_OPTION(BUILD_Osi "Build the Osi dependency Library" OFF - "NOT BUILD_DEPS" ON) -CMAKE_DEPENDENT_OPTION(BUILD_Clp "Build the Clp dependency Library" OFF - "NOT BUILD_DEPS" ON) -CMAKE_DEPENDENT_OPTION(BUILD_Cgl "Build the Cgl dependency Library" OFF - "NOT BUILD_DEPS" ON) -CMAKE_DEPENDENT_OPTION(BUILD_Cbc "Build the Cbc dependency Library" OFF - "NOT BUILD_DEPS" ON) - message(STATUS "Build ZLIB: ${BUILD_ZLIB}") message(STATUS "Build abseil-cpp: ${BUILD_absl}") message(STATUS "Build gflags: ${BUILD_gflags}") message(STATUS "Build glog: ${BUILD_glog}") message(STATUS "Build protobuf: ${BUILD_Protobuf}") -message(STATUS "Build CoinUtils: ${BUILD_CoinUtils}") -message(STATUS "Build Osi: ${BUILD_Osi}") -message(STATUS "Build Clp: ${BUILD_Clp}") -message(STATUS "Build Cgl: ${BUILD_Cgl}") -message(STATUS "Build Cbc: ${BUILD_Cbc}") + +# Optional third party solvers (enabled by default) +option(USE_COINOR "Use the COIN-OR solver" ON) +message(STATUS "COIN-OR support: ${USE_COINOR}") + +if(USE_COINOR) + CMAKE_DEPENDENT_OPTION(BUILD_CoinUtils "Build the CoinUtils dependency Library" OFF + "NOT BUILD_DEPS" ON) + message(STATUS "Build CoinUtils: ${BUILD_CoinUtils}") + + CMAKE_DEPENDENT_OPTION(BUILD_Osi "Build the Osi dependency Library" OFF + "NOT BUILD_DEPS" ON) + message(STATUS "Build Osi: ${BUILD_Osi}") + + CMAKE_DEPENDENT_OPTION(BUILD_Clp "Build the Clp dependency Library" OFF + "NOT BUILD_DEPS" ON) + message(STATUS "Build Clp: ${BUILD_Clp}") + + CMAKE_DEPENDENT_OPTION(BUILD_Cgl "Build the Cgl dependency Library" OFF + "NOT BUILD_DEPS" ON) + message(STATUS "Build Cgl: ${BUILD_Cgl}") + + CMAKE_DEPENDENT_OPTION(BUILD_Cbc "Build the Cbc dependency Library" OFF + "NOT BUILD_DEPS" ON) + message(STATUS "Build Cbc: ${BUILD_Cbc}") +endif() # Optional third party solvers (disabled by default) option(USE_CPLEX "Use the CPLEX solver" OFF) message(STATUS "CPLEX support: ${USE_CPLEX}") + option(USE_SCIP "Use the SCIP solver" OFF) message(STATUS "SCIP support: ${USE_SCIP}") + option(USE_XPRESS "Use the XPRESS solver" OFF) message(STATUS "XPRESS support: ${USE_XPRESS}") diff --git a/cmake/cpp.cmake b/cmake/cpp.cmake index b32da11356..4faaf0bccd 100644 --- a/cmake/cpp.cmake +++ b/cmake/cpp.cmake @@ -46,34 +46,38 @@ else() find_package(Protobuf REQUIRED) endif() -if(BUILD_CoinUtils) - find_package(CoinUtils REQUIRED CONFIG) -else() - find_package(CoinUtils REQUIRED) -endif() +if(USE_COINOR) + if(BUILD_CoinUtils) + find_package(CoinUtils REQUIRED CONFIG) + else() + find_package(CoinUtils REQUIRED) + endif() -if(BUILD_Osi) - find_package(Osi REQUIRED CONFIG) -else() - find_package(Osi REQUIRED) -endif() + if(BUILD_Osi) + find_package(Osi REQUIRED CONFIG) + else() + find_package(Osi REQUIRED) + endif() -if(BUILD_Clp) - find_package(Clp REQUIRED CONFIG) -else() - find_package(Clp REQUIRED) -endif() + if(BUILD_Clp) + find_package(Clp REQUIRED CONFIG) + else() + find_package(Clp REQUIRED) + endif() -if(BUILD_Cgl) - find_package(Cgl REQUIRED CONFIG) -else() - find_package(Cgl REQUIRED) -endif() + if(BUILD_Cgl) + find_package(Cgl REQUIRED CONFIG) + else() + find_package(Cgl REQUIRED) + endif() -if(BUILD_Cbc) - find_package(Cbc REQUIRED CONFIG) -else() - find_package(Cbc REQUIRED) + if(BUILD_Cbc) + find_package(Cbc REQUIRED CONFIG) + else() + find_package(Cbc REQUIRED) + endif() + + set(COINOR_DEPS Coin::CbcSolver Coin::OsiCbc Coin::ClpSolver Coin::OsiClp) endif() # Check optional Dependencies @@ -100,9 +104,13 @@ add_library(${PROJECT_NAME} "") list(APPEND OR_TOOLS_COMPILE_DEFINITIONS "USE_BOP" # enable BOP support "USE_GLOP" # enable GLOP support - "USE_CBC" # enable COIN-OR CBC support - "USE_CLP" # enable COIN-OR CLP support ) +if(USE_COINOR) + list(APPEND OR_TOOLS_COMPILE_DEFINITIONS + "USE_CBC" # enable COIN-OR CBC support + "USE_CLP" # enable COIN-OR CLP support + ) +endif() if(USE_CPLEX) list(APPEND OR_TOOLS_COMPILE_DEFINITIONS "USE_CPLEX") endif() @@ -214,7 +222,7 @@ target_link_libraries(${PROJECT_NAME} PUBLIC ${GFLAGS_DEP} glog::glog protobuf::libprotobuf - Coin::CbcSolver Coin::OsiCbc Coin::ClpSolver Coin::OsiClp + ${COINOR_DEPS} Threads::Threads) if(WIN32) target_link_libraries(${PROJECT_NAME} PUBLIC psapi.lib ws2_32.lib) diff --git a/ortools/graph/CMakeLists.txt b/ortools/graph/CMakeLists.txt index 5ec7072f05..f70ffcf962 100644 --- a/ortools/graph/CMakeLists.txt +++ b/ortools/graph/CMakeLists.txt @@ -28,7 +28,7 @@ target_include_directories(${NAME} PRIVATE $ $ $ - $ + $<$:$,> $) target_compile_options(${NAME} PRIVATE $ @@ -39,7 +39,7 @@ target_compile_options(${NAME} PRIVATE $ $ $ - $ + $<$:$,> $ ) target_compile_definitions(${NAME} PRIVATE @@ -51,13 +51,17 @@ target_compile_definitions(${NAME} PRIVATE $ $ $ - $ + $<$:$,> $ ) add_dependencies(${NAME} absl::hash absl::meta absl::memory absl::strings absl::str_format gflags::gflags glog::glog protobuf::libprotobuf - Coin::Cbc ${PROJECT_NAME}::proto) + +if(USE_COINOR) + add_dependencies(${NAME} Coin::Cbc) +endif() + add_library(${PROJECT_NAME}::graph ALIAS ${NAME}) diff --git a/ortools/linear_solver/CMakeLists.txt b/ortools/linear_solver/CMakeLists.txt index 35f8239fcc..b938e80912 100644 --- a/ortools/linear_solver/CMakeLists.txt +++ b/ortools/linear_solver/CMakeLists.txt @@ -27,7 +27,7 @@ target_include_directories(${NAME} PRIVATE $ $ $ - $ + $<$:$,> $) target_compile_options(${NAME} PRIVATE $ @@ -37,7 +37,7 @@ target_compile_options(${NAME} PRIVATE $ $ $ - $ + $<$:$,> $ ) target_compile_definitions(${NAME} PRIVATE @@ -48,16 +48,18 @@ target_compile_definitions(${NAME} PRIVATE $ $ $ - $ + $<$:$,> $ ) add_dependencies(${NAME} absl::memory absl::container absl::strings absl::str_format gflags::gflags glog::glog protobuf::libprotobuf - Coin::Cbc ${PROJECT_NAME}::proto) -add_library(${PROJECT_NAME}::linear_solver ALIAS ${NAME}) + +if(USE_COINOR) + add_dependencies(${NAME} Coin::Cbc) +endif() if (USE_XPRESS) target_include_directories(${NAME} PUBLIC ${XPRESSDIR}/include) @@ -77,4 +79,6 @@ if (USE_CPLEX) elseif(MSVC) target_link_libraries(${NAME} PUBLIC ${CPLEXDIR}/lib/x64_windows_vs2015/stat_mda/cplex1270.lib) endif() -endif(USE_CPLEX) \ No newline at end of file +endif(USE_CPLEX) + +add_library(${PROJECT_NAME}::linear_solver ALIAS ${NAME}) diff --git a/ortools/sat/CMakeLists.txt b/ortools/sat/CMakeLists.txt index 7ddcca8b30..399f4994e3 100644 --- a/ortools/sat/CMakeLists.txt +++ b/ortools/sat/CMakeLists.txt @@ -29,7 +29,7 @@ target_include_directories(${NAME} PRIVATE $ $ $ - $ + $<$:$,> $) target_compile_options(${NAME} PRIVATE $ @@ -41,7 +41,7 @@ target_compile_options(${NAME} PRIVATE $ $ $ - $ + $<$:$,> $ ) target_compile_definitions(${NAME} PRIVATE @@ -54,13 +54,17 @@ target_compile_definitions(${NAME} PRIVATE $ $ $ - $ + $<$:$,> $ ) add_dependencies(${NAME} absl::any absl::memory absl::synchronization absl::container absl::strings absl::str_format gflags::gflags glog::glog protobuf::libprotobuf - Coin::Cbc ${PROJECT_NAME}::proto) + +if(USE_COINOR) + add_dependencies(${NAME} Coin::Cbc) +endif() + add_library(${PROJECT_NAME}::sat ALIAS ${NAME})