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
This commit is contained in:
Mizux Seiha
2025-03-02 16:11:37 +01:00
parent 3434515e7d
commit 51e348357d
24 changed files with 1177 additions and 603 deletions

View File

@@ -296,11 +296,19 @@ message(STATUS "Build PDLP: ${BUILD_PDLP}")
CMAKE_DEPENDENT_OPTION(USE_SCIP "Use the Scip solver" ON "BUILD_CXX" OFF)
message(STATUS "SCIP support: ${USE_SCIP}")
if(USE_SCIP)
CMAKE_DEPENDENT_OPTION(BUILD_Boost "Build the Boost dependency Library" OFF
"NOT BUILD_DEPS" ON)
CMAKE_DEPENDENT_OPTION(BUILD_soplex "Build the Soplex dependency Library" OFF
"NOT BUILD_DEPS" ON)
CMAKE_DEPENDENT_OPTION(BUILD_SCIP "Build the SCIP dependency Library" OFF
"NOT BUILD_DEPS" ON)
else()
set(BUILD_Boost OFF)
set(BUILD_soplex OFF)
set(BUILD_SCIP OFF)
endif()
message(STATUS "Build Boost (Soplex requirement): ${BUILD_Boost}")
message(STATUS "Build Soplex (SCIP requirement): ${BUILD_soplex}")
message(STATUS "Build SCIP: ${BUILD_SCIP}")
# Optional third party solvers (disabled by default)

View File

@@ -105,10 +105,10 @@ if(USE_PDLP AND BUILD_PDLP)
endif()
if(USE_SCIP)
if(NOT TARGET libscip)
message(FATAL_ERROR "Target libscip not available.")
if(NOT TARGET SCIP::libscip)
message(FATAL_ERROR "Target SCIP::libscip not available.")
endif()
set(SCIP_DEPS libscip)
set(SCIP_DEPS SCIP::libscip)
endif()
# Check optional Dependencies

View File

@@ -78,16 +78,21 @@ endif()
if(BUILD_absl)
message(CHECK_START "Fetching Abseil-cpp")
list(APPEND CMAKE_MESSAGE_INDENT " ")
set(ABSL_ENABLE_INSTALL ON)
set(ABSL_USE_SYSTEM_INCLUDES ON)
# We want Abseil to declare what C++ standard it was compiled with.
set(ABSL_PROPAGATE_CXX_STD ON)
# We want Abseil to keep the INSTALL rules enabled, even though it is a
# subproject. Otherwise the install rules in this project break.
set(ABSL_ENABLE_INSTALL ON)
set(ABSL_BUILD_TESTING OFF)
FetchContent_Declare(
absl
GIT_REPOSITORY "https://github.com/abseil/abseil-cpp.git"
GIT_TAG "20250127.0"
GIT_SHALLOW TRUE
PATCH_COMMAND git apply --ignore-whitespace "${CMAKE_CURRENT_LIST_DIR}/../../patches/abseil-cpp-20250127.0.patch"
PATCH_COMMAND git apply --ignore-whitespace
"${CMAKE_CURRENT_LIST_DIR}/../../patches/abseil-cpp-20250127.0.patch"
OVERRIDE_FIND_PACKAGE
)
FetchContent_MakeAvailable(absl)
list(POP_BACK CMAKE_MESSAGE_INDENT)
@@ -259,33 +264,86 @@ if(BUILD_HIGHS)
message(CHECK_PASS "fetched")
endif()
# ##############################################################################
# BOOST
# ##############################################################################
if(BUILD_Boost)
message(CHECK_START "Fetching Boost")
list(APPEND CMAKE_MESSAGE_INDENT " ")
FetchContent_Declare(
Boost
URL
https://github.com/boostorg/boost/releases/download/boost-1.87.0/boost-1.87.0-cmake.tar.gz
USES_TERMINAL_DOWNLOAD TRUE
DOWNLOAD_NO_EXTRACT FALSE
PATCH_COMMAND git apply --ignore-whitespace "${CMAKE_CURRENT_LIST_DIR}/../../patches/boost-1.87.0.patch"
)
set(BOOST_INCLUDE_LIBRARIES multiprecision serialization)
option(BOOST_SKIP_INSTALL_RULES NO)
set(BOOST_ENABLE_CMAKE ON)
set(BUILD_SHARED_LIBS OFF)
FetchContent_MakeAvailable(Boost)
set(BUILD_SHARED_LIBS ON)
list(POP_BACK CMAKE_MESSAGE_INDENT)
message(CHECK_PASS "fetched")
endif()
# ##############################################################################
# SOPLEX
# ##############################################################################
if(BUILD_soplex)
message(CHECK_START "Fetching SOPLEX")
list(APPEND CMAKE_MESSAGE_INDENT " ")
FetchContent_Declare(
soplex
GIT_REPOSITORY "https://github.com/scipopt/soplex.git"
GIT_TAG "release-713"
GIT_SHALLOW TRUE
PATCH_COMMAND git apply --ignore-whitespace
"${CMAKE_CURRENT_LIST_DIR}/../../patches/soplex-v7.1.3.patch"
)
set(SHARED ON CACHE BOOL "Soplex param" FORCE)
set(ZLIB ON CACHE BOOL "Soplex param" FORCE)
set(GMP OFF CACHE BOOL "Soplex param" FORCE)
set(BOOST ON CACHE BOOL "Soplex param" FORCE)
set(QUADMATH OFF CACHE BOOL "Soplex param" FORCE)
set(MPFR OFF CACHE BOOL "Soplex param" FORCE)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON CACHE BOOL "Soplex param" FORCE)
set(MT OFF CACHE BOOL "Soplex param" FORCE)
set(PAPILO OFF CACHE BOOL "Soplex param" FORCE)
#set(Boost_INCLUDE_DIR "../boost-src/libs/config/include" CACHE PATH "Soplex param" FORCE)
FetchContent_MakeAvailable(soplex)
list(POP_BACK CMAKE_MESSAGE_INDENT)
message(CHECK_PASS "fetched")
endif()
# ##############################################################################
# SCIP
# ##############################################################################
if(BUILD_SCIP)
message(CHECK_START "Fetching SCIP")
list(APPEND CMAKE_MESSAGE_INDENT " ")
set(SHARED OFF)
set(READLINE OFF)
set(GMP OFF)
set(PAPILO OFF)
set(ZIMPL OFF)
set(IPOPT OFF)
set(AMPL OFF)
set(TPI "tny" CACHE STRING "Scip param")
set(EXPRINT "none" CACHE STRING "Scip param")
set(LPS "none" CACHE STRING "Scip param")
set(SYM "none" CACHE STRING "Scip param")
FetchContent_Declare(
scip
GIT_REPOSITORY "https://github.com/scipopt/scip.git"
GIT_TAG "v921"
GIT_SHALLOW TRUE
PATCH_COMMAND git apply --ignore-whitespace "${CMAKE_CURRENT_LIST_DIR}/../../patches/scip-v921.patch"
PATCH_COMMAND git apply --ignore-whitespace
"${CMAKE_CURRENT_LIST_DIR}/../../patches/scip-v921.patch"
)
set(SHARED ON CACHE BOOL "Scip param" FORCE)
set(ZLIB ON CACHE BOOL "Scip param" FORCE)
set(READLINE OFF CACHE BOOL "Scip param" FORCE)
set(GMP OFF CACHE BOOL "Scip param" FORCE)
set(PAPILO OFF CACHE BOOL "Scip param" FORCE)
set(ZIMPL OFF CACHE BOOL "Scip param" FORCE)
set(AMPL OFF CACHE BOOL "Scip param" FORCE)
set(IPOPT OFF CACHE BOOL "Scip param" FORCE)
set(TPI "tny" CACHE STRING "Scip param" FORCE)
set(EXPRINT "none" CACHE STRING "Scip param" FORCE)
set(LPS "spx" CACHE STRING "Scip param" FORCE)
set(SYM "none" CACHE STRING "Scip param" FORCE)
FetchContent_MakeAvailable(scip)
set(LPI_GLOP_SRC ${scip_SOURCE_DIR}/src/lpi/lpi_glop.cpp PARENT_SCOPE)
list(POP_BACK CMAKE_MESSAGE_INDENT)
message(CHECK_PASS "fetched")
endif()

View File

@@ -41,6 +41,14 @@ digraph CMake {
label = "abseil/abseil-cpp.git";
}
subgraph clusterRe2 {
Re2 [label="re2::re2"];
color=royalblue;
label = "google/re2.git";
}
Absl -> Re2;
subgraph clusterProtobuf {
Protobuf [label="protobuf::libprotobuf", color=royalblue];
@@ -49,6 +57,7 @@ digraph CMake {
}
ZLIB -> Protobuf;
Absl -> Protobuf;
Re2 -> Protobuf;
subgraph clusterCoinOR {
subgraph clusterCoinUtils {
@@ -140,7 +149,10 @@ digraph CMake {
subgraph clusterSCIPSolver {
subgraph clusterSCIP {
SCIP [label="scip::scip"];
SCIP [label="SCIP::libscip"];
SPX [label="libsoplex"];
SPX -> SCIP;
color=royalblue;
label = "scipopt/scip.git";
@@ -148,6 +160,8 @@ digraph CMake {
color=royalblue;
label = "SCIP Solver\n(-DUSE_SCIP=ON)";
}
ZLIB -> SPX;
ZLIB -> SCIP;
SWIG_WIN [label="swigwin\n(Windows)", color=chocolate];
@@ -176,6 +190,7 @@ digraph CMake {
ZLIB -> OR_SRC;
Absl -> OR_SRC;
Protobuf -> OR_SRC;
Re2 -> OR_SRC;
ClpSolver -> OR_SRC;
CbcSolver -> OR_SRC;
GLPK -> OR_SRC;

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 50 KiB

View File

@@ -136,7 +136,10 @@ digraph CMakeDeps {
subgraph clusterSCIPSolver {
subgraph clusterSCIP {
SCIP [label="scip::scip"];
SCIP [label="SCIP::libscip"];
SPX [label="libsoplex"];
SPX -> SCIP;
color=royalblue;
label = "scipopt/scip.git";
@@ -148,7 +151,11 @@ digraph CMakeDeps {
// inter deps
ZLIB -> Protobuf;
ZLIB -> Cbc;
ZLIB -> SPX;
ZLIB -> SCIP;
Absl -> Re2;
Absl -> Protobuf;
Re2 -> Protobuf;
}
@enddot
# vim tw:0

View File

@@ -1,329 +1,381 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.43.0 (0)
<!-- Generated by graphviz version 2.42.4 (0)
-->
<!-- Title: CMakeDeps Pages: 1 -->
<svg width="1743pt" height="622pt"
viewBox="0.00 0.00 1743.00 622.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 618)">
<svg width="1263pt" height="656pt"
viewBox="0.00 0.00 1263.00 656.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 652)">
<title>CMakeDeps</title>
<polygon fill="white" stroke="transparent" points="-4,4 -4,-618 1739,-618 1739,4 -4,4"/>
<polygon fill="white" stroke="transparent" points="-4,4 -4,-652 1259,-652 1259,4 -4,4"/>
<g id="clust1" class="cluster">
<title>clusterZLIB</title>
<polygon fill="none" stroke="royalblue" points="205,-171 205,-246 387,-246 387,-171 205,-171"/>
<text text-anchor="middle" x="296" y="-230.8" font-family="Times,serif" font-size="14.00">madler/zlib.git + cmake patch</text>
<polygon fill="none" stroke="royalblue" points="654,-202 654,-277 836,-277 836,-202 654,-202"/>
<text text-anchor="middle" x="745" y="-261.8" font-family="Times,serif" font-size="14.00">madler/zlib.git + cmake patch</text>
</g>
<g id="clust2" class="cluster">
<title>clusterAbsl</title>
<polygon fill="none" stroke="royalblue" points="72,-171 72,-246 197,-246 197,-171 72,-171"/>
<text text-anchor="middle" x="134.5" y="-230.8" font-family="Times,serif" font-size="14.00">abseil/abseil&#45;cpp.git</text>
<polygon fill="none" stroke="royalblue" points="492,-285 492,-360 617,-360 617,-285 492,-285"/>
<text text-anchor="middle" x="554.5" y="-344.8" font-family="Times,serif" font-size="14.00">abseil/abseil&#45;cpp.git</text>
</g>
<g id="clust3" class="cluster">
<title>clusterProtobuf</title>
<polygon fill="none" stroke="royalblue" points="8,-88 8,-163 279,-163 279,-88 8,-88"/>
<text text-anchor="middle" x="143.5" y="-147.8" font-family="Times,serif" font-size="14.00">protocolbuffers/protobuf.git</text>
<polygon fill="none" stroke="royalblue" points="384,-88 384,-163 655,-163 655,-88 384,-88"/>
<text text-anchor="middle" x="519.5" y="-147.8" font-family="Times,serif" font-size="14.00">protocolbuffers/protobuf.git</text>
</g>
<g id="clust4" class="cluster">
<title>clusterRe2</title>
<polygon fill="none" stroke="royalblue" points="789,-500 789,-575 881,-575 881,-500 789,-500"/>
<text text-anchor="middle" x="835" y="-559.8" font-family="Times,serif" font-size="14.00">google/re2.git</text>
<polygon fill="none" stroke="royalblue" points="544,-202 544,-277 636,-277 636,-202 544,-202"/>
<text text-anchor="middle" x="590" y="-261.8" font-family="Times,serif" font-size="14.00">google/re2.git</text>
</g>
<g id="clust5" class="cluster">
<title>clusterEigen3</title>
<polygon fill="none" stroke="royalblue" points="889,-500 889,-575 1000,-575 1000,-500 889,-500"/>
<text text-anchor="middle" x="944.5" y="-559.8" font-family="Times,serif" font-size="14.00">libeigen/eigen.git</text>
<polygon fill="none" stroke="royalblue" points="384,-534 384,-609 495,-609 495,-534 384,-534"/>
<text text-anchor="middle" x="439.5" y="-593.8" font-family="Times,serif" font-size="14.00">libeigen/eigen.git</text>
</g>
<g id="clust6" class="cluster">
<title>clusterPybind11</title>
<polygon fill="none" stroke="royalblue" points="1008,-500 1008,-575 1150,-575 1150,-500 1008,-500"/>
<text text-anchor="middle" x="1079" y="-559.8" font-family="Times,serif" font-size="14.00">pybind/pybind11.git</text>
<polygon fill="none" stroke="royalblue" points="503,-534 503,-609 645,-609 645,-534 503,-534"/>
<text text-anchor="middle" x="574" y="-593.8" font-family="Times,serif" font-size="14.00">pybind/pybind11.git</text>
</g>
<g id="clust7" class="cluster">
<title>clusterCoinOR</title>
<polygon fill="none" stroke="royalblue" points="395,-8 395,-606 781,-606 781,-8 395,-8"/>
<text text-anchor="middle" x="588" y="-590.8" font-family="Times,serif" font-size="14.00">&#45;DUSE_COINOR=ON AND &#45;DBUILD_DEPS=ON</text>
<polygon fill="none" stroke="royalblue" points="8,-8 8,-640 376,-640 376,-8 8,-8"/>
<text text-anchor="middle" x="192" y="-624.8" font-family="Times,serif" font-size="14.00">&#45;DUSE_COINOR=ON AND &#45;DBUILD_DEPS=ON</text>
</g>
<g id="clust8" class="cluster">
<title>clusterCoinUtils</title>
<polygon fill="none" stroke="royalblue" points="619,-500 619,-575 746,-575 746,-500 619,-500"/>
<text text-anchor="middle" x="682.5" y="-559.8" font-family="Times,serif" font-size="14.00">Mizux/CoinUtils.git</text>
<polygon fill="none" stroke="royalblue" points="77,-534 77,-609 204,-609 204,-534 77,-534"/>
<text text-anchor="middle" x="140.5" y="-593.8" font-family="Times,serif" font-size="14.00">Mizux/CoinUtils.git</text>
</g>
<g id="clust9" class="cluster">
<title>clusterOsi</title>
<polygon fill="none" stroke="royalblue" points="610,-409 610,-484 703,-484 703,-409 610,-409"/>
<text text-anchor="middle" x="656.5" y="-468.8" font-family="Times,serif" font-size="14.00">Mizux/Osi.git</text>
<polygon fill="none" stroke="royalblue" points="66,-443 66,-518 159,-518 159,-443 66,-443"/>
<text text-anchor="middle" x="112.5" y="-502.8" font-family="Times,serif" font-size="14.00">Mizux/Osi.git</text>
</g>
<g id="clust10" class="cluster">
<title>clusterClp</title>
<polygon fill="none" stroke="royalblue" points="455,-254 455,-401 683,-401 683,-254 455,-254"/>
<text text-anchor="middle" x="569" y="-385.8" font-family="Times,serif" font-size="14.00">Mizux/Clp.git</text>
<polygon fill="none" stroke="royalblue" points="108,-285 108,-435 336,-435 336,-285 108,-285"/>
<text text-anchor="middle" x="222" y="-419.8" font-family="Times,serif" font-size="14.00">Mizux/Clp.git</text>
</g>
<g id="clust11" class="cluster">
<title>clusterCgl</title>
<polygon fill="none" stroke="royalblue" points="606,-171 606,-246 700,-246 700,-171 606,-171"/>
<text text-anchor="middle" x="653" y="-230.8" font-family="Times,serif" font-size="14.00">Mizux/Cgl.git</text>
<polygon fill="none" stroke="royalblue" points="87,-202 87,-277 181,-277 181,-202 87,-202"/>
<text text-anchor="middle" x="134" y="-261.8" font-family="Times,serif" font-size="14.00">Mizux/Cgl.git</text>
</g>
<g id="clust12" class="cluster">
<title>clusterCbc</title>
<polygon fill="none" stroke="royalblue" points="403,-16 403,-163 635,-163 635,-16 403,-16"/>
<text text-anchor="middle" x="519" y="-147.8" font-family="Times,serif" font-size="14.00">Mizux/Cbc.git</text>
<polygon fill="none" stroke="royalblue" points="46,-16 46,-163 278,-163 278,-16 46,-16"/>
<text text-anchor="middle" x="162" y="-147.8" font-family="Times,serif" font-size="14.00">Mizux/Cbc.git</text>
</g>
<g id="clust13" class="cluster">
<title>clusterGLPKSolver</title>
<polygon fill="none" stroke="royalblue" points="1158,-492 1158,-606 1445,-606 1445,-492 1158,-492"/>
<text text-anchor="middle" x="1301.5" y="-590.8" font-family="Times,serif" font-size="14.00">&#45;DUSE_GLPK=ON AND &#45;DBUILD_GLPK=ON</text>
<polygon fill="none" stroke="royalblue" points="653,-526 653,-640 940,-640 940,-526 653,-526"/>
<text text-anchor="middle" x="796.5" y="-624.8" font-family="Times,serif" font-size="14.00">&#45;DUSE_GLPK=ON AND &#45;DBUILD_GLPK=ON</text>
</g>
<g id="clust14" class="cluster">
<title>clusterGLPK</title>
<polygon fill="none" stroke="royalblue" points="1246,-500 1246,-575 1356,-575 1356,-500 1246,-500"/>
<text text-anchor="middle" x="1301" y="-559.8" font-family="Times,serif" font-size="14.00">Mizux/GLPK.git</text>
<polygon fill="none" stroke="royalblue" points="741,-534 741,-609 851,-609 851,-534 741,-534"/>
<text text-anchor="middle" x="796" y="-593.8" font-family="Times,serif" font-size="14.00">Mizux/GLPK.git</text>
</g>
<g id="clust15" class="cluster">
<title>clusterSCIPSolver</title>
<polygon fill="none" stroke="royalblue" points="1453,-492 1453,-606 1727,-606 1727,-492 1453,-492"/>
<text text-anchor="middle" x="1590" y="-590.8" font-family="Times,serif" font-size="14.00">&#45;DUSE_SCIP=ON AND &#45;DBUILD_SCIP=ON</text>
<title>clusterHIGHSSolver</title>
<polygon fill="none" stroke="royalblue" points="948,-526 948,-640 1247,-640 1247,-526 948,-526"/>
<text text-anchor="middle" x="1097.5" y="-624.8" font-family="Times,serif" font-size="14.00">&#45;DUSE_HIGHS=ON AND &#45;DBUILD_HIGHS=ON</text>
</g>
<g id="clust16" class="cluster">
<title>clusterHIGHS</title>
<polygon fill="none" stroke="royalblue" points="1023,-534 1023,-609 1172,-609 1172,-534 1023,-534"/>
<text text-anchor="middle" x="1097.5" y="-593.8" font-family="Times,serif" font-size="14.00">ERGO&#45;Code/HIGHS.git</text>
</g>
<g id="clust17" class="cluster">
<title>clusterSCIPSolver</title>
<polygon fill="none" stroke="royalblue" points="663,-8 663,-194 937,-194 937,-8 663,-8"/>
<text text-anchor="middle" x="800" y="-178.8" font-family="Times,serif" font-size="14.00">&#45;DUSE_SCIP=ON AND &#45;DBUILD_SCIP=ON</text>
</g>
<g id="clust18" class="cluster">
<title>clusterSCIP</title>
<polygon fill="none" stroke="royalblue" points="1540,-500 1540,-575 1639,-575 1639,-500 1540,-500"/>
<text text-anchor="middle" x="1589.5" y="-559.8" font-family="Times,serif" font-size="14.00">scipopt/scip.git</text>
<polygon fill="none" stroke="royalblue" points="671,-16 671,-163 775,-163 775,-16 671,-16"/>
<text text-anchor="middle" x="723" y="-147.8" font-family="Times,serif" font-size="14.00">scipopt/scip.git</text>
</g>
<!-- ZLIB -->
<g id="node1" class="node">
<title>ZLIB</title>
<path fill="royalblue" stroke="royalblue" d="M292,-215C292,-215 232,-215 232,-215 226,-215 220,-209 220,-203 220,-203 220,-191 220,-191 220,-185 226,-179 232,-179 232,-179 292,-179 292,-179 298,-179 304,-185 304,-191 304,-191 304,-203 304,-203 304,-209 298,-215 292,-215"/>
<text text-anchor="middle" x="262" y="-193.3" font-family="Times,serif" font-size="14.00">ZLIB::ZLIB</text>
<path fill="royalblue" stroke="royalblue" d="M739,-246C739,-246 679,-246 679,-246 673,-246 667,-240 667,-234 667,-234 667,-222 667,-222 667,-216 673,-210 679,-210 679,-210 739,-210 739,-210 745,-210 751,-216 751,-222 751,-222 751,-234 751,-234 751,-240 745,-246 739,-246"/>
<text text-anchor="middle" x="709" y="-224.3" font-family="Times,serif" font-size="14.00">ZLIB::ZLIB</text>
</g>
<!-- Protobuf -->
<g id="node3" class="node">
<title>Protobuf</title>
<path fill="royalblue" stroke="royalblue" d="M258.5,-132C258.5,-132 151.5,-132 151.5,-132 145.5,-132 139.5,-126 139.5,-120 139.5,-120 139.5,-108 139.5,-108 139.5,-102 145.5,-96 151.5,-96 151.5,-96 258.5,-96 258.5,-96 264.5,-96 270.5,-102 270.5,-108 270.5,-108 270.5,-120 270.5,-120 270.5,-126 264.5,-132 258.5,-132"/>
<text text-anchor="middle" x="205" y="-110.3" font-family="Times,serif" font-size="14.00">protobuf::libprotobuf</text>
<path fill="royalblue" stroke="royalblue" d="M634.5,-132C634.5,-132 527.5,-132 527.5,-132 521.5,-132 515.5,-126 515.5,-120 515.5,-120 515.5,-108 515.5,-108 515.5,-102 521.5,-96 527.5,-96 527.5,-96 634.5,-96 634.5,-96 640.5,-96 646.5,-102 646.5,-108 646.5,-108 646.5,-120 646.5,-120 646.5,-126 640.5,-132 634.5,-132"/>
<text text-anchor="middle" x="581" y="-110.3" font-family="Times,serif" font-size="14.00">protobuf::libprotobuf</text>
</g>
<!-- ZLIB&#45;&gt;Protobuf -->
<g id="edge19" class="edge">
<g id="edge20" class="edge">
<title>ZLIB&#45;&gt;Protobuf</title>
<path fill="none" stroke="black" d="M249.91,-178.82C242.05,-167.65 231.67,-152.9 222.86,-140.38"/>
<polygon fill="black" stroke="black" points="225.69,-138.32 217.07,-132.15 219.96,-142.35 225.69,-138.32"/>
<path fill="none" stroke="black" d="M686.51,-209.85C680.12,-204.84 673.22,-199.29 667,-194 645.97,-176.12 622.98,-154.92 606.07,-138.98"/>
<polygon fill="black" stroke="black" points="608.42,-136.39 598.76,-132.06 603.61,-141.47 608.42,-136.39"/>
</g>
<!-- Cbc -->
<g id="node14" class="node">
<title>Cbc</title>
<path fill="royalblue" stroke="royalblue" d="M471,-132C471,-132 423,-132 423,-132 417,-132 411,-126 411,-120 411,-120 411,-108 411,-108 411,-102 417,-96 423,-96 423,-96 471,-96 471,-96 477,-96 483,-102 483,-108 483,-108 483,-120 483,-120 483,-126 477,-132 471,-132"/>
<text text-anchor="middle" x="447" y="-110.3" font-family="Times,serif" font-size="14.00">Coin::Cbc</text>
<path fill="royalblue" stroke="royalblue" d="M155,-132C155,-132 107,-132 107,-132 101,-132 95,-126 95,-120 95,-120 95,-108 95,-108 95,-102 101,-96 107,-96 107,-96 155,-96 155,-96 161,-96 167,-102 167,-108 167,-108 167,-120 167,-120 167,-126 161,-132 155,-132"/>
<text text-anchor="middle" x="131" y="-110.3" font-family="Times,serif" font-size="14.00">Coin::Cbc</text>
</g>
<!-- ZLIB&#45;&gt;Cbc -->
<g id="edge20" class="edge">
<g id="edge21" class="edge">
<title>ZLIB&#45;&gt;Cbc</title>
<path fill="none" stroke="black" d="M301.23,-178.82C330.65,-165.94 370.96,-148.29 401.74,-134.82"/>
<polygon fill="black" stroke="black" points="403.2,-138 410.96,-130.78 400.4,-131.58 403.2,-138"/>
<path fill="none" stroke="black" d="M668.37,-209.88C659.19,-206.69 649.39,-203.8 640,-202 526.45,-180.26 493.96,-213.44 380,-194 307.07,-181.56 225.98,-152.9 176.74,-133.74"/>
<polygon fill="black" stroke="black" points="177.92,-130.44 167.33,-130.04 175.36,-136.95 177.92,-130.44"/>
</g>
<!-- SCIP -->
<g id="node19" class="node">
<title>SCIP</title>
<path fill="royalblue" stroke="royalblue" d="M755.5,-60C755.5,-60 690.5,-60 690.5,-60 684.5,-60 678.5,-54 678.5,-48 678.5,-48 678.5,-36 678.5,-36 678.5,-30 684.5,-24 690.5,-24 690.5,-24 755.5,-24 755.5,-24 761.5,-24 767.5,-30 767.5,-36 767.5,-36 767.5,-48 767.5,-48 767.5,-54 761.5,-60 755.5,-60"/>
<text text-anchor="middle" x="723" y="-38.3" font-family="Times,serif" font-size="14.00">SCIP::libscip</text>
</g>
<!-- ZLIB&#45;&gt;SCIP -->
<g id="edge23" class="edge">
<title>ZLIB&#45;&gt;SCIP</title>
<path fill="none" stroke="black" d="M740.89,-209.63C746.18,-205.26 750.93,-200.05 754,-194 775.29,-151.98 767.99,-132.98 754,-88 751.88,-81.18 748.33,-74.49 744.37,-68.43"/>
<polygon fill="black" stroke="black" points="747.06,-66.17 738.4,-60.07 741.36,-70.24 747.06,-66.17"/>
</g>
<!-- SPX -->
<g id="node20" class="node">
<title>SPX</title>
<path fill="royalblue" stroke="royalblue" d="M733,-132C733,-132 691,-132 691,-132 685,-132 679,-126 679,-120 679,-120 679,-108 679,-108 679,-102 685,-96 691,-96 691,-96 733,-96 733,-96 739,-96 745,-102 745,-108 745,-108 745,-120 745,-120 745,-126 739,-132 733,-132"/>
<text text-anchor="middle" x="712" y="-110.3" font-family="Times,serif" font-size="14.00">libsoplex</text>
</g>
<!-- ZLIB&#45;&gt;SPX -->
<g id="edge22" class="edge">
<title>ZLIB&#45;&gt;SPX</title>
<path fill="none" stroke="black" d="M709.46,-209.99C709.94,-192.06 710.7,-163.56 711.26,-142.44"/>
<polygon fill="black" stroke="black" points="714.77,-142.26 711.54,-132.17 707.77,-142.07 714.77,-142.26"/>
</g>
<!-- Absl -->
<g id="node2" class="node">
<title>Absl</title>
<path fill="royalblue" stroke="royalblue" d="M176.5,-215C176.5,-215 119.5,-215 119.5,-215 113.5,-215 107.5,-209 107.5,-203 107.5,-203 107.5,-191 107.5,-191 107.5,-185 113.5,-179 119.5,-179 119.5,-179 176.5,-179 176.5,-179 182.5,-179 188.5,-185 188.5,-191 188.5,-191 188.5,-203 188.5,-203 188.5,-209 182.5,-215 176.5,-215"/>
<text text-anchor="middle" x="148" y="-193.3" font-family="Times,serif" font-size="14.00">absl::absl_*</text>
<path fill="royalblue" stroke="royalblue" d="M582.5,-329C582.5,-329 525.5,-329 525.5,-329 519.5,-329 513.5,-323 513.5,-317 513.5,-317 513.5,-305 513.5,-305 513.5,-299 519.5,-293 525.5,-293 525.5,-293 582.5,-293 582.5,-293 588.5,-293 594.5,-299 594.5,-305 594.5,-305 594.5,-317 594.5,-317 594.5,-323 588.5,-329 582.5,-329"/>
<text text-anchor="middle" x="554" y="-307.3" font-family="Times,serif" font-size="14.00">absl::absl_*</text>
</g>
<!-- Absl&#45;&gt;Protobuf -->
<g id="edge21" class="edge">
<g id="edge25" class="edge">
<title>Absl&#45;&gt;Protobuf</title>
<path fill="none" stroke="black" d="M160.09,-178.82C167.95,-167.65 178.33,-152.9 187.14,-140.38"/>
<polygon fill="black" stroke="black" points="190.04,-142.35 192.93,-132.15 184.31,-138.32 190.04,-142.35"/>
</g>
<!-- Protoc -->
<g id="node4" class="node">
<title>Protoc</title>
<polygon fill="royalblue" stroke="royalblue" points="121.5,-132 16.5,-132 16.5,-128 12.5,-128 12.5,-124 16.5,-124 16.5,-104 12.5,-104 12.5,-100 16.5,-100 16.5,-96 121.5,-96 121.5,-132"/>
<polyline fill="none" stroke="royalblue" points="16.5,-128 20.5,-128 20.5,-124 16.5,-124 "/>
<polyline fill="none" stroke="royalblue" points="16.5,-104 20.5,-104 20.5,-100 16.5,-100 "/>
<text text-anchor="middle" x="69" y="-110.3" font-family="Times,serif" font-size="14.00">protobuf::protoc</text>
<path fill="none" stroke="black" d="M545.24,-292.95C543.09,-287.94 541.09,-282.37 540,-277 533.36,-244.34 532.72,-234.53 540,-202 544.82,-180.48 555.58,-158.01 564.87,-141.29"/>
<polygon fill="black" stroke="black" points="568.16,-142.58 570.11,-132.17 562.09,-139.1 568.16,-142.58"/>
</g>
<!-- Re2 -->
<g id="node5" class="node">
<title>Re2</title>
<path fill="royalblue" stroke="royalblue" d="M852.5,-544C852.5,-544 817.5,-544 817.5,-544 811.5,-544 805.5,-538 805.5,-532 805.5,-532 805.5,-520 805.5,-520 805.5,-514 811.5,-508 817.5,-508 817.5,-508 852.5,-508 852.5,-508 858.5,-508 864.5,-514 864.5,-520 864.5,-520 864.5,-532 864.5,-532 864.5,-538 858.5,-544 852.5,-544"/>
<text text-anchor="middle" x="835" y="-522.3" font-family="Times,serif" font-size="14.00">re2::re2</text>
<path fill="royalblue" stroke="royalblue" d="M600.5,-246C600.5,-246 565.5,-246 565.5,-246 559.5,-246 553.5,-240 553.5,-234 553.5,-234 553.5,-222 553.5,-222 553.5,-216 559.5,-210 565.5,-210 565.5,-210 600.5,-210 600.5,-210 606.5,-210 612.5,-216 612.5,-222 612.5,-222 612.5,-234 612.5,-234 612.5,-240 606.5,-246 600.5,-246"/>
<text text-anchor="middle" x="583" y="-224.3" font-family="Times,serif" font-size="14.00">re2::re2</text>
</g>
<!-- Absl&#45;&gt;Re2 -->
<g id="edge24" class="edge">
<title>Absl&#45;&gt;Re2</title>
<path fill="none" stroke="black" d="M560.15,-292.82C563.99,-282.08 569.03,-268.03 573.39,-255.84"/>
<polygon fill="black" stroke="black" points="576.78,-256.75 576.86,-246.15 570.19,-254.39 576.78,-256.75"/>
</g>
<!-- Protoc -->
<g id="node4" class="node">
<title>Protoc</title>
<polygon fill="royalblue" stroke="royalblue" points="497.5,-132 392.5,-132 392.5,-128 388.5,-128 388.5,-124 392.5,-124 392.5,-104 388.5,-104 388.5,-100 392.5,-100 392.5,-96 497.5,-96 497.5,-132"/>
<polyline fill="none" stroke="royalblue" points="392.5,-128 396.5,-128 396.5,-124 392.5,-124 "/>
<polyline fill="none" stroke="royalblue" points="392.5,-104 396.5,-104 396.5,-100 392.5,-100 "/>
<text text-anchor="middle" x="445" y="-110.3" font-family="Times,serif" font-size="14.00">protobuf::protoc</text>
</g>
<!-- Re2&#45;&gt;Protobuf -->
<g id="edge26" class="edge">
<title>Re2&#45;&gt;Protobuf</title>
<path fill="none" stroke="black" d="M582.7,-209.99C582.38,-192.06 581.87,-163.56 581.49,-142.44"/>
<polygon fill="black" stroke="black" points="584.98,-142.11 581.31,-132.17 577.99,-142.23 584.98,-142.11"/>
</g>
<!-- Eigen3 -->
<g id="node6" class="node">
<title>Eigen3</title>
<path fill="royalblue" stroke="royalblue" d="M978,-544C978,-544 910,-544 910,-544 904,-544 898,-538 898,-532 898,-532 898,-520 898,-520 898,-514 904,-508 910,-508 910,-508 978,-508 978,-508 984,-508 990,-514 990,-520 990,-520 990,-532 990,-532 990,-538 984,-544 978,-544"/>
<text text-anchor="middle" x="944" y="-522.3" font-family="Times,serif" font-size="14.00">Eigen3::eigen</text>
<path fill="royalblue" stroke="royalblue" d="M473,-578C473,-578 405,-578 405,-578 399,-578 393,-572 393,-566 393,-566 393,-554 393,-554 393,-548 399,-542 405,-542 405,-542 473,-542 473,-542 479,-542 485,-548 485,-554 485,-554 485,-566 485,-566 485,-572 479,-578 473,-578"/>
<text text-anchor="middle" x="439" y="-556.3" font-family="Times,serif" font-size="14.00">Eigen3::eigen</text>
</g>
<!-- Pybind11 -->
<g id="node7" class="node">
<title>Pybind11</title>
<path fill="royalblue" stroke="royalblue" d="M1130,-544C1130,-544 1028,-544 1028,-544 1022,-544 1016,-538 1016,-532 1016,-532 1016,-520 1016,-520 1016,-514 1022,-508 1028,-508 1028,-508 1130,-508 1130,-508 1136,-508 1142,-514 1142,-520 1142,-520 1142,-532 1142,-532 1142,-538 1136,-544 1130,-544"/>
<text text-anchor="middle" x="1079" y="-522.3" font-family="Times,serif" font-size="14.00">pybind11::pybind11</text>
<path fill="royalblue" stroke="royalblue" d="M625,-578C625,-578 523,-578 523,-578 517,-578 511,-572 511,-566 511,-566 511,-554 511,-554 511,-548 517,-542 523,-542 523,-542 625,-542 625,-542 631,-542 637,-548 637,-554 637,-554 637,-566 637,-566 637,-572 631,-578 625,-578"/>
<text text-anchor="middle" x="574" y="-556.3" font-family="Times,serif" font-size="14.00">pybind11::pybind11</text>
</g>
<!-- CoinUtils -->
<g id="node8" class="node">
<title>CoinUtils</title>
<path fill="royalblue" stroke="royalblue" d="M721.5,-544C721.5,-544 642.5,-544 642.5,-544 636.5,-544 630.5,-538 630.5,-532 630.5,-532 630.5,-520 630.5,-520 630.5,-514 636.5,-508 642.5,-508 642.5,-508 721.5,-508 721.5,-508 727.5,-508 733.5,-514 733.5,-520 733.5,-520 733.5,-532 733.5,-532 733.5,-538 727.5,-544 721.5,-544"/>
<text text-anchor="middle" x="682" y="-522.3" font-family="Times,serif" font-size="14.00">Coin::CoinUtils</text>
<path fill="royalblue" stroke="royalblue" d="M179.5,-578C179.5,-578 100.5,-578 100.5,-578 94.5,-578 88.5,-572 88.5,-566 88.5,-566 88.5,-554 88.5,-554 88.5,-548 94.5,-542 100.5,-542 100.5,-542 179.5,-542 179.5,-542 185.5,-542 191.5,-548 191.5,-554 191.5,-554 191.5,-566 191.5,-566 191.5,-572 185.5,-578 179.5,-578"/>
<text text-anchor="middle" x="140" y="-556.3" font-family="Times,serif" font-size="14.00">Coin::CoinUtils</text>
</g>
<!-- Osi -->
<g id="node9" class="node">
<title>Osi</title>
<path fill="royalblue" stroke="royalblue" d="M678.5,-453C678.5,-453 633.5,-453 633.5,-453 627.5,-453 621.5,-447 621.5,-441 621.5,-441 621.5,-429 621.5,-429 621.5,-423 627.5,-417 633.5,-417 633.5,-417 678.5,-417 678.5,-417 684.5,-417 690.5,-423 690.5,-429 690.5,-429 690.5,-441 690.5,-441 690.5,-447 684.5,-453 678.5,-453"/>
<text text-anchor="middle" x="656" y="-431.3" font-family="Times,serif" font-size="14.00">Coin::Osi</text>
<path fill="royalblue" stroke="royalblue" d="M134.5,-487C134.5,-487 89.5,-487 89.5,-487 83.5,-487 77.5,-481 77.5,-475 77.5,-475 77.5,-463 77.5,-463 77.5,-457 83.5,-451 89.5,-451 89.5,-451 134.5,-451 134.5,-451 140.5,-451 146.5,-457 146.5,-463 146.5,-463 146.5,-475 146.5,-475 146.5,-481 140.5,-487 134.5,-487"/>
<text text-anchor="middle" x="112" y="-465.3" font-family="Times,serif" font-size="14.00">Coin::Osi</text>
</g>
<!-- CoinUtils&#45;&gt;Osi -->
<g id="edge1" class="edge">
<title>CoinUtils&#45;&gt;Osi</title>
<path fill="none" stroke="black" d="M676.99,-507.84C673.28,-495.16 668.16,-477.64 663.91,-463.08"/>
<polygon fill="black" stroke="black" points="667.16,-461.72 661,-453.11 660.44,-463.69 667.16,-461.72"/>
<path fill="none" stroke="black" d="M134.6,-541.84C130.57,-529.04 124.99,-511.3 120.39,-496.65"/>
<polygon fill="black" stroke="black" points="123.72,-495.6 117.38,-487.11 117.04,-497.7 123.72,-495.6"/>
</g>
<!-- Clp -->
<g id="node10" class="node">
<title>Clp</title>
<path fill="royalblue" stroke="royalblue" d="M624,-370C624,-370 578,-370 578,-370 572,-370 566,-364 566,-358 566,-358 566,-346 566,-346 566,-340 572,-334 578,-334 578,-334 624,-334 624,-334 630,-334 636,-340 636,-346 636,-346 636,-358 636,-358 636,-364 630,-370 624,-370"/>
<text text-anchor="middle" x="601" y="-348.3" font-family="Times,serif" font-size="14.00">Coin::Clp</text>
<path fill="royalblue" stroke="royalblue" d="M245,-404C245,-404 199,-404 199,-404 193,-404 187,-398 187,-392 187,-392 187,-380 187,-380 187,-374 193,-368 199,-368 199,-368 245,-368 245,-368 251,-368 257,-374 257,-380 257,-380 257,-392 257,-392 257,-398 251,-404 245,-404"/>
<text text-anchor="middle" x="222" y="-382.3" font-family="Times,serif" font-size="14.00">Coin::Clp</text>
</g>
<!-- CoinUtils&#45;&gt;Clp -->
<g id="edge2" class="edge">
<title>CoinUtils&#45;&gt;Clp</title>
<path fill="none" stroke="black" d="M632.62,-507.94C622.14,-502 612.34,-494.18 606,-484 586.47,-452.65 589.69,-408.41 594.67,-380.22"/>
<polygon fill="black" stroke="black" points="598.13,-380.74 596.62,-370.26 591.26,-379.4 598.13,-380.74"/>
<path fill="none" stroke="black" d="M155.77,-541.93C161.72,-534.89 168.21,-526.42 173,-518 192.29,-484.14 206.65,-441.24 214.68,-413.95"/>
<polygon fill="black" stroke="black" points="218.06,-414.89 217.45,-404.31 211.33,-412.96 218.06,-414.89"/>
</g>
<!-- OsiClp -->
<g id="node11" class="node">
<title>OsiClp</title>
<path fill="royalblue" stroke="royalblue" d="M663.5,-298C663.5,-298 598.5,-298 598.5,-298 592.5,-298 586.5,-292 586.5,-286 586.5,-286 586.5,-274 586.5,-274 586.5,-268 592.5,-262 598.5,-262 598.5,-262 663.5,-262 663.5,-262 669.5,-262 675.5,-268 675.5,-274 675.5,-274 675.5,-286 675.5,-286 675.5,-292 669.5,-298 663.5,-298"/>
<text text-anchor="middle" x="631" y="-276.3" font-family="Times,serif" font-size="14.00">Coin::OsiClp</text>
<path fill="royalblue" stroke="royalblue" d="M192.5,-329C192.5,-329 127.5,-329 127.5,-329 121.5,-329 115.5,-323 115.5,-317 115.5,-317 115.5,-305 115.5,-305 115.5,-299 121.5,-293 127.5,-293 127.5,-293 192.5,-293 192.5,-293 198.5,-293 204.5,-299 204.5,-305 204.5,-305 204.5,-317 204.5,-317 204.5,-323 198.5,-329 192.5,-329"/>
<text text-anchor="middle" x="160" y="-307.3" font-family="Times,serif" font-size="14.00">Coin::OsiClp</text>
</g>
<!-- CoinUtils&#45;&gt;OsiClp -->
<g id="edge4" class="edge">
<title>CoinUtils&#45;&gt;OsiClp</title>
<path fill="none" stroke="black" d="M695.5,-507.63C700.09,-500.68 704.66,-492.35 707,-484 716.01,-451.91 715.82,-441.14 707,-409 696.29,-369.99 670.26,-330.82 651.65,-306.28"/>
<polygon fill="black" stroke="black" points="654.31,-304 645.42,-298.24 648.77,-308.28 654.31,-304"/>
<path fill="none" stroke="black" d="M152.18,-541.89C156.49,-534.84 160.81,-526.37 163,-518 179.28,-455.71 171.18,-379.17 164.94,-339.22"/>
<polygon fill="black" stroke="black" points="168.37,-338.49 163.29,-329.19 161.46,-339.63 168.37,-338.49"/>
</g>
<!-- Cgl -->
<g id="node13" class="node">
<title>Cgl</title>
<path fill="royalblue" stroke="royalblue" d="M676,-215C676,-215 630,-215 630,-215 624,-215 618,-209 618,-203 618,-203 618,-191 618,-191 618,-185 624,-179 630,-179 630,-179 676,-179 676,-179 682,-179 688,-185 688,-191 688,-191 688,-203 688,-203 688,-209 682,-215 676,-215"/>
<text text-anchor="middle" x="653" y="-193.3" font-family="Times,serif" font-size="14.00">Coin::Cgl</text>
<path fill="royalblue" stroke="royalblue" d="M154,-246C154,-246 108,-246 108,-246 102,-246 96,-240 96,-234 96,-234 96,-222 96,-222 96,-216 102,-210 108,-210 108,-210 154,-210 154,-210 160,-210 166,-216 166,-222 166,-222 166,-234 166,-234 166,-240 160,-246 154,-246"/>
<text text-anchor="middle" x="131" y="-224.3" font-family="Times,serif" font-size="14.00">Coin::Cgl</text>
</g>
<!-- CoinUtils&#45;&gt;Cgl -->
<g id="edge8" class="edge">
<title>CoinUtils&#45;&gt;Cgl</title>
<path fill="none" stroke="black" d="M700.09,-507.88C706.03,-501.08 711.9,-492.79 715,-484 731.45,-437.33 703.38,-269.47 697,-254 692.34,-242.68 684.7,-231.74 677.09,-222.58"/>
<polygon fill="black" stroke="black" points="679.7,-220.25 670.48,-215.03 674.43,-224.86 679.7,-220.25"/>
<path fill="none" stroke="black" d="M88.26,-541.91C77.82,-536.01 68.17,-528.21 62,-518 34.92,-473.18 80.16,-313.17 92,-285 96.57,-274.13 103.48,-263.25 110.22,-254"/>
<polygon fill="black" stroke="black" points="113.02,-256.1 116.3,-246.03 107.45,-251.86 113.02,-256.1"/>
</g>
<!-- CoinUtils&#45;&gt;Cbc -->
<g id="edge11" class="edge">
<title>CoinUtils&#45;&gt;Cbc</title>
<path fill="none" stroke="black" d="M641.21,-507.99C624.09,-500.75 604.01,-492.11 586,-484 507.51,-448.64 462.16,-470.23 411,-401 398.19,-383.66 404,-374.56 404,-353 404,-353 404,-353 404,-279 404,-230.95 393.83,-216.59 409,-171 412.6,-160.19 418.93,-149.53 425.4,-140.46"/>
<polygon fill="black" stroke="black" points="428.33,-142.39 431.56,-132.3 422.74,-138.17 428.33,-142.39"/>
<path fill="none" stroke="black" d="M88.03,-544.61C73.96,-538.46 59.9,-529.87 50,-518 11.55,-471.89 17,-447.04 17,-387 17,-387 17,-387 17,-310 17,-240.55 71.56,-173.86 105.19,-139.36"/>
<polygon fill="black" stroke="black" points="107.85,-141.65 112.43,-132.09 102.89,-136.71 107.85,-141.65"/>
</g>
<!-- OsiCbc -->
<g id="node15" class="node">
<title>OsiCbc</title>
<path fill="royalblue" stroke="royalblue" d="M614.5,-60C614.5,-60 547.5,-60 547.5,-60 541.5,-60 535.5,-54 535.5,-48 535.5,-48 535.5,-36 535.5,-36 535.5,-30 541.5,-24 547.5,-24 547.5,-24 614.5,-24 614.5,-24 620.5,-24 626.5,-30 626.5,-36 626.5,-36 626.5,-48 626.5,-48 626.5,-54 620.5,-60 614.5,-60"/>
<text text-anchor="middle" x="581" y="-38.3" font-family="Times,serif" font-size="14.00">Coin::OsiCbc</text>
<path fill="royalblue" stroke="royalblue" d="M133.5,-60C133.5,-60 66.5,-60 66.5,-60 60.5,-60 54.5,-54 54.5,-48 54.5,-48 54.5,-36 54.5,-36 54.5,-30 60.5,-24 66.5,-24 66.5,-24 133.5,-24 133.5,-24 139.5,-24 145.5,-30 145.5,-36 145.5,-36 145.5,-48 145.5,-48 145.5,-54 139.5,-60 133.5,-60"/>
<text text-anchor="middle" x="100" y="-38.3" font-family="Times,serif" font-size="14.00">Coin::OsiCbc</text>
</g>
<!-- CoinUtils&#45;&gt;OsiCbc -->
<g id="edge15" class="edge">
<title>CoinUtils&#45;&gt;OsiCbc</title>
<path fill="none" stroke="black" d="M702.08,-507.62C709.08,-500.79 716.54,-492.55 722,-484 755.57,-431.49 772,-415.32 772,-353 772,-353 772,-353 772,-196 772,-138.06 744.4,-123.99 699,-88 680.83,-73.59 657.54,-63.41 636.45,-56.42"/>
<polygon fill="black" stroke="black" points="637.22,-52.99 626.63,-53.34 635.12,-59.67 637.22,-52.99"/>
<path fill="none" stroke="black" d="M191.51,-544.97C258.48,-523.24 367,-474.52 367,-387 367,-387 367,-387 367,-227 367,-174.36 224.53,-100.44 147.73,-64.42"/>
<polygon fill="black" stroke="black" points="148.8,-61.06 138.25,-60.01 145.84,-67.41 148.8,-61.06"/>
</g>
<!-- Osi&#45;&gt;Clp -->
<g id="edge3" class="edge">
<title>Osi&#45;&gt;Clp</title>
<path fill="none" stroke="black" d="M644.34,-416.82C636.83,-405.76 626.92,-391.18 618.48,-378.75"/>
<polygon fill="black" stroke="black" points="621.16,-376.46 612.65,-370.15 615.37,-380.39 621.16,-376.46"/>
<path fill="none" stroke="black" d="M135.33,-450.82C151.37,-439.01 172.87,-423.18 190.44,-410.24"/>
<polygon fill="black" stroke="black" points="192.73,-412.9 198.71,-404.15 188.58,-407.26 192.73,-412.9"/>
</g>
<!-- Osi&#45;&gt;OsiClp -->
<g id="edge5" class="edge">
<title>Osi&#45;&gt;OsiClp</title>
<path fill="none" stroke="black" d="M654.9,-416.9C653.43,-396.9 650.37,-362.85 645,-334 643.41,-325.45 641.17,-316.25 638.95,-307.95"/>
<polygon fill="black" stroke="black" points="642.24,-306.74 636.19,-298.04 635.5,-308.61 642.24,-306.74"/>
<path fill="none" stroke="black" d="M117.32,-450.71C125.65,-423.65 141.82,-371.09 151.69,-339.01"/>
<polygon fill="black" stroke="black" points="155.06,-339.96 154.66,-329.37 148.37,-337.9 155.06,-339.96"/>
</g>
<!-- Osi&#45;&gt;Cgl -->
<g id="edge9" class="edge">
<title>Osi&#45;&gt;Cgl</title>
<path fill="none" stroke="black" d="M676.53,-416.94C680.79,-412.26 684.68,-406.85 687,-401 711.06,-340.26 704.6,-316.92 687,-254 684.06,-243.48 678.54,-232.98 672.79,-223.96"/>
<polygon fill="black" stroke="black" points="675.56,-221.8 667.06,-215.48 669.77,-225.73 675.56,-221.8"/>
<path fill="none" stroke="black" d="M106.98,-450.67C105.75,-445.66 104.62,-440.15 104,-435 96.09,-368.8 89.15,-349.99 104,-285 106.32,-274.85 110.73,-264.39 115.32,-255.31"/>
<polygon fill="black" stroke="black" points="118.45,-256.87 120.09,-246.4 112.28,-253.56 118.45,-256.87"/>
</g>
<!-- Osi&#45;&gt;Cbc -->
<g id="edge12" class="edge">
<title>Osi&#45;&gt;Cbc</title>
<path fill="none" stroke="black" d="M621.25,-433.1C569.21,-431.01 474.59,-424.06 451,-401 380.8,-332.38 416.64,-199.18 436.6,-142.07"/>
<polygon fill="black" stroke="black" points="440.02,-142.92 440.12,-132.32 433.43,-140.54 440.02,-142.92"/>
<path fill="none" stroke="black" d="M100.16,-450.87C97.32,-445.95 94.64,-440.44 93,-435 63.08,-335.76 57.15,-302.37 83,-202 88.7,-179.87 101.35,-157.35 112.24,-140.76"/>
<polygon fill="black" stroke="black" points="115.33,-142.44 118.05,-132.2 109.54,-138.51 115.33,-142.44"/>
</g>
<!-- Osi&#45;&gt;OsiCbc -->
<g id="edge16" class="edge">
<title>Osi&#45;&gt;OsiCbc</title>
<path fill="none" stroke="black" d="M683.96,-416.8C689.6,-412.25 695.01,-406.93 699,-401 729.88,-355.11 732,-336.31 732,-281 732,-281 732,-281 732,-196 732,-135.25 670.94,-89.89 626.48,-64.92"/>
<polygon fill="black" stroke="black" points="628.01,-61.77 617.55,-60.05 624.66,-67.91 628.01,-61.77"/>
<path fill="none" stroke="black" d="M85.78,-450.96C80.25,-446.35 74.91,-440.96 71,-435 39.85,-387.6 37,-368.72 37,-312 37,-312 37,-312 37,-227 37,-168.05 66.3,-103.93 84.94,-69.11"/>
<polygon fill="black" stroke="black" points="88.14,-70.54 89.88,-60.09 82,-67.18 88.14,-70.54"/>
</g>
<!-- Clp&#45;&gt;OsiClp -->
<g id="edge6" class="edge">
<title>Clp&#45;&gt;OsiClp</title>
<path fill="none" stroke="black" d="M608.42,-333.7C611.79,-325.81 615.87,-316.3 619.62,-307.55"/>
<polygon fill="black" stroke="black" points="622.95,-308.67 623.67,-298.1 616.51,-305.92 622.95,-308.67"/>
<path fill="none" stroke="black" d="M207.31,-367.7C199.51,-358.52 189.79,-347.07 181.19,-336.94"/>
<polygon fill="black" stroke="black" points="183.73,-334.53 174.59,-329.18 178.39,-339.06 183.73,-334.53"/>
</g>
<!-- ClpSolver -->
<g id="node12" class="node">
<title>ClpSolver</title>
<path fill="royalblue" stroke="royalblue" d="M556.5,-298C556.5,-298 475.5,-298 475.5,-298 469.5,-298 463.5,-292 463.5,-286 463.5,-286 463.5,-274 463.5,-274 463.5,-268 469.5,-262 475.5,-262 475.5,-262 556.5,-262 556.5,-262 562.5,-262 568.5,-268 568.5,-274 568.5,-274 568.5,-286 568.5,-286 568.5,-292 562.5,-298 556.5,-298"/>
<text text-anchor="middle" x="516" y="-276.3" font-family="Times,serif" font-size="14.00">Coin::ClpSolver</text>
<path fill="royalblue" stroke="royalblue" d="M315.5,-329C315.5,-329 234.5,-329 234.5,-329 228.5,-329 222.5,-323 222.5,-317 222.5,-317 222.5,-305 222.5,-305 222.5,-299 228.5,-293 234.5,-293 234.5,-293 315.5,-293 315.5,-293 321.5,-293 327.5,-299 327.5,-305 327.5,-305 327.5,-317 327.5,-317 327.5,-323 321.5,-329 315.5,-329"/>
<text text-anchor="middle" x="275" y="-307.3" font-family="Times,serif" font-size="14.00">Coin::ClpSolver</text>
</g>
<!-- Clp&#45;&gt;ClpSolver -->
<g id="edge7" class="edge">
<title>Clp&#45;&gt;ClpSolver</title>
<path fill="none" stroke="black" d="M579.99,-333.7C569.28,-324.88 556.11,-314.03 544.5,-304.47"/>
<polygon fill="black" stroke="black" points="546.71,-301.76 536.77,-298.1 542.26,-307.16 546.71,-301.76"/>
<path fill="none" stroke="black" d="M234.56,-367.7C241.09,-358.7 249.21,-347.52 256.45,-337.55"/>
<polygon fill="black" stroke="black" points="259.49,-339.32 262.53,-329.18 253.82,-335.21 259.49,-339.32"/>
</g>
<!-- Clp&#45;&gt;Cbc -->
<g id="edge13" class="edge">
<title>Clp&#45;&gt;Cbc</title>
<path fill="none" stroke="black" d="M565.9,-348.94C531.49,-344.86 480.61,-332.89 455,-298 421.29,-252.07 430.84,-180.8 439.62,-142.15"/>
<polygon fill="black" stroke="black" points="443.08,-142.71 442.03,-132.16 436.28,-141.06 443.08,-142.71"/>
<path fill="none" stroke="black" d="M257.21,-382.05C286.95,-378.73 326.22,-372.16 336,-360 356.89,-334.03 350.17,-315.17 336,-285 303.15,-215.07 225.84,-164 176.11,-136.97"/>
<polygon fill="black" stroke="black" points="177.63,-133.81 167.16,-132.2 174.34,-139.99 177.63,-133.81"/>
</g>
<!-- OsiClp&#45;&gt;Cgl -->
<g id="edge10" class="edge">
<title>OsiClp&#45;&gt;Cgl</title>
<path fill="none" stroke="black" d="M635.67,-261.82C638.58,-251.08 642.4,-237.03 645.71,-224.84"/>
<polygon fill="black" stroke="black" points="649.1,-225.72 648.34,-215.15 642.34,-223.89 649.1,-225.72"/>
<path fill="none" stroke="black" d="M153.85,-292.82C150.01,-282.08 144.97,-268.03 140.61,-255.84"/>
<polygon fill="black" stroke="black" points="143.81,-254.39 137.14,-246.15 137.22,-256.75 143.81,-254.39"/>
</g>
<!-- Cgl&#45;&gt;Cbc -->
<g id="edge14" class="edge">
<title>Cgl&#45;&gt;Cbc</title>
<path fill="none" stroke="black" d="M617.59,-182.08C583.16,-168.54 530.7,-147.91 493.05,-133.11"/>
<polygon fill="black" stroke="black" points="493.92,-129.69 483.33,-129.29 491.36,-136.2 493.92,-129.69"/>
<path fill="none" stroke="black" d="M131,-209.99C131,-192.06 131,-163.56 131,-142.44"/>
<polygon fill="black" stroke="black" points="134.5,-142.17 131,-132.17 127.5,-142.17 134.5,-142.17"/>
</g>
<!-- Cbc&#45;&gt;OsiCbc -->
<g id="edge17" class="edge">
<title>Cbc&#45;&gt;OsiCbc</title>
<path fill="none" stroke="black" d="M479.78,-95.88C497.63,-86.55 519.9,-74.92 539,-64.94"/>
<polygon fill="black" stroke="black" points="540.85,-67.92 548.09,-60.19 537.61,-61.72 540.85,-67.92"/>
<path fill="none" stroke="black" d="M123.34,-95.7C119.81,-87.73 115.54,-78.1 111.63,-69.26"/>
<polygon fill="black" stroke="black" points="114.82,-67.83 107.57,-60.1 108.42,-70.67 114.82,-67.83"/>
</g>
<!-- CbcSolver -->
<g id="node16" class="node">
<title>CbcSolver</title>
<path fill="royalblue" stroke="royalblue" d="M505.5,-60C505.5,-60 422.5,-60 422.5,-60 416.5,-60 410.5,-54 410.5,-48 410.5,-48 410.5,-36 410.5,-36 410.5,-30 416.5,-24 422.5,-24 422.5,-24 505.5,-24 505.5,-24 511.5,-24 517.5,-30 517.5,-36 517.5,-36 517.5,-48 517.5,-48 517.5,-54 511.5,-60 505.5,-60"/>
<text text-anchor="middle" x="464" y="-38.3" font-family="Times,serif" font-size="14.00">Coin::CbcSolver</text>
<path fill="royalblue" stroke="royalblue" d="M258.5,-60C258.5,-60 175.5,-60 175.5,-60 169.5,-60 163.5,-54 163.5,-48 163.5,-48 163.5,-36 163.5,-36 163.5,-30 169.5,-24 175.5,-24 175.5,-24 258.5,-24 258.5,-24 264.5,-24 270.5,-30 270.5,-36 270.5,-36 270.5,-48 270.5,-48 270.5,-54 264.5,-60 258.5,-60"/>
<text text-anchor="middle" x="217" y="-38.3" font-family="Times,serif" font-size="14.00">Coin::CbcSolver</text>
</g>
<!-- Cbc&#45;&gt;CbcSolver -->
<g id="edge18" class="edge">
<title>Cbc&#45;&gt;CbcSolver</title>
<path fill="none" stroke="black" d="M451.2,-95.7C453.1,-87.9 455.38,-78.51 457.48,-69.83"/>
<polygon fill="black" stroke="black" points="460.89,-70.65 459.85,-60.1 454.08,-69 460.89,-70.65"/>
<path fill="none" stroke="black" d="M152.26,-95.7C163.09,-86.88 176.42,-76.03 188.16,-66.47"/>
<polygon fill="black" stroke="black" points="190.44,-69.13 195.99,-60.1 186.02,-63.7 190.44,-69.13"/>
</g>
<!-- GLPK -->
<g id="node17" class="node">
<title>GLPK</title>
<path fill="royalblue" stroke="royalblue" d="M1325,-544C1325,-544 1277,-544 1277,-544 1271,-544 1265,-538 1265,-532 1265,-532 1265,-520 1265,-520 1265,-514 1271,-508 1277,-508 1277,-508 1325,-508 1325,-508 1331,-508 1337,-514 1337,-520 1337,-520 1337,-532 1337,-532 1337,-538 1331,-544 1325,-544"/>
<text text-anchor="middle" x="1301" y="-522.3" font-family="Times,serif" font-size="14.00">glpk::glpk</text>
<path fill="royalblue" stroke="royalblue" d="M820,-578C820,-578 772,-578 772,-578 766,-578 760,-572 760,-566 760,-566 760,-554 760,-554 760,-548 766,-542 772,-542 772,-542 820,-542 820,-542 826,-542 832,-548 832,-554 832,-554 832,-566 832,-566 832,-572 826,-578 820,-578"/>
<text text-anchor="middle" x="796" y="-556.3" font-family="Times,serif" font-size="14.00">glpk::glpk</text>
</g>
<!-- SCIP -->
<!-- HIGHS -->
<g id="node18" class="node">
<title>SCIP</title>
<path fill="royalblue" stroke="royalblue" d="M1611,-544C1611,-544 1567,-544 1567,-544 1561,-544 1555,-538 1555,-532 1555,-532 1555,-520 1555,-520 1555,-514 1561,-508 1567,-508 1567,-508 1611,-508 1611,-508 1617,-508 1623,-514 1623,-520 1623,-520 1623,-532 1623,-532 1623,-538 1617,-544 1611,-544"/>
<text text-anchor="middle" x="1589" y="-522.3" font-family="Times,serif" font-size="14.00">scip::scip</text>
<title>HIGHS</title>
<path fill="royalblue" stroke="royalblue" d="M1126.5,-578C1126.5,-578 1067.5,-578 1067.5,-578 1061.5,-578 1055.5,-572 1055.5,-566 1055.5,-566 1055.5,-554 1055.5,-554 1055.5,-548 1061.5,-542 1067.5,-542 1067.5,-542 1126.5,-542 1126.5,-542 1132.5,-542 1138.5,-548 1138.5,-554 1138.5,-554 1138.5,-566 1138.5,-566 1138.5,-572 1132.5,-578 1126.5,-578"/>
<text text-anchor="middle" x="1097" y="-556.3" font-family="Times,serif" font-size="14.00">highs::highs</text>
</g>
<!-- SPX&#45;&gt;SCIP -->
<g id="edge19" class="edge">
<title>SPX&#45;&gt;SCIP</title>
<path fill="none" stroke="black" d="M714.72,-95.7C715.93,-87.98 717.39,-78.71 718.74,-70.11"/>
<polygon fill="black" stroke="black" points="722.22,-70.53 720.31,-60.1 715.3,-69.44 722.22,-70.53"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.43.0 (0)
<!-- Generated by graphviz version 2.42.4 (0)
-->
<!-- Title: DockerDeps Pages: 1 -->
<svg width="1904pt" height="1113pt"

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View File

@@ -397,6 +397,9 @@ 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(need_unix_scip_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_SCIP}>>")
set(need_windows_scip_lib "$<AND:${is_windows},$<BOOL:${BUILD_SCIP}>>")
set(is_ortools_shared "$<STREQUAL:$<TARGET_PROPERTY:ortools,TYPE>,SHARED_LIBRARY>")
set(need_unix_ortools_lib "$<AND:${is_not_windows},${is_ortools_shared}>")
set(need_windows_ortools_lib "$<AND:${is_windows},${is_ortools_shared}>")

View File

@@ -300,6 +300,9 @@ 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(need_unix_scip_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_SCIP}>>")
set(need_windows_scip_lib "$<AND:${is_windows},$<BOOL:${BUILD_SCIP}>>")
set(is_ortools_shared "$<STREQUAL:$<TARGET_PROPERTY:ortools,TYPE>,SHARED_LIBRARY>")
set(need_unix_ortools_lib "$<AND:${is_not_windows},${is_ortools_shared}>")
set(need_windows_ortools_lib "$<AND:${is_windows},${is_ortools_shared}>")
@@ -445,8 +448,14 @@ add_custom_command(
COMMAND ${CMAKE_COMMAND} -E
$<IF:$<BOOL:${BUILD_HIGHS}>,copy,true>
$<${need_unix_highs_lib}:$<TARGET_SONAME_FILE:highs>>
$<${need_windows_highs_lib}:$<TARGET_FILE:highs>>
$<${need_unix_highs_lib}:$<TARGET_SONAME_FILE:highs::highs>>
$<${need_windows_highs_lib}:$<TARGET_FILE:highs::highs>>
${JAVA_RESSOURCES_PATH}/${JAVA_NATIVE_PROJECT}/
COMMAND ${CMAKE_COMMAND} -E
$<IF:$<BOOL:${BUILD_SCIP}>,copy,true>
$<${need_unix_scip_lib}:$<TARGET_SONAME_FILE:SCIP::libscip>>
$<${need_windows_scip_lib}:$<TARGET_FILE:SCIP::libscip>>
${JAVA_RESSOURCES_PATH}/${JAVA_NATIVE_PROJECT}/
COMMAND ${CMAKE_COMMAND} -E

View File

@@ -66,7 +66,7 @@ if(@USE_PDLP@)
endif()
if(@USE_SCIP@)
if(NOT TARGET libscip)
if(NOT TARGET SCIP::libscip)
find_dependency(SCIP REQUIRED)
endif()
endif()

View File

@@ -460,6 +460,9 @@ 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(need_unix_scip_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_SCIP}>>")
set(need_windows_scip_lib "$<AND:${is_windows},$<BOOL:${BUILD_SCIP}>>")
set(is_ortools_shared "$<STREQUAL:$<TARGET_PROPERTY:ortools,TYPE>,SHARED_LIBRARY>")
set(need_unix_ortools_lib "$<AND:${is_not_windows},${is_ortools_shared}>")
set(need_windows_ortools_lib "$<AND:${is_windows},${is_ortools_shared}>")
@@ -605,8 +608,14 @@ add_custom_command(
COMMAND ${CMAKE_COMMAND} -E
$<IF:$<BOOL:${BUILD_HIGHS}>,copy,true>
$<${need_unix_highs_lib}:$<TARGET_SONAME_FILE:highs>>
$<${need_windows_highs_lib}:$<TARGET_FILE:highs>>
$<${need_unix_highs_lib}:$<TARGET_SONAME_FILE:highs::highs>>
$<${need_windows_highs_lib}:$<TARGET_FILE:highs::highs>>
${PYTHON_PROJECT}/.libs
COMMAND ${CMAKE_COMMAND} -E
$<IF:$<BOOL:${BUILD_SCIP}>,copy,true>
$<${need_unix_scip_lib}:$<TARGET_SONAME_FILE:SCIP::libscip>>
$<${need_windows_scip_lib}:$<TARGET_FILE:SCIP::libscip>>
${PYTHON_PROJECT}/.libs
COMMAND ${CMAKE_COMMAND} -E

View File

@@ -131,8 +131,11 @@
$<@need_cgl_lib@:;$<TARGET_SONAME_FILE:Coin::Cgl>>
$<@need_cbc_lib@:;$<TARGET_SONAME_FILE:Coin::Cbc>;$<TARGET_SONAME_FILE:Coin::OsiCbc>;$<TARGET_SONAME_FILE:Coin::CbcSolver>>
$<@need_unix_highs_lib@:;$<TARGET_SONAME_FILE:highs>>
$<@need_windows_highs_lib@:;$<TARGET_FILE:highs>>
$<@need_unix_highs_lib@:;$<TARGET_SONAME_FILE:highs::highs>>
$<@need_windows_highs_lib@:;$<TARGET_FILE:highs::highs>>
$<@need_unix_scip_lib@:;$<TARGET_SONAME_FILE:SCIP::libscip>>
$<@need_windows_scip_lib@:;$<TARGET_FILE:SCIP::libscip>>
$<@need_unix_ortools_lib@:;$<TARGET_SONAME_FILE:ortools>>
$<@need_windows_ortools_lib@:;$<TARGET_FILE:ortools>>

View File

@@ -33,6 +33,6 @@ target_link_libraries(${NAME} PRIVATE
absl::strings
absl::str_format
protobuf::libprotobuf
$<$<BOOL:${USE_SCIP}>:libscip>
SCIP::libscip
${PROJECT_NAMESPACE}::ortools_proto)
#add_library(${PROJECT_NAMESPACE}::gscip ALIAS ${NAME})

View File

@@ -143,7 +143,7 @@ public class Loader {
Path tempPath = unpackNativeResources(resourceURI);
// libraries order does matter !
List<String> dlls = Arrays.asList("zlib1", "abseil_dll", "re2", "utf8_validity",
"libprotobuf", "highs", "ortools", "jniortools");
"libprotobuf", "highs", "libscip", "ortools", "jniortools");
for (String dll : dlls) {
try {
// System.out.println("System.load(" + dll + ")");

View File

@@ -48,7 +48,7 @@ target_link_libraries(${NAME} PRIVATE
$<$<BOOL:${USE_GLPK}>:GLPK::GLPK>
$<$<BOOL:${USE_HIGHS}>:highs::highs>
$<$<BOOL:${USE_PDLP}>:Eigen3::Eigen>
$<$<BOOL:${USE_SCIP}>:libscip>
$<$<BOOL:${USE_SCIP}>:SCIP::libscip>
${PROJECT_NAMESPACE}::ortools_proto)
#add_library(${PROJECT_NAMESPACE}::linear_solver ALIAS ${NAME})

View File

@@ -46,7 +46,7 @@ target_link_libraries(${NAME} PRIVATE
absl::status
absl::str_format
$<$<BOOL:${USE_PDLP}>:Eigen3::Eigen>
$<$<BOOL:${USE_SCIP}>:libscip>
$<$<BOOL:${USE_SCIP}>:SCIP::libscip>
$<$<BOOL:${USE_HIGHS}>:highs::highs>
${PROJECT_NAMESPACE}::ortools_proto)
#add_library(${PROJECT_NAMESPACE}::linear_solver_proto_solver ALIAS ${NAME})

View File

@@ -25,6 +25,6 @@ target_include_directories(${NAME} PRIVATE
${PROJECT_BINARY_DIR})
target_link_libraries(${NAME} PRIVATE
absl::status
$<$<BOOL:${USE_SCIP}>:libscip>
$<$<BOOL:${USE_SCIP}>:SCIP::libscip>
${PROJECT_NAMESPACE}::ortools_proto)
#add_library(${PROJECT_NAMESPACE}::linear_solver_wrappers ALIAS ${NAME})

View File

@@ -30,5 +30,5 @@ target_include_directories(${NAME} PUBLIC
target_link_libraries(${NAME} PRIVATE
${PROJECT_NAMESPACE}::math_opt_proto
absl::strings
$<$<BOOL:${USE_SCIP}>:libscip>
$<$<BOOL:${USE_SCIP}>:SCIP::libscip>
)

View File

@@ -55,7 +55,7 @@ target_link_libraries(${NAME} PRIVATE
$<$<BOOL:${USE_GLPK}>:GLPK::GLPK>
$<$<BOOL:${USE_HIGHS}>:highs::highs>
$<$<BOOL:${USE_PDLP}>:Eigen3::Eigen>
$<$<BOOL:${USE_SCIP}>:libscip>
$<$<BOOL:${USE_SCIP}>:SCIP::libscip>
${PROJECT_NAMESPACE}::math_opt_proto)
if(USE_SCIP)
@@ -267,4 +267,4 @@ if(USE_XPRESS)
"$<LINK_LIBRARY:WHOLE_ARCHIVE,ortools::math_opt_second_order_cone_tests>"
"$<LINK_LIBRARY:WHOLE_ARCHIVE,ortools::math_opt_qc_tests>"
)
endif()
endif()

View File

@@ -55,7 +55,10 @@ def _load_ortools_libs():
except:
pass
else:
for dll in ["zlib1.dll", "abseil_dll.dll", "utf8_validity.dll", "re2.dll", "libprotobuf.dll", "highs.dll", "ortools.dll"]:
for dll in ["zlib1.dll",
"abseil_dll.dll", "utf8_validity.dll", "re2.dll", "libprotobuf.dll",
"highs.dll", "libscip.dll",
"ortools.dll"]:
dll_path = os.path.join(basedir, ".libs", dll)
if os.path.exists(dll_path):
print(f"load {dll_path}...")

View File

@@ -0,0 +1,12 @@
diff -ru a/tools/cmake/include/BoostInstall.cmake b/tools/cmake/include/BoostInstall.cmake
--- a/tools/cmake/include/BoostInstall.cmake 2024-12-12 00:43:08.000000000 +0100
+++ b/tools/cmake/include/BoostInstall.cmake 2025-03-03 13:11:00.310140710 +0100
@@ -306,7 +306,7 @@
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
)
- export(TARGETS ${LIB} NAMESPACE Boost:: FILE export/${LIB}-targets.cmake)
+ #export(TARGETS ${LIB} NAMESPACE Boost:: FILE export/${LIB}-targets.cmake)
if(MSVC)
if(TYPE STREQUAL "SHARED_LIBRARY")

View File

@@ -1,45 +1,145 @@
diff --git a/src/lpi/lpi_glop.cpp b/src/lpi/lpi_glop.cpp
index a90120188a..2c068e5e30 100644
--- a/src/lpi/lpi_glop.cpp
+++ b/src/lpi/lpi_glop.cpp
@@ -51,7 +51,6 @@
#include "ortools/util/time_limit.h"
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8492dc75..4c12a9bf 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -38,9 +38,11 @@ set(CPACK_PACKAGE_VENDOR "Zuse Institute Berlin")
set(CPACK_PACKAGE_CONTACT "http://scipopt.org")
include(CPack)
#include "ortools/base/logging.h"
-#include "ortools/base/vlog_is_on.h"
-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
-set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
-set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
+if(CMAKE_PROJECT_NAME EQUAL "SCIP")
+ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
+ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
+ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
+endif()
#include "lpi/lpi.h"
#include "scip/pub_message.h"
@@ -2942,12 +2941,12 @@ SCIP_RETCODE SCIPlpiSetIntpar(
SCIPdebugMessage("SCIPlpiSetIntpar: SCIP_LPPAR_LPINFO -> %d.\n", ival);
if ( ival == 0 )
{
- (void) google::SetVLOGLevel("*", google::GLOG_INFO);
+ absl::SetStderrThreshold(absl::LogSeverityAtLeast::kInfo);
lpi->lp_info = false;
}
else
{
- (void) google::SetVLOGLevel("*", google::GLOG_ERROR);
+ absl::SetStderrThreshold(absl::LogSeverityAtLeast::kError);
lpi->lp_info = true;
}
break;
@@ -3190,7 +3189,7 @@ SCIP_RETCODE SCIPlpiReadLP(
if(SCIPOptSuite_BINARY_DIR)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${SCIPOptSuite_BINARY_DIR}/bin)
@@ -412,22 +414,11 @@ endif()
#search the selected LP solver library
message(STATUS "Finding Solver \"${LPS}\"")
if(LPS STREQUAL "spx")
- message(STATUS "Finding Soplex")
- find_package(SOPLEX CONFIG HINTS ${SOPLEX_DIR})
- if(NOT SOPLEX_FOUND)
- # Utilities to automatically download missing dependencies
- include(cmake/Dependencies.cmake)
- find_or_download_package(
- NAME SOPLEX
- VERSION 7.0.1
- URL https://github.com/scipopt/soplex/archive/refs/tags/release-701.tar.gz
- URL_HASH SHA256=80cce994dcbe45fd52b60e31a3aeb5d2c60a7ddbaae495e0ce6bf58481675696
- COMPONENTS soplex)
- find_package(SOPLEX REQUIRED CONFIG HINTS _deps/local)
- endif()
- if(NOT SOPLEX_FOUND)
+ message(STATUS "Finding Soplex...")
+ if(NOT TARGET libsoplex-pic OR NOT TARGET libsoplex)
message(FATAL_ERROR "Requested LP solver SoPlex not found.")
endif()
+ set(SOPLEX_FOUND TRUE)
if (DEFINED SOPLEX_WITH_PAPILO)
message(STATUS "SOPLEX links PAPILO")
if((NOT SCIP_WITH_PAPILO)) # TODO not sure how to handle AUTOBUILD
@@ -502,9 +493,9 @@ if(SOPLEX_FOUND)
message(STATUS "Finding SOPLEX - found")
# SoPlex headers can be directly included
include_directories(${SOPLEX_INCLUDE_DIRS})
- set(LPS_LIBRARIES ${SOPLEX_LIBRARIES})
+ set(LPS_LIBRARIES libsoplex)
if(SHARED)
- set(LPS_PIC_LIBRARIES ${SOPLEX_PIC_LIBRARIES})
+ set(LPS_PIC_LIBRARIES libsoplex-pic)
else()
set(LPS_PIC_LIBRARIES ${LPS_LIBRARIES})
endif()
@@ -514,7 +505,7 @@ if(SOPLEX_FOUND)
set(lpi lpi/lpi_spx2.cpp)
endif()
else()
- message(STATUS "Support SOPLEX: OFF")
+ message(FATAL_ERROR "SOPLEX not found !")
endif()
const std::string filespec(fname);
MPModelProto proto;
- if ( ! ReadFileToProto(filespec, &proto) )
+ if ( ! ReadFileToProto(filespec, &proto).ok() )
{
SCIPerrorMessage("Could not read <%s>\n", fname);
return SCIP_READERROR;
@@ -3214,7 +3213,7 @@ SCIP_RETCODE SCIPlpiWriteLP(
MPModelProto proto;
LinearProgramToMPModelProto(*lpi->linear_program, &proto);
const std::string filespec(fname);
- if ( ! WriteProtoToFile(filespec, proto, operations_research::ProtoWriteFormat::kProtoText, true) )
+ if ( ! WriteProtoToFile(filespec, proto, operations_research::ProtoWriteFormat::kProtoText, true).ok() )
{
SCIPerrorMessage("Could not write <%s>\n", fname);
return SCIP_READERROR;
if(CLP_FOUND)
diff --git a/scip-config.cmake.in b/scip-config.cmake.in
index 559552f9..682ac40a 100644
--- a/scip-config.cmake.in
+++ b/scip-config.cmake.in
@@ -1,17 +1,16 @@
if(NOT TARGET libscip)
- include("${CMAKE_CURRENT_LIST_DIR}/scip-targets.cmake")
-endif()
+ include(CMakeFindDependencyMacro)
+ if(@ZIMPL_NEEDED@)
+ find_dependency(ZIMPL REQUIRED NO_MODULE)
+ endif()
+ if(@SOPLEX_NEEDED@)
+ find_dependency(SOPLEX REQUIRED NO_MODULE)
+ endif()
-if(@ZIMPL_NEEDED@)
- set(ZIMPL_DIR "@CONF_ZIMPL_DIR@")
- find_package(ZIMPL QUIET CONFIG)
-endif()
-
-if(@SOPLEX_NEEDED@)
- set(SOPLEX_DIR "@CONF_SOPLEX_DIR@")
- find_package(SOPLEX QUIET CONFIG)
+ include("${CMAKE_CURRENT_LIST_DIR}/scip-targets.cmake")
endif()
+# Legacy
set(SCIP_LIBRARIES libscip)
set(SCIP_INCLUDE_DIRS "@CONF_INCLUDE_DIRS@")
set(SCIP_FOUND TRUE)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index e6fda2d5..2d04b845 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1149,17 +1149,8 @@ install(TARGETS scip libscip EXPORT scip-targets
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
# Add all targets to the build-tree export set
-export(TARGETS scip libscip
- FILE "${PROJECT_BINARY_DIR}/scip-targets.cmake")
-
-# make soplex and zimpl dir absolute for the config file
-if(SOPLEX_NEEDED)
- get_filename_component(CONF_SOPLEX_DIR ${SOPLEX_DIR} REALPATH BASE_DIR ${CMAKE_SOURCE_DIR})
-endif()
-
-if(ZIMPL_NEEDED)
- get_filename_component(CONF_ZIMPL_DIR ${ZIMPL_DIR} REALPATH BASE_DIR ${CMAKE_SOURCE_DIR})
-endif()
+#export(TARGETS scip libscip
+# FILE "${PROJECT_BINARY_DIR}/scip-targets.cmake")
# configure the config file for the build tree
set(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/src" "${PROJECT_BINARY_DIR}")
@@ -1175,18 +1166,16 @@ ${PROJECT_BINARY_DIR}/scip-config-version.cmake
#configure the config file for the install
set(CONF_INCLUDE_DIRS "\${CMAKE_CURRENT_LIST_DIR}/../../../include")
-if(SOPLEX_NEEDED)
- set(CONF_SOPLEX_DIR "\${CMAKE_CURRENT_LIST_DIR}/../soplex")
-endif()
-if(ZIMPL_NEEDED)
- set(CONF_ZIMPL_DIR "\${CMAKE_CURRENT_LIST_DIR}/../zimpl")
-endif()
configure_file(${PROJECT_SOURCE_DIR}/scip-config.cmake.in
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/scip-config.cmake" @ONLY)
# install the targets of the scip export group and the config file so that other projects
# can link easily against scip
-install(EXPORT scip-targets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/scip)
+install(EXPORT scip-targets
+ NAMESPACE SCIP::
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/scip
+ COMPONENT Devel
+)
install(FILES "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/scip-config.cmake"
${PROJECT_BINARY_DIR}/scip-config-version.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/scip)

225
patches/soplex-v7.1.3.patch Normal file
View File

@@ -0,0 +1,225 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0b21f5a..ddf1536 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -27,6 +27,10 @@ set(CPACK_PACKAGE_VERSION_PATCH "${SOPLEX_VERSION_PATCH}")
set(CPACK_PACKAGE_VENDOR "Zuse Institute Berlin")
include(CPack)
+# Disable CTest targets
+set_property(GLOBAL PROPERTY CTEST_TARGETS_ADDED 1)
+include(CTest)
+
option(ZLIB "Use ZLIB" ON)
option(GMP "Use GMP" ON)
option(EMSCRIPTEN_HTML "Emscripten HTML output" OFF)
@@ -43,11 +47,17 @@ option(SANITIZE_THREAD "should the thread sanitizer be enabled in debug mode if
option(COVERAGE "enable coverage support" OFF)
option(PAPILO "should papilo library be linked" ON)
+option(SOPLEX_EXAMPLE "Build example" OFF)
+option(SOPLEX_SOPLEX "Build soplex program" OFF)
+option(SOPLEX_EXPORT "Enable to use soplex from the current project's build tree, without installation." OFF)
+
SET(COVERAGE_CTEST_ARGS "" CACHE STRING "additional ctest arguments for coverage")
-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
-set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
-set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+if(CMAKE_PROJECT_NAME EQUAL "SOPLEX")
+ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
+ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+endif()
# for colorized output
if(NOT WIN32)
@@ -69,6 +79,8 @@ set(CMAKE_MACOSX_RPATH ON)
# use C++14 standard
set(CMAKE_CXX_STANDARD 14)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_CXX_EXTENSIONS OFF)
# set function visibility default to hidden
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
@@ -123,12 +135,11 @@ if(COVERAGE)
endif()
if(ZLIB)
- find_package(ZLIB)
-endif()
-if(ZLIB_FOUND)
- set(SOPLEX_WITH_ZLIB on)
- set(libs ${libs} ${ZLIB_LIBRARIES})
- include_directories(${ZLIB_INCLUDE_DIRS})
+ if(NOT TARGET ZLIB::ZLIB)
+ find_package(ZLIB REQUIRED)
+ endif()
+ set(SOPLEX_WITH_ZLIB on)
+ set(libs ${libs} ZLIB::ZLIB)
endif()
if(GMP)
@@ -170,39 +181,24 @@ else()
set(SOPLEX_WITH_PAPILO off)
endif()
-set(BOOST_MINIMUM_VERSION 1.65.0)
+set(BOOST_MINIMUM_VERSION 1.65.0) # PaPILO requires at least Boost 1.65 (on mac 1.72)
if(BOOST)
- find_package(Boost ${BOOST_MINIMUM_VERSION}) # PaPILO requires at least Boost 1.65 (on mac 1.72)
- if(Boost_FOUND)
- set(SOPLEX_WITH_BOOST on)
- include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
- if(NOT Boost_VERSION_MACRO)
- set(Boost_VERSION_MACRO ${Boost_VERSION})
- endif()
- if(${Boost_VERSION_MACRO} LESS "107000")
- if(NOT SOPLEX_WITH_GMP)
- message(SEND_ERROR "If no GMP is linked, then the minimal Boost verion is 1.70. \
- Found Boost version is ${Boost_VERSION_STRING}. Either provide newer Boost, link GMP, or disable Boost by setting BOOST=off.")
- else()
- message(WARNING "The multiprecision and quadprecision features are disabled with Boost versions older than 1.70. \
- Found Boost version is ${Boost_VERSION_STRING}.")
- endif()
- endif()
- if(MPFR) # MPFR is used within boost multiprecision, so using it without Boost does not make sense
- find_package(MPFR)
- endif()
- if(MPFR_FOUND)
- message(STATUS "SoPlex with Boost MPFR libraries")
- set(SOPLEX_WITH_MPFR on)
- include_directories(${MPFR_INCLUDE_DIRS})
- set(libs ${libs} ${MPFR_LIBRARIES})
- else()
- message(STATUS "SoPlex with Boost CPP multiprecision libraries")
- set(SOPLEX_WITH_CPPMPF on)
- endif()
- else()
- set(BOOST off)
- endif()
+ if(NOT TARGET Boost::multiprecision OR NOT TARGET Boost::serialization)
+ message(FATAL_ERROR "Boost::multiprecision or Boost::serialization not available!!!")
+ find_package(Boost ${BOOST_MINIMUM_VERSION} REQUIRED)
+ endif()
+ set(SOPLEX_WITH_BOOST on)
+ set(libs ${libs} Boost::multiprecision Boost::serialization)
+ if(MPFR) # MPFR is used within boost multiprecision, so using it without Boost does not make sense
+ find_package(MPFR REQUIRED)
+ message(STATUS "SoPlex with Boost MPFR libraries")
+ set(SOPLEX_WITH_MPFR on)
+ include_directories(${MPFR_INCLUDE_DIRS})
+ set(libs ${libs} ${MPFR_LIBRARIES})
+ else()
+ message(STATUS "SoPlex with Boost CPP multiprecision libraries")
+ set(SOPLEX_WITH_CPPMPF on)
+ endif()
endif()
# disable fused floating point contraction to enhance reproducibility across compilers and architectures
@@ -247,7 +243,7 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/soplex/config.h.in ${PROJECT_BINA
configure_file(${PROJECT_SOURCE_DIR}/soplex-config.cmake.in "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/soplex-config.cmake" @ONLY)
add_subdirectory(src)
-add_subdirectory(tests/c_interface)
-add_subdirectory(check)
-
-enable_testing()
+if(BUILD_TESTING)
+ add_subdirectory(tests/c_interface)
+ add_subdirectory(check)
+endif()
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 84ec5a5..6f5d4ef 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -193,24 +193,28 @@ target_link_libraries(libsoplexshared libsoplex ${libs})
set_target_properties(libsoplexshared PROPERTIES CXX_VISIBILITY_PRESET default)
# create soplex binary using library without pic
-add_executable(soplex soplexmain.cpp)
-target_link_libraries(soplex LINK_PUBLIC libsoplex ${Boost_LIBRARIES})
+if(SOPLEX_SOPLEX)
+ add_executable(soplex EXCLUDE_FROM_ALL soplexmain.cpp)
+ target_link_libraries(soplex PRIVATE libsoplex ${Boost_LIBRARIES})
-if(EMSCRIPTEN AND EMSCRIPTEN_HTML)
+ # set the install rpath to the installed destination
+ set_target_properties(soplex PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
+
+ if(EMSCRIPTEN AND EMSCRIPTEN_HTML)
set_target_properties(soplex PROPERTIES LINK_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/soplex_webdemo_shell.html)
set(CMAKE_EXECUTABLE_SUFFIX ".html")
-endif()
+ endif()
-if(CMAKE_BUILD_TYPE EQUAL "Debug")
- find_package(Sanitizers)
- add_sanitizers(soplex)
+ if(CMAKE_BUILD_TYPE EQUAL "Debug")
+ find_package(Sanitizers)
+ add_sanitizers(soplex)
+ endif()
endif()
-add_executable(example EXCLUDE_FROM_ALL example.cpp)
-target_link_libraries(example libsoplex)
-
-# set the install rpath to the installed destination
-set_target_properties(soplex PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
+if(SOPLEX_EXAMPLE)
+ add_executable(example example.cpp)
+ target_link_libraries(example libsoplex)
+endif()
# install the header files of soplex
install(FILES ${headers} ${PROJECT_BINARY_DIR}/soplex/config.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/soplex)
@@ -237,15 +241,28 @@ install(FILES
DESTINATION include/soplex/external/zstr)
# install the binary and the library to appropriate lcoations and add them to an export group
-install(TARGETS soplex libsoplex libsoplex-pic libsoplexshared EXPORT soplex-targets
+if(SOPLEX_SOPLEX)
+ install(TARGETS soplex
+ EXPORT soplex-targets
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+endif()
+
+install(TARGETS libsoplex libsoplex-pic libsoplexshared
+ EXPORT soplex-targets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+install(EXPORT soplex-targets
+ FILE soplex-targets.cmake
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/soplex)
+
# Add library targets to the build-tree export set
-export(TARGETS libsoplex libsoplex-pic libsoplexshared
- FILE "${CMAKE_BINARY_DIR}/soplex-targets.cmake")
+if(SOPLEX_EXPORT)
+ export(TARGETS libsoplex libsoplex-pic libsoplexshared
+ FILE "${CMAKE_BINARY_DIR}/soplex-targets.cmake")
+endif()
#configure the config file for the build tree
set(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/src" "${PROJECT_BINARY_DIR}")
@@ -259,7 +276,6 @@ ${CMAKE_BINARY_DIR}/soplex-config-version.cmake
COMPATIBILITY SameMajorVersion
)
-
#configure the config file for the install
set(CONF_INCLUDE_DIRS "\${CMAKE_CURRENT_LIST_DIR}/../../../include")
configure_file(${PROJECT_SOURCE_DIR}/soplex-config.cmake.in
@@ -267,7 +283,6 @@ configure_file(${PROJECT_SOURCE_DIR}/soplex-config.cmake.in
# install the targets of the soplex export group and the config file so that other projects
# can link easily against soplex
-install(EXPORT soplex-targets FILE soplex-targets.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/soplex)
install(FILES "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/soplex-config.cmake"
${CMAKE_BINARY_DIR}/soplex-config-version.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/soplex)