.. _sec-compiling:
Compiling
=========
In order to compile SlangPy from source, the following prerequisites are
required:
* A C++20 compliant compiler (tested with Visual Studio 2022, GCC 11 and Clang 14)
* Xcode >= 16, 16.4 recommended (on macOS)
* Python >= 3.9
* git
Optionally:
* CUDA Toolkit >= 11.8; 12.8 recommended (on Windows/Linux, for cuda
acceleration)
* `PyTorch `_ >= 2.7.1 (for optional
integration)
.. tip::
We strongly recommend using a Python virtual environment (anaconda on
Windows, venv on Linux/macOS)
Cloning the repository
----------------------
The first step is to clone the repository. This can be done by running the
following command:
.. code-block:: bash
git clone https://github.com/shader-slang/slangpy.git --recursive
Setup
-----
To make it easy to build ``slangpy`` reliably, an additional setup step is required:
.. code-block:: bash
# Install Python build prerequisites
pip install -r requirements-dev.txt
# On Windows
setup.bat
# On Linux and macOS
./setup.sh
This will do the following:
* Make sure all git submodules are initialized and up-to-date.
* On the first run, setup a ``.vscode`` directory with initial settings for
VS Code.
This script can be run anytime to ensure that both git submodules and host tools
are up-to-date.
Windows
-------
To build on Windows, make sure you have a recent version of
`Visual Studio 2022 `_
installed.
Open ``x64 Native Tools Command Prompt for VS 2022`` and use the following
commands to build the project:
.. code-block:: bash
# Configure
cmake --preset windows-msvc
# Build "Debug" configuration
cmake --build --preset windows-msvc-debug
# Build "Release" configuration
cmake --build --preset windows-msvc-release
The build artifacts are placed in ``build\windows-msvc\bin\Debug`` or
``build\windows-msvc\bin\Release``.
Alternatively you can use the ``windows-vs2022`` preset to configure the project
as a Visual Studio 2022 solution stored in ``build\windows-vs2022``.
**Tested on:**
* Windows 10 (build 19045)
* Visual Studio 2022 (Version 17.8.0)
* CMake 3.27.7
* Ninja 1.11.1
Linux
-----
To build on Linux, make sure you have the required build tools and dependencies
installed. The following commands can be used to install the required build
tools and dependencies:
.. code-block:: bash
# Install build tools
sudo apt install build-essential
# Install required build dependencies
sudo apt install libxinerama-dev libxcursor-dev xorg-dev libglu1-mesa-dev pkg-config
Then use the following commands to build the project:
.. code-block:: bash
# Configure
cmake --preset linux-gcc
# Build "Debug" configuration
cmake --build --preset linux-gcc-debug
# Build "Release" configuration
cmake --build --preset linux-gcc-release
The build artifacts are placed in ``build\linux-gcc\bin\Debug`` or
``build\linux-gcc\bin\Release``.
Alternativaly you can also use the ``linux-clang`` preset to use the Clang
compiler.
**Tested on:**
* Ubuntu 22.04
* GCC 11.4.0
* CMake 3.27.7
* Ninja 1.11.1
macOS
-----
To build on macOS, make sure you have a recent version of XCode installed. You
also need to install the XCode command line tools by running the following
command:
.. code-block:: bash
xcode-select --install
Some additional command line build tools are also required. An easy way to
install these is to install `brew `_, and then use the
following commands:
.. code-block:: bash
brew install cmake ninja pkg-config git-lfs
git lfs install
If ``git-lfs`` wasn't installed before you cloned SlangPy, you will need to use
the following commands to retrieve and check out the files stored in LFS:
.. code-block:: bash
git submodule foreach --recursive git lfs fetch
git submodule foreach --recursive git lfs checkout
Then open a new shell and use the following commands to build the project:
.. code-block:: bash
# Configure
cmake --preset macos-arm64-clang
# Build "Debug" configuration
cmake --build --preset macos-arm64-clang-debug
# Build "Release" configuration
cmake --build --preset macos-arm64-clang-release
The build artifacts are placed in ``build\macos-arm64-clang\Debug`` or
``build\macos-arm64-clang\Release``.
To build for the x64 architecture, use the ``macos-x64-clang`` preset.
**Tested on:**
* macOS 15.5
* Xcode 16.4 (clang 17.0.0)
* CMake 4.0.3
* Ninja 1.13.1
* pkg-config 2.5.1
Configuration options
---------------------
SlangPy can be configured using the following CMake options. These options
can be specified on the command line when running CMake, for example:
.. code-block:: bash
cmake --preset windows-msvc -DSGL_BUILD_DOC=ON -DSGL_BUILD_EXAMPLES=OFF -DSGL_BUILD_TESTS=OFF
The following table lists the available configuration options:
.. list-table::
:widths: 35 10 35
:header-rows: 1
:align: left
* - Option
- Default
- Description
* - ``SGL_BUILD_PYTHON``
- ``ON``
- Build sgl Python extension
* - ``SGL_BUILD_EXAMPLES``
- ``ON``
- Build sgl examples
* - ``SGL_BUILD_TESTS``
- ``ON``
- Build sgl tests
* - ``SGL_BUILD_DOC``
- ``OFF``
- Build sgl documentation
* - ``SGL_USE_DYNAMIC_CUDA``
- ``ON``
- Load CUDA driver API dynamically
* - ``SGL_DISABLE_ASSERTS``
- ``OFF``
- Disable asserts
* - ``SGL_ENABLE_PCH``
- ``OFF``
- Enable precompiled headers
* - ``SGL_ENABLE_ASAN``
- ``OFF``
- Enable address sanitizer
* - ``SGL_ENABLE_HEADER_VALIDATION``
- ``OFF``
- Enable header validation
Updating the API Reference
--------------------------
SlangPy uses ``pybind11_mkdoc`` to extract documentation strings from the C++
source code. These comments are then used by ``nanobind`` to generate Python
documentation comments, which are in turn used when building the API Reference
document.
To run ``pybind11_mkdoc``, specify the ``pydoc`` target when invoking cmake:
.. code-block:: bash
# Install Python build prerequisites
pip install -r requirements-dev.txt
# Install Python documentation build prerequisites
pip install -r docs/requirements.txt
# Install pybind11_mkdoc
pip install pybind11_mkdoc
# Configure
cmake --preset windows-msvc
# Build with pydoc target
cmake --build --preset windows-msvc-release --target pydoc
The generated API Reference page can then be updated by invoking the html build
of the SlangPy docs. (It's regenerated as part of running ``sphinx-build``.)
**Tested on:**
* Windows 10 (build 19045)
* Visual Studio 2022 (Version 17.13.6)
* CMake 4.0.2
* Ninja 1.12.1
VS Code
-------
TBD