# 1. Installation

## 1.1. Introduction

This chapter describes how to obtain rocRAND. There are two main methods: the easiest way is to install the prebuilt packages from the ROCm repositories. Alternatively, this chapter also describes how to build rocRAND from source.

## 1.2. Prebuilt Packages

Installing the prebuilt rocRAND packages requires a ROCm-enabled platform. See the ROCm documentation for more information. After installing ROCm or enabling the ROCm repositories, rocRAND can be obtained using the system package manager.

For Ubuntu and Debian:

    sudo apt-get install rocrand

For CentOS:

    sudo yum install rocrand

For SLES:

    sudo dnf install rocrand

This will install rocRAND into the `/opt/rocm` directory.

## 1.3. Building rocRAND From Source

### 1.3.1. Obtaining Sources

The rocRAND sources are available from the rocRAND GitHub Repository. Use the branch that matches the system-installed version of ROCm. For example on a system that has ROCm 5.3 installed, use the following command to obtain rocRAND sources:

    git checkout -b rocm-5.3 https://github.com/ROCmSoftwarePlatform/rocRAND.git

### 1.3.2. Building The Library

After obtaining the sources, rocRAND can be built using the installation script:

    cd rocrand
    ./install --install

This automatically builds all required dependencies, excluding HIP and Git, and installs the project to `/opt/rocm` if everything went well. See `./install --help` for further information.

### 1.3.3. Building With CMake

For a more elaborate installation process, rocRAND can be built manually using CMake. This enables certain configuration options that are not exposed to the `./install` script. In general, rocRAND can be built using CMake by configuring as follows:

    cd rocrand; mkdir build; cd build
    # Configure the project
    CXX=<compiler> cmake [options] ..
    # Build
    make -j4
    # Optionally, run the tests
    ctest --output-on-failure
    # Install
    [sudo] make install

Where `<compiler>` can be set to `hipcc` to build for the ROCm platform, or to `nvcc` to build for CUDA. The following configuration options are available, in addition to the built-in CMake options:

- `BUILD_FORTRAN_WRAPPER` controls whether to build the Fortran wrapper. Defaults to `OFF`.

- `BUILD_TEST` controls whether to build the rocRAND tests. Defaults to `OFF`.

- `BUILD_BENCHMARK` controls whether to build the rocRAND benchmarks. Defaults to `OFF`.

- `BUILD_ADDRESS_SANITIZER` controls whether to build with address sanitization enabled. Defaults to `OFF`.

- `USE_HIP_CPU` is an experimental option that controls whether to build for HIP-CPU. Defaults to `OFF`.

## 1.4. Building the Python API Wrapper

### 1.4.1. Requirements

The rocRAND Python API Wrapper requires the following dependencies:

- rocRAND

- Python 3.5

- NumPy (will be installed automatically as a dependency if necessary)

Note: If rocRAND is built from sources but not installed or installed in non-standard directory, set the `ROCRAND_PATH` environment variable. For example:

    export ROCRAND_PATH=~/rocRAND/build/library/

### 1.4.2. Installing

The Python rocRAND module can be installed using pip:

    cd rocrand/python/rocrand
    pip install .

The tests can be executed as follows:

    cd rocrand/python/rocrand
    python tests/rocrand_test.py