# Building from source OR-Tools .Net on MacOS

## Introduction

This guide explains how to build from source OR-Tools, with support for
.Net, on MacOS.

Unless you plan to modify the source code or use a third-party solver with
OR-Tools, we recommend the [package installation](https://developers.google.com/optimization/install/dotnet/binary_mac).

Although these instructions might also work on other MacOS variants, we
have only tested them on machines meeting the following requirements:


- MacOS 13.0.1 (Ventura) Intel 64-bit (x86_64)
- MacOS 13.0.1 (Ventura) M1 (arm64)

<br />

## Prerequisites

The following sections describe the prerequisites for installing OR-Tools.

### Xcode Command Line Tools

You must install the *Xcode Command Line Tools* . To do so, open the
Terminal, found in `/Applications/Utilities/`, and enter:

    xcode-select --install

Click "Install" to download and install Xcode Command Line Tools. You don't need
to "Get Xcode" from the App Store. If you have a slow Internet connection, it
may take many minutes.

Verify that you've successfully installed Xcode Command Line Tools:

    xcode-select -p

You should see:

    /Library/Developer/CommandLineTools

### Homebrew

To install the remaining prerequisites, we recommend first installing the
"missing package manager for macOS" otherwise known as
[Homebrew](https://brew.sh/). To do so, open a terminal window and enter:

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    brew update

To verify that you've successfully installed brew:

    brew --version

You should see:

    Homebrew 1.6.9-8-g25542d7
    Homebrew/homebrew-core (git revision 0e0c84; last commit 2018-06-20)

### C++ tools

To install C++ tools, open a terminal window and enter:

    brew install cmake wget pkg-config

### SWIG tool

To install SWIG tool, open a terminal window and enter:

    brew install swig

### .Net 6.0 SDK

You must install the .Net 6.0 SDK.

Once you have installed Homebrew, you can install the
[dotnet-sdk](https://formulae.brew.sh/cask/dotnet-sdk) package by opening a
terminal window and enter:

    brew cask install dotnet-sdk

You can test `dotnet` cli is correctly installed using the following command:

    dotnet --info

## Download the source code

There are two distinct branches of the OR-Tools source code on
[GitHub](https://github.com/google/or-tools): `stable` and `main`.

The `stable` branch has been thoroughly tested and should work flawlessly on all
supported platforms.  

The `main` branch is where the latest updates and
improvements have been applied; it's more current, but less stable.

### Download the stable source code

You can get the stable source code for OR-Tools in either of the following ways:

- Clone the `stable` branch by entering:

      git clone https://github.com/google/or-tools

- Download the latest release in a compressed file, by clicking the
  `Clone or download` button in [GitHub](https://github.com/google/or-tools).
  ![image of clone or download button](https://developers.google.com/optimization/images/clone-or-download.png)

> [!WARNING]
> **Warning:** The full path to the installation directory (where you extract the files) must not contain any spaces.

### Download the main source code

To retrieve the source code from the `main` branch, enter:

    git clone -b main https://github.com/google/or-tools

### Download previous releases

You can get the source code for previous releases in either of the following ways:

- Download a previous release from the [GitHub release page](https://github.com/google/or-tools/releases).
- Assuming you have already created a local repository (by `git clone`),
  you can check out a specific release using a Git
  [tag](https://github.com/google/or-tools/tags).
  For example, to work with the v9.12 release instead of the
  `main` branch, enter the following commands in your local repo:

      git fetch --all --tags --prune
      git checkout tags/v9.12 -b v9.12

## Configure the build

Before building OR-Tools, you'll need to configure the CMake build system
generator.

Open a terminal and navigate to the directory where you extracted the files.
Then enter:


    cmake -S . -B build -DBUILD_DEPS=ON -DBUILD_DOTNET=ON

<br />

> [!TIP]
> **Tip:** For a complete list of available OR-Tools CMake options, please take a look [here](https://github.com/google/or-tools/tree/stable/cmake#readme)

Checkout the
[CMake documentation](https://cmake.org/cmake/help/latest/manual/cmake.1.html#generate-a-project-buildsystem)
for details.

### Using SCIP

Since v7.8, SCIP is now integrated so you won't have to install it manually.

> [!NOTE]
> **Note:** You can disable the support of SCIP solver by using `-DUSE_SCIP=OFF`

> [!WARNING]
> **Warning:** While OR-Tools ships with SCIP, please consult the [SCIP license](https://scipopt.org/index.php#license) to ensure that you are complying with it.

### Using Gurobi

Gurobi is now pre-integrated. When needed, at runtime, OR-Tools will search for
the Gurobi shared library in the default install path of the Gurobi installers
on MAC OS X and Windows, or by using the `GUROBI_HOME` environment variable.

> [!NOTE]
> **Note:** You can disable the support of Gurobi solver by using `-DUSE_GUROBI=OFF`

### Using FICO Xpress

FICO Xpress is now pre-integrated. When needed, at runtime, OR-Tools will search
for the Xpress shared library in the default install path of the Xpress
installers, or by using the `XPRESSDIR` environment variable.

> [!NOTE]
> **Note:** You can disable the support of Xpress solver by using `-DUSE_XPRESS=OFF`

### Using an optional third-party MIP solver

You can also use OR-Tools with any of the following optional third-party MIP
solvers whose support is disabled by default:

- [CPLEX](https://www.ibm.com/analytics/cplex-optimizer)
- [GLPK](https://www.gnu.org/software/glpk/) (Linux and MacOS only)

Please take a look at
[this documentation](https://github.com/google/or-tools/tree/main/cmake#enabling-cplex-support)
for details.

## Build the source code

To build the source code, open a terminal and navigate to the directory where
you extracted the files. Then enter the following command to compile OR-Tools:


    cmake --build build --config Release --target ALL_BUILD -j -v

<br />

Checkout the
[CMake documentation](https://cmake.org/cmake/help/latest/manual/cmake.1.html#build-a-project)
for details.

## Test the source code

You can check that everything is running correctly by entering:


    cmake --build build --config Release --target RUN_TESTS -v

<br />

This runs examples for OR-Tools. If all the examples run
successfully, you are ready to
[get started with OR-Tools](https://developers.google.com/optimization/introduction/dotnet).

## Cleaning the build files

If you need to re-install OR-Tools, the command:


    rm -r build

<br />

will remove all compiled dependencies.
This can be useful for resetting to a clean state.

Then re-enter the commands:


    cmake -S . -B build -DBUILD_DEPS=ON -DBUILD_DOTNET=ON

<br />


    cmake --build build --config Release --target ALL_BUILD -j -v

<br />

## Installing OR-Tools on your operating system

You can install OR-Tools for .Net on your operating system by entering:


    cmake --build build --config Release --target install -v

<br />

> [!TIP]
> **Tip:** To change the default install location please refer to the [`CMAKE_INSTALL_PREFIX`](https://cmake.org/cmake/help/latest/variable/CMAKE_INSTALL_PREFIX.html) documentation.