Installation {#INSTALL} ============ There are two ways to compile the code: CMake and plain Makefiles. Using CMake is highly recommended. CMake Build System ------------------ [CMake](https://cmake.org/) is a build system generator that can create, e.g., Makefiles for UNIX and macOS or Visual Studio project files for Windows. CMake provides an [extensive documentation](https://cmake.org/cmake/help/latest/manual/cmake.1.html) explaining available features and use cases as well as an [FAQ section](https://cmake.org/Wiki/CMake_FAQ). These are the usual steps on a Linux or macOS system: mkdir build cd build cmake make # optional: run a quick test make test #optional: run a (slow) memory check ctest -T MemCheck # optional: install SoPlex executable, library, and headers make install CMake uses an out-of-source build, i.e., compiled binaries and object files are separated from the source tree and located in another directory, e.g, `build`. From within this directory, run `cmake ` to configure your build, followed by `make` to compile the code according to the current configuration. Afterwards, successive calls to `make` are going to recompile modified source code, without requiring another call to `cmake`. The generated executable and libraries are put in directories `bin` and `lib` respectively. ### Modifying a CMake configuration There are several options that can be passed to the `cmake ` call to modify how the code is built. For all of these options and parameters you have to use `-D=`. Following a list of available options, for the full list run `cmake -LH`: | CMake option | Available values | Makefile equivalent | Remarks | |----------------------|------------------------------|------------------------|---------| | CMAKE_BUILD_TYPE | Release, Debug, ... | OPT=[opt, dbg] | | | GMP | on, off | GMP=[true, false] | | | CMAKE_INSTALL_PREFIX | \ | INSTALLDIR=\ | | | GMP_DIR | \ | -- | | | ..._DIR | \ | -- | | | COVERAGE | on, off | -- | | | MT | on, off | -- | use static runtime libraries for Visual Studio compiler on Windows | | SANITIZE_... | on, off | -- | enable sanitizer in debug mode if available | | BOOST | on, off | BOOST=[true,false] | necessary for the binary, optional for building libsoplex | | QUADMATH | on, off | QUADMATH=[true,false] | to run SoPlex with Quadruple precision | Parameters can be set all at once or in subsequent calls to `cmake` - extending or modifying the existing configuration. ### Installation CMake uses a default directory for installation, e.g., `/usr/local` on Linux. This can be modified using `-DCMAKE_INSTALL_PREFIX=`. Makefile -------- The plain Makefile system only reliably works on UNIX systems: Description | Command ---------------------------|--------- On systems with GNU g++ | `make COMP=gnu OPT=opt` (default) Linux/x86 with Intel C++ | `make COMP=intel OPT=opt` Tru64 with Compaq C++ | `make COMP=compaq OPT=opt` Solaris with SUN Forte C++ | `make COMP=sun OPT=opt` IRIX with SGI Mips Pro C++ | `make COMP=sgi OPT=opt` HP-UX with HP aCC | `make COMP=hp OPT=opt` AIX with VisualAge C++ | `make COMP=ibm OPT=opt` Then type `make COMP= OPT= test`. This should report no fails. If ZLIB is not available, building may fail. In this case try make COMP= OPT= ZLIB=false which will deactivate the possibility to read gzipped LP and MPS files. ### Boost support Boost is required for higher precision and rational solving methods. By default, building with boost is enabled. If you wish to only build the SoPlex library - using cmake, set `cmake -DBOOST=off`. - using make, use `make BOOST=false makelibfile`. ### GMP support For using SoPlex as an exact rational LP solver, SoPlex must be compiled with support for the [GNU Multiple Precision library](http://www.gmplib.org/) for this. If GMP is not available, you can deactivate it by building with make COMP= OPT= GMP=false. If you use a different build system than the provided Makefile and want to build with GMP support, you need to define `SOPLEX_WITH_GMP` for the preprocessor and link with the GMP callable library. Note for building SCIP with SoPlex: If SoPlex was built with GMP, then SCIP also needs to be built with GMP (default). ### Webdemo SoPlex can be compiled into a single HTML file and used in a browser. This requires `emscripten` to be installed from their website (unfortunately, e.g. `sudo apt install emscripten` in Ubuntu Linux is broken): https://emscripten.org/docs/getting_started/downloads.html Then, run sh build_webdemo.sh This will create the file `build_webdemo/bin/soplex.html`. For fast edit iterations run find src | entr -rs 'make -C build_webdemo soplex; echo' This will rebuild `soplex.html` every time a source file is modified (e.g. from Visual Studio Code). Using the Library ================= Examples on how to use the SoPlex library are provided in the files `src/soplexmain.cpp` and `src/example.cpp`.