.. index:: pair: page; Build from Source .. _doxid-dev_guide_build: Build from Source ================= Download the Source Code ~~~~~~~~~~~~~~~~~~~~~~~~ Download `oneDNN source code `__ or clone `the repository `__. .. ref-code-block:: cpp git clone https://github.com/oneapi-src/oneDNN.git Build the Library ~~~~~~~~~~~~~~~~~ Ensure that all software dependencies are in place and have at least the minimal supported version. The oneDNN build system is based on CMake. Use * ``CMAKE_INSTALL_PREFIX`` to control the library installation location, * ``CMAKE_BUILD_TYPE`` to select between build type (``Release``, ``Debug``, ``RelWithDebInfo``). * ``CMAKE_PREFIX_PATH`` to specify directories to be searched for the dependencies located at non-standard locations. See :ref:`Build Options ` for detailed description of build-time configuration options. Linux/macOS ----------- GCC, Clang, or Intel C/C++ Compiler +++++++++++++++++++++++++++++++++++ * Set up the environment for the compiler * Configure CMake and generate makefiles .. ref-code-block:: cpp mkdir -p build cd build # Uncomment the following lines to build with Clang # export CC=clang # export CXX=clang++ # Uncomment the following lines to build with Intel C/C++ Compiler # export CC=icc # export CXX=icpc cmake .. * Build the library .. ref-code-block:: cpp make -j oneAPI DPC++ Compiler +++++++++++++++++++++ * Set up the environment for oneAPI DPC++ Compiler. For Intel oneAPI Base Toolkit distribution installed to default location you can do this using ``setenv.sh`` script .. ref-code-block:: cpp source /opt/intel/oneapi/setvars.sh * Configure CMake and generate makefiles .. ref-code-block:: cpp mkdir -p build cd build export CC=clang export CXX=clang++ cmake .. \ -DDNNL_CPU_RUNTIME=DPCPP -DDNNL_GPU_RUNTIME=DPCPP Open-source version of oneAPI DPC++ Compiler may not contain OpenCL runtime. In this case, you can use ``OPENCLROOT`` CMake option or environment variable of the same name to specify path to the OpenCL runtime if it is installed in a custom location. * Build the library .. ref-code-block:: cpp make -j GCC targeting AArch64 on x64 host +++++++++++++++++++++++++++++++++ * Set up the environment for the compiler * Configure CMake and generate makefiles .. ref-code-block:: cpp export CC=aarch64-linux-gnu-gcc export CXX=aarch64-linux-gnu-g++ cmake .. \ -DCMAKE_SYSTEM_NAME=Linux \ -DCMAKE_SYSTEM_PROCESSOR=AARCH64 \ -DCMAKE_LIBRARY_PATH=/usr/aarch64-linux-gnu/lib \ * Build the library .. ref-code-block:: cpp make -j GCC with Arm Compute Library (ACL) on AArch64 host ++++++++++++++++++++++++++++++++++++++++++++++++++ * Set up the environment for the compiler * Configure CMake and generate makefiles .. ref-code-block:: cpp export ACL_ROOT_DIR= cmake .. \ -DDNNL_AARCH64_USE_ACL=ON \ * Build the library .. ref-code-block:: cpp make -j Windows ------- Microsoft Visual C++ Compiler or Intel C/C++ Compiler +++++++++++++++++++++++++++++++++++++++++++++++++++++ * Generate a Microsoft Visual Studio solution .. ref-code-block:: cpp mkdir build cd build cmake -G "Visual Studio 15 2017 Win64" .. For the solution to use the Intel C++ Compiler, select the corresponding toolchain using the cmake ``-T`` switch: .. ref-code-block:: cpp cmake -G "Visual Studio 15 2017 Win64" -T "Intel C++ Compiler 19.0" .. * Build the library .. ref-code-block:: cpp cmake --build . .. note:: You can also open ``oneDNN.sln`` to build the project from the Microsoft Visual Studio IDE. oneAPI DPC++ Compiler +++++++++++++++++++++ * Set up the environment for oneAPI DPC++ Compiler. For Intel oneAPI Base Toolkit distribution installed to default location you can do this using ``setvars.bat`` script .. ref-code-block:: cpp "C:\Program Files (x86)\Intel\oneAPI\setvars.bat" or open ``Intel oneAPI Commmand Prompt`` instead. * Download `oneAPI Level Zero headers `__ from Github and unpack the archive. * Generate ``Ninja`` project .. ref-code-block:: cpp mkdir build cd build :: Set C and C++ compilers set CC=clang set CXX=clang++ cmake .. -G Ninja -DDNNL_CPU_RUNTIME=DPCPP ^ -DDNNL_GPU_RUNTIME=DPCPP ^ -DCMAKE_PREFIX_PATH= ^ Open-source version of oneAPI DPC++ Compiler may not contain OpenCL runtime. In this case, you can use ``OPENCLROOT`` CMake option or environment variable of the same name to specify path to the OpenCL runtime if it is installed in a custom location. .. note:: The only CMake generator that supports oneAPI DPC++ Compiler on Windows is Ninja. CC and CXX variables must be set to clang and clang++ respectively. * Build the library .. ref-code-block:: cpp cmake --build . Validate the Build ~~~~~~~~~~~~~~~~~~ If the library is built for the host system, you can run unit tests using: .. ref-code-block:: cpp ctest Build documenation ~~~~~~~~~~~~~~~~~~ * Install the requirements .. ref-code-block:: cpp conda env create -f ../doc/environment.yml conda activate onednn-doc * Build the documentation .. ref-code-block:: cpp cmake --build . --target doc Install library ~~~~~~~~~~~~~~~ Install the library, headers, and documentation .. ref-code-block:: cpp cmake --build . --target install The install directory is specified by the `CMAKE_INSTALL_PREFIX `__ cmake variable. When installing in the default directory, the above command needs to be run with administrative privileges using ``sudo`` on Linux/Mac or a command prompt run as administrator on Windows.