Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
c0d7e5e
Moved Precompiled libraries and executables to the top of INSTALL.md …
cvanaret Apr 23, 2026
6fa0a0f
Simplified INSTALL.md
cvanaret Apr 23, 2026
5d2c292
Update INSTALL.md for clarity and formatting
amontoison Apr 24, 2026
d4f7fc8
Fixed paths for precompiled libs + added missing BLAS, LAPACK and AUX…
cvanaret Apr 26, 2026
94bdb60
Simplified README.md, moved some sections to the documentation
cvanaret Apr 27, 2026
dc39f2e
Minor changes
cvanaret Apr 27, 2026
d4507a2
Listed supported methods in README
cvanaret Apr 27, 2026
0ae0777
Improved README
cvanaret Apr 27, 2026
edf20d9
Moved most of the unopy README into the documentation
cvanaret Apr 29, 2026
0cf8fff
Fixed a list
cvanaret Apr 29, 2026
7063d96
Improved unopy README
cvanaret Apr 29, 2026
e9f74bc
Improved unopy README
cvanaret Apr 29, 2026
7013da0
Moved options irace/json/tsv files to /options directory
cvanaret May 1, 2026
5cbd8a7
Added "Getting started" page
cvanaret May 1, 2026
f5213f0
Symlink of INSTALL.md to docs/installation.md
cvanaret May 1, 2026
18385ae
Break lines in getting_started.md
cvanaret May 1, 2026
d88dd51
Improved nav
cvanaret May 1, 2026
be305a8
Fixes
cvanaret May 1, 2026
1b579a5
Re-added wheel to README
cvanaret May 2, 2026
02046b1
Completed table of contents in README
cvanaret May 2, 2026
f39f097
Added JOSS citation
cvanaret May 2, 2026
3c2321d
Renamed uno_solver.md into architecture
cvanaret May 2, 2026
bb2a6d9
Added doc page for Fortran
cvanaret May 2, 2026
000432c
Forgot SSIDS
cvanaret May 2, 2026
11b2e00
Logo in doc index
cvanaret May 2, 2026
3c3c915
Added @nimgould's suggestions + listed CMake options in table
cvanaret May 4, 2026
fca14d1
Improvements
cvanaret May 4, 2026
cce26c1
Improved Python READMEs
cvanaret May 4, 2026
fd5cb7a
Separate section for CMake options
cvanaret May 5, 2026
72f60e4
Added admonition to the markdown_extensions (for rendering Notes)
cvanaret May 5, 2026
93c66f2
Fixed list
cvanaret May 5, 2026
717c78d
Added plugin to render Github admonitions to mkdocs admonitions
cvanaret May 5, 2026
71308c4
Moved Python and Julia example from READMEs to docs
cvanaret May 5, 2026
8150e5a
Added mkdocs-github-admonitions-plugin to .readthedocs.yaml
cvanaret May 5, 2026
d564f90
Added success stories
cvanaret May 5, 2026
fdadbbd
Fixed legends
cvanaret May 5, 2026
3d2738f
Symlinks of AMPL, C, and Fortran READMEs
cvanaret May 5, 2026
05bb56b
Trying content tabs
cvanaret May 6, 2026
41d14e9
Fixed path of performance profile
cvanaret May 6, 2026
e829684
Used content tab in INSTALL.md
cvanaret May 6, 2026
8b613eb
Minor changes
cvanaret May 6, 2026
46e1587
Merge branch 'main' into joss_revisions
cvanaret Jun 1, 2026
cae1080
Documented unopy callbacks
cvanaret Jun 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .readthedocs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ build:
# https://docs.readthedocs.io/page/guides/reproducible-builds.html
jobs:
pre_install:
- pip install mkdocs-material
- pip install mkdocs-material mkdocs-github-admonitions-plugin

mkdocs:
configuration: mkdocs.yml
170 changes: 89 additions & 81 deletions INSTALL.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,67 @@
## Installation instructions
# Installation guide

### Packages and libraries
## Precompiled libraries and executables

* install BLAS and LAPACK:
We provide precompiled Uno libraries and executables in the [releases tab](https://github.com/cvanaret/Uno/releases/latest/) for Linux (x64 and aarch64), macOS (x64 and aarch64), and Windows (x64).

> [!NOTE]
> The shared library `libhsl.so` / `libhsl.dylib` / `libhsl.dll` provided in the precompiled archive is a dummy version that does not include the official HSL linear solvers such as `MA27` or `MA57`.
> However, it can be safely replaced with the official precompiled [libHSL](https://licences.stfc.ac.uk/products/Software/HSL/LibHSL) library without the need to recompile anything.
> The routine symbols are identical, allowing seamless hot-swapping of the library.

On some platforms, the dynamic linker needs to know where to look for libraries at runtime.
You might need to set the following environment variables:

- `LD_LIBRARY_PATH` on Linux
- `DYLD_LIBRARY_PATH` or `DYLD_FALLBACK_LIBRARY_PATH` on macOS
- `PATH` on Windows

These variables should include the directories where you extracted the library files.
For all platforms, the environment variable `PATH` is needed to locate the binary `uno_ampl` / `uno_ampl.exe`.

**Example for Linux**:
```console
sudo apt install libblas-dev liblapack-dev
tar -xzf Uno.vX.Y.Z.linux.tar.gz
export LD_LIBRARY_PATH=/path/to/extracted/Uno/lib:/path/to/extracted/Uno/deps:$LD_LIBRARY_PATH
export PATH=/path/to/extracted/Uno/bin:$PATH
```

**Example for macOS**:
```console
tar -xzf Uno.vX.Y.Z.macos.tar.gz
export DYLD_LIBRARY_PATH=/path/to/extracted/Uno/lib:/path/to/extracted/Uno/deps:$DYLD_LIBRARY_PATH
export PATH=/path/to/extracted/Uno/bin:$PATH
```
* install cmake (and optionally ccmake, CMake curses interface):
Alternatively, you can use `DYLD_FALLBACK_LIBRARY_PATH` instead of `DYLD_LIBRARY_PATH`.

**Example for Windows (PowerShell)**:
```console
sudo apt install cmake cmake-curses-gui
tar -xzf Uno.vX.Y.Z.windows.zip
$env:PATH="C:\path\to\extracted\Uno\bin;C:\path\to\extracted\Uno\lib;C:\path\to\extracted\Uno\deps;$env:PATH"
```

**Example for Windows (Command Prompt)**:
```console
tar -xzf Uno.vX.Y.Z.windows.zip
set PATH=C:\path\to\extracted\Uno\bin;C:\path\to\extracted\Uno\lib;C:\path\to\extracted\Uno\deps;%PATH%
```

## Dependencies

* install cmake, BLAS and LAPACK:
```console
sudo apt update
sudo apt install cmake
sudo apt install libblas-dev liblapack-dev
```

* **(optional)** download the AMPL solver library (ASL): http://www.netlib.org/ampl/solvers/

* **(optional)** download solvers:
* BQPD (null-space active set solver for nonconvex quadratic programming): get a precompiled binary for your architecture (https://github.com/leyffer/BQPD_jll.jl/releases) or get in touch with Sven Leyffer to apply for an academic license (https://www.mcs.anl.gov/~leyffer/solvers.html)
* MA27 (sparse indefinite symmetric linear solver): https://www.hsl.rl.ac.uk/download/MA27/1.0.0
* MA57 (sparse indefinite symmetric linear solver): http://www.hsl.rl.ac.uk/catalogue/ma57.html
* LIBHSL (collection of libraries for sparse linear systems): https://licences.stfc.ac.uk/products/Software/HSL/LibHSL
* LIBHSL (collection of solvers for sparse linear systems): https://licences.stfc.ac.uk/products/Software/HSL/LibHSL
* MUMPS (sparse indefinite symmetric linear solver): https://mumps-solver.org/index.php?page=dwnld
* SSIDS (sparse indefinite symmetric linear solver): https://github.com/ralna/spral
* HiGHS (linear programming and convex quadratic programming solver): https://highs.dev
Expand All @@ -36,88 +81,51 @@ lstopo --of xml ~/.config/hwloc-topology.xml
echo 'export HWLOC_XMLFILE=$HOME/.config/hwloc-topology.xml' >> ~/.bashrc
```

### Compilation
## Compiling and installing Uno

1. Create a `build` directory in the main directory and move to it:
The sequence of commands to configure and build is as follows (assuming the build directory is `build`):
```console
mkdir build && cd build
cmake -S . -B build [options]
cmake --build build --parallel
```
2. Execute cmake:
```console
cmake [options] ..
```
You can pass the following options:
- build type: `-DCMAKE_BUILD_TYPE=[Release|Debug]`
- build the Uno static library `uno_static`: `-DBUILD_STATIC_LIBS=[ON|OFF]`
- build the Uno shared library `uno_shared`: `-DBUILD_SHARED_LIBS=[ON|OFF]`
- path to the BQPD library: `-DBQPD=path_to_libbqpd`
- path to the MA27 library: `-DMA57=path_to_libma27`
- path to the MA57 library: `-DMA57=path_to_libma57`
- path to ASL library: `-DAMPLSOLVER=path_to_libamplsolver`
- path to HiGHS library: `-DHIGHS=path_to_libhighs`
- path to HSL library: `-DHSL=path_to_libhsl`
- path to METIS library (`fakemetis` is built with MA57): `-DMETIS=path_to_libmetis`
- path to MUMPS library: `-DMUMPS_LIBRARY=path_to_libdmumps`
- path to MUMPS common library: `-DMUMPS_COMMON_LIBRARY=path_to_libmumps_common`
- path to MUMPS PORD library: `-DMUMPS_PORD_LIBRARY=path_to_mumps_libpord`
- path to MUMPS MPISEQ library: `-DMUMPS_MPISEQ_LIBRARY=path_to_mumps_mpiseq_lib`
- path to MUMPS include directory: `-DMUMPS_INCLUDE_DIR=path_to_mumps_include_dir`
- path to SPRAL library: `-DSPRAL=path_to_libspral`

3. **(or)** Use ccmake to provide the paths to the required and optional libraries:
```console
ccmake ..
```
4. Compile (in parallel: `n` being the number of threads, e.g. 6):
```console
make -jn
```

To compile the code with different configurations, simply create a `build` directory for each configuration and perform instructions 1 to 4.
See the list of CMake options [here](#cmake-options).

### Install

5. Install the built libraries and header (`uno_static`, `uno_shared` and `Uno_C_API.h`):
To install the built libraries and headers:
```console
sudo make install
cmake --install build
```

### Unit tests

6. Install the GoogleTest suite:
To configure, compile and run the test suite:
```console
sudo apt install googletest
cmake -S . -B build -DENABLE_TESTS=ON
cmake --build build --target run_unotest --parallel
ctest --test-dir build
```
7. Compile the test suite:
```console
make run_unotest -jn
```
8. Run the test suite:
```console
./run_unotest
```

### Precompiled libraries and executables

We provide precompiled Uno libraries and executables in the [releases tab](https://github.com/cvanaret/Uno/releases/latest/) for Linux (x64 and aarch64), macOS (x64 and aarch64), and Windows (x64).

On some platforms, the dynamic linker needs to know where to look for libraries at runtime.
You might need to set the following environment variables:

- `LD_LIBRARY_PATH` on Linux
- `DYLD_LIBRARY_PATH` or `DYLD_FALLBACK_LIBRARY_PATH` on macOS
- `PATH` on Windows

These variables should include the directory where you extracted the library files.
For all platforms, the environment variable `PATH` is needed to locate the binary `uno_ampl` / `uno_ampl.exe`.

**Example for Linux**:
```console
tar -xzf Uno.vX.Y.Z.linux.tar.gz
export LD_LIBRARY_PATH=/path/to/extracted/Uno/lib:$LD_LIBRARY_PATH
export PATH=/path/to/extracted/Uno/bin:$PATH
```
## CMake options

You can pass the following options as `-DOPTION=value`:

| Option | Description | Possible values |
|:-----------------------|:-----------------------------------------------------------------------------------------------------------|:----------------------------|
| `CMAKE_BUILD_TYPE` | build type | `Release`, `Debug` |
| `ENABLE_TESTS` | enable the unit tests | `ON`, `OFF` |
| `BUILD_STATIC_LIBS` | build the Uno static library | `ON`, `OFF` |
| `BUILD_SHARED_LIBS` | build the Uno shared library | `ON`, `OFF` |
| `LAPACK_LIBRARIES` | path(s) to the LAPACK library, separated by `;` | `paths` |
| `BLAS_LIBRARIES` | path(s) to the BLAS library, separated by `;` | `paths` |
| `AMPLSOLVER` | path(s) to the ASL library | `path_to_libamplsolver` |
| `BQPD` | path to the BQPD library | `path_to_libbqpd` |
| `MA27` | path to the MA27 library | `path_to_libma27` |
| `MA57` | path to the MA57 library | `path_to_libma57` |
| `HSL` | path to the HSL library | `path_to_libhsl` |
| `HIGHS` | path to the HiGHS library | `path_to_libhighs` |
| `METIS` | path to the METIS library | `path_to_libmetis` |
| `MUMPS_LIBRARY` | path to the MUMPS library | `path_to_libdmumps` |
| `MUMPS_COMMON_LIBRARY` | path to the MUMPS common library | `path_to_libmumps_common` |
| `MUMPS_PORD_LIBRARY` | path to the MUMPS PORD library | `path_to_libpord` |
| `MUMPS_MPISEQ_LIBRARY` | path to the MUMPS MPISEQ library | `path_to_libmpiseq` |
| `MUMPS_INCLUDE_DIR` | path to MUMPS include directory | `path_to_mumps_include_dir` |
| `SPRAL` | path to SPRAL library </br> (requires `libhwloc` passed to `AUXILIARY_LIBRARIES`) | `path_to_libspral` |
| `AUXILIARY_LIBRARIES` | path(s) to additional libraries to link against, separated by `;` </br> (e.g., `libhwloc` and `libstdc++`) | `paths` |

Note: The shared library `libhsl.so` / `libhsl.dylib` / `libhsl.dll` provided in the precompiled archive is a dummy version that does not include the official HSL linear solvers such as `MA27` or `MA57`.
However, it can be safely replaced with the official precompiled [libHSL](https://licences.stfc.ac.uk/products/Software/HSL/LibHSL) library without the need to recompile anything.
The routine symbols are identical, allowing seamless hot-swapping of the library.
Loading
Loading