Skip to content

Commit 51e3483

Browse files
committed
cmake: Enable soplex when building SCIP
* use SCIP::libscip note: While scip provide ALIAS, they forget to use it when `install(export ...)` * update internal docs/ * build boost as static libraries
1 parent 3434515 commit 51e3483

24 files changed

+1179
-605
lines changed

CMakeLists.txt

+8
Original file line numberDiff line numberDiff line change
@@ -296,11 +296,19 @@ message(STATUS "Build PDLP: ${BUILD_PDLP}")
296296
CMAKE_DEPENDENT_OPTION(USE_SCIP "Use the Scip solver" ON "BUILD_CXX" OFF)
297297
message(STATUS "SCIP support: ${USE_SCIP}")
298298
if(USE_SCIP)
299+
CMAKE_DEPENDENT_OPTION(BUILD_Boost "Build the Boost dependency Library" OFF
300+
"NOT BUILD_DEPS" ON)
301+
CMAKE_DEPENDENT_OPTION(BUILD_soplex "Build the Soplex dependency Library" OFF
302+
"NOT BUILD_DEPS" ON)
299303
CMAKE_DEPENDENT_OPTION(BUILD_SCIP "Build the SCIP dependency Library" OFF
300304
"NOT BUILD_DEPS" ON)
301305
else()
306+
set(BUILD_Boost OFF)
307+
set(BUILD_soplex OFF)
302308
set(BUILD_SCIP OFF)
303309
endif()
310+
message(STATUS "Build Boost (Soplex requirement): ${BUILD_Boost}")
311+
message(STATUS "Build Soplex (SCIP requirement): ${BUILD_soplex}")
304312
message(STATUS "Build SCIP: ${BUILD_SCIP}")
305313

306314
# Optional third party solvers (disabled by default)

cmake/check_deps.cmake

+3-3
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,10 @@ if(USE_PDLP AND BUILD_PDLP)
105105
endif()
106106

107107
if(USE_SCIP)
108-
if(NOT TARGET libscip)
109-
message(FATAL_ERROR "Target libscip not available.")
108+
if(NOT TARGET SCIP::libscip)
109+
message(FATAL_ERROR "Target SCIP::libscip not available.")
110110
endif()
111-
set(SCIP_DEPS libscip)
111+
set(SCIP_DEPS SCIP::libscip)
112112
endif()
113113

114114
# Check optional Dependencies

cmake/dependencies/CMakeLists.txt

+74-16
Original file line numberDiff line numberDiff line change
@@ -78,16 +78,21 @@ endif()
7878
if(BUILD_absl)
7979
message(CHECK_START "Fetching Abseil-cpp")
8080
list(APPEND CMAKE_MESSAGE_INDENT " ")
81-
set(ABSL_ENABLE_INSTALL ON)
8281
set(ABSL_USE_SYSTEM_INCLUDES ON)
82+
# We want Abseil to declare what C++ standard it was compiled with.
8383
set(ABSL_PROPAGATE_CXX_STD ON)
84+
# We want Abseil to keep the INSTALL rules enabled, even though it is a
85+
# subproject. Otherwise the install rules in this project break.
86+
set(ABSL_ENABLE_INSTALL ON)
8487
set(ABSL_BUILD_TESTING OFF)
8588
FetchContent_Declare(
8689
absl
8790
GIT_REPOSITORY "https://github.com/abseil/abseil-cpp.git"
8891
GIT_TAG "20250127.0"
8992
GIT_SHALLOW TRUE
90-
PATCH_COMMAND git apply --ignore-whitespace "${CMAKE_CURRENT_LIST_DIR}/../../patches/abseil-cpp-20250127.0.patch"
93+
PATCH_COMMAND git apply --ignore-whitespace
94+
"${CMAKE_CURRENT_LIST_DIR}/../../patches/abseil-cpp-20250127.0.patch"
95+
OVERRIDE_FIND_PACKAGE
9196
)
9297
FetchContent_MakeAvailable(absl)
9398
list(POP_BACK CMAKE_MESSAGE_INDENT)
@@ -259,33 +264,86 @@ if(BUILD_HIGHS)
259264
message(CHECK_PASS "fetched")
260265
endif()
261266

267+
# ##############################################################################
268+
# BOOST
269+
# ##############################################################################
270+
if(BUILD_Boost)
271+
message(CHECK_START "Fetching Boost")
272+
list(APPEND CMAKE_MESSAGE_INDENT " ")
273+
FetchContent_Declare(
274+
Boost
275+
URL
276+
https://github.com/boostorg/boost/releases/download/boost-1.87.0/boost-1.87.0-cmake.tar.gz
277+
USES_TERMINAL_DOWNLOAD TRUE
278+
DOWNLOAD_NO_EXTRACT FALSE
279+
PATCH_COMMAND git apply --ignore-whitespace "${CMAKE_CURRENT_LIST_DIR}/../../patches/boost-1.87.0.patch"
280+
)
281+
set(BOOST_INCLUDE_LIBRARIES multiprecision serialization)
282+
option(BOOST_SKIP_INSTALL_RULES NO)
283+
set(BOOST_ENABLE_CMAKE ON)
284+
set(BUILD_SHARED_LIBS OFF)
285+
FetchContent_MakeAvailable(Boost)
286+
set(BUILD_SHARED_LIBS ON)
287+
list(POP_BACK CMAKE_MESSAGE_INDENT)
288+
message(CHECK_PASS "fetched")
289+
endif()
290+
291+
# ##############################################################################
292+
# SOPLEX
293+
# ##############################################################################
294+
if(BUILD_soplex)
295+
message(CHECK_START "Fetching SOPLEX")
296+
list(APPEND CMAKE_MESSAGE_INDENT " ")
297+
FetchContent_Declare(
298+
soplex
299+
GIT_REPOSITORY "https://github.com/scipopt/soplex.git"
300+
GIT_TAG "release-713"
301+
GIT_SHALLOW TRUE
302+
PATCH_COMMAND git apply --ignore-whitespace
303+
"${CMAKE_CURRENT_LIST_DIR}/../../patches/soplex-v7.1.3.patch"
304+
)
305+
set(SHARED ON CACHE BOOL "Soplex param" FORCE)
306+
set(ZLIB ON CACHE BOOL "Soplex param" FORCE)
307+
set(GMP OFF CACHE BOOL "Soplex param" FORCE)
308+
set(BOOST ON CACHE BOOL "Soplex param" FORCE)
309+
set(QUADMATH OFF CACHE BOOL "Soplex param" FORCE)
310+
set(MPFR OFF CACHE BOOL "Soplex param" FORCE)
311+
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON CACHE BOOL "Soplex param" FORCE)
312+
set(MT OFF CACHE BOOL "Soplex param" FORCE)
313+
set(PAPILO OFF CACHE BOOL "Soplex param" FORCE)
314+
#set(Boost_INCLUDE_DIR "../boost-src/libs/config/include" CACHE PATH "Soplex param" FORCE)
315+
FetchContent_MakeAvailable(soplex)
316+
list(POP_BACK CMAKE_MESSAGE_INDENT)
317+
message(CHECK_PASS "fetched")
318+
endif()
319+
262320
# ##############################################################################
263321
# SCIP
264322
# ##############################################################################
265323
if(BUILD_SCIP)
266324
message(CHECK_START "Fetching SCIP")
267325
list(APPEND CMAKE_MESSAGE_INDENT " ")
268-
set(SHARED OFF)
269-
set(READLINE OFF)
270-
set(GMP OFF)
271-
set(PAPILO OFF)
272-
set(ZIMPL OFF)
273-
set(IPOPT OFF)
274-
set(AMPL OFF)
275-
276-
set(TPI "tny" CACHE STRING "Scip param")
277-
set(EXPRINT "none" CACHE STRING "Scip param")
278-
set(LPS "none" CACHE STRING "Scip param")
279-
set(SYM "none" CACHE STRING "Scip param")
280326
FetchContent_Declare(
281327
scip
282328
GIT_REPOSITORY "https://github.com/scipopt/scip.git"
283329
GIT_TAG "v921"
284330
GIT_SHALLOW TRUE
285-
PATCH_COMMAND git apply --ignore-whitespace "${CMAKE_CURRENT_LIST_DIR}/../../patches/scip-v921.patch"
331+
PATCH_COMMAND git apply --ignore-whitespace
332+
"${CMAKE_CURRENT_LIST_DIR}/../../patches/scip-v921.patch"
286333
)
334+
set(SHARED ON CACHE BOOL "Scip param" FORCE)
335+
set(ZLIB ON CACHE BOOL "Scip param" FORCE)
336+
set(READLINE OFF CACHE BOOL "Scip param" FORCE)
337+
set(GMP OFF CACHE BOOL "Scip param" FORCE)
338+
set(PAPILO OFF CACHE BOOL "Scip param" FORCE)
339+
set(ZIMPL OFF CACHE BOOL "Scip param" FORCE)
340+
set(AMPL OFF CACHE BOOL "Scip param" FORCE)
341+
set(IPOPT OFF CACHE BOOL "Scip param" FORCE)
342+
set(TPI "tny" CACHE STRING "Scip param" FORCE)
343+
set(EXPRINT "none" CACHE STRING "Scip param" FORCE)
344+
set(LPS "spx" CACHE STRING "Scip param" FORCE)
345+
set(SYM "none" CACHE STRING "Scip param" FORCE)
287346
FetchContent_MakeAvailable(scip)
288-
set(LPI_GLOP_SRC ${scip_SOURCE_DIR}/src/lpi/lpi_glop.cpp PARENT_SCOPE)
289347
list(POP_BACK CMAKE_MESSAGE_INDENT)
290348
message(CHECK_PASS "fetched")
291349
endif()

cmake/docs/cmake.dot

+16-1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,14 @@ digraph CMake {
4141
label = "abseil/abseil-cpp.git";
4242
}
4343

44+
subgraph clusterRe2 {
45+
Re2 [label="re2::re2"];
46+
47+
color=royalblue;
48+
label = "google/re2.git";
49+
}
50+
Absl -> Re2;
51+
4452
subgraph clusterProtobuf {
4553
Protobuf [label="protobuf::libprotobuf", color=royalblue];
4654

@@ -49,6 +57,7 @@ digraph CMake {
4957
}
5058
ZLIB -> Protobuf;
5159
Absl -> Protobuf;
60+
Re2 -> Protobuf;
5261

5362
subgraph clusterCoinOR {
5463
subgraph clusterCoinUtils {
@@ -140,14 +149,19 @@ digraph CMake {
140149

141150
subgraph clusterSCIPSolver {
142151
subgraph clusterSCIP {
143-
SCIP [label="scip::scip"];
152+
SCIP [label="SCIP::libscip"];
153+
SPX [label="libsoplex"];
154+
155+
SPX -> SCIP;
144156

145157
color=royalblue;
146158
label = "scipopt/scip.git";
147159
}
148160
color=royalblue;
149161
label = "SCIP Solver\n(-DUSE_SCIP=ON)";
150162
}
163+
ZLIB -> SPX;
164+
ZLIB -> SCIP;
151165

152166
SWIG_WIN [label="swigwin\n(Windows)", color=chocolate];
153167

@@ -176,6 +190,7 @@ digraph CMake {
176190
ZLIB -> OR_SRC;
177191
Absl -> OR_SRC;
178192
Protobuf -> OR_SRC;
193+
Re2 -> OR_SRC;
179194
ClpSolver -> OR_SRC;
180195
CbcSolver -> OR_SRC;
181196
GLPK -> OR_SRC;

0 commit comments

Comments
 (0)