| #!/bin/bash |
| |
| # Copyright 2019 The IREE Authors |
| # |
| # Licensed under the Apache License v2.0 with LLVM Exceptions. |
| # See https://llvm.org/LICENSE.txt for license information. |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| |
| # This script builds SwiftShader's Vulkan ICD. By default, it creates a |
| # `.swiftshader` installation directory in your OS's home directory (`HOME` on |
| # not-windows, `USERPROFILE` on windows): |
| # |
| # bash build_tools/third_party/swiftshader/build_vk_swiftshader.sh |
| # |
| # The installation directory can be overridden using the first positional |
| # argument: |
| # |
| # bash build_tools/third_party/swiftshader/build_vk_swiftshader.sh <parent-dir> |
| # |
| # If the installation dir already exists, it will be deleted and rebuilt. |
| # |
| # Note that you will need a working CMake installation for this script to |
| # succeed. On Windows, Visual Studio 2019 is recommended. |
| # |
| # Afterward, you'll need to set the `VK_ICD_FILENAMES` environment variable to |
| # the absolute path of the `vk_swiftshader_icd.json` manifest file. This tells |
| # the Vulkan loader on your system to load it. Assuming you use the default |
| # installation directory this can be done on not-Windows via: |
| # |
| # export VK_ICD_FILENAMES="${HOME?}/.swiftshader/Linux/vk_swiftshader_icd.json" |
| # |
| # or on Windows via: |
| # |
| # set VK_ICD_FILENAMES=%USERPROFILE%\.swiftshader\Windows\vk_swiftshader_icd.json |
| # |
| # If you used a custom installation directory then the correct path will be |
| # printed to stdout. |
| # |
| # See https://vulkan.lunarg.com/doc/view/1.1.70.1/windows/loader_and_layer_interface.html |
| # for further details about the Vulkan loader and ICDs. |
| |
| set -euo pipefail |
| |
| set +e # Ignore errors if not found. |
| CYGPATH="$(which cygpath 2>/dev/null)" |
| set -e |
| |
| # This isn't an argument so that we can set the swiftshader commit in one place |
| # for the whole project. |
| SWIFTSHADER_COMMIT=32f9332d1d7aacbdba7c1aa5df894bb1890bb2cc |
| SWIFTSHADER_SRC_DIR="$(mktemp --directory --tmpdir swiftshader_src_XXXXXX)" |
| SWIFTSHADER_BUILD_DIR="$(mktemp --directory --tmpdir swiftshader_build_XXXXXX)" |
| CC=${CC:-clang} |
| CXX=${CXX:-clang++} |
| |
| if [[ -z "${CYGPATH}" ]]; then |
| # Anything that isn't Windows. |
| SWIFTSHADER_INSTALL_DIR="${1:-${HOME}/.swiftshader}" |
| PLATFORM_DIR="${SWIFTSHADER_BUILD_DIR}/Linux" |
| SET_VK_ICD_CMD="export VK_ICD_FILENAMES=${SWIFTSHADER_INSTALL_DIR}/vk_swiftshader_icd.json" |
| else |
| # Windows. |
| SWIFTSHADER_INSTALL_DIR="${1:-${USERPROFILE}\.swiftshader}" |
| PLATFORM_DIR="${SWIFTSHADER_BUILD_DIR}"'\Windows\' |
| SET_VK_ICD_CMD='set VK_ICD_FILENAMES='"${SWIFTSHADER_INSTALL_DIR}"'\vk_swiftshader_icd.json' |
| fi |
| |
| # Shallow clone the specific swiftshader commit. |
| cd "${SWIFTSHADER_SRC_DIR}" |
| git init --quiet |
| git remote add origin https://github.com/google/swiftshader |
| git fetch --depth 1 origin "${SWIFTSHADER_COMMIT}" |
| git -c advice.detachedHead=false checkout "${SWIFTSHADER_COMMIT}" |
| |
| # Build in a temporary directory |
| cmake -B "${SWIFTSHADER_BUILD_DIR}" \ |
| -GNinja \ |
| -DCMAKE_C_COMPILER=${CC} \ |
| -DCMAKE_CXX_COMPILER=${CXX} \ |
| -DSWIFTSHADER_BUILD_TESTS=OFF \ |
| -DSWIFTSHADER_WARNINGS_AS_ERRORS=OFF \ |
| . |
| # Build the project, choosing just the vk_swiftshader target. |
| cmake --build "${SWIFTSHADER_BUILD_DIR}" --config Release --target vk_swiftshader -- -k 0 |
| |
| |
| echo "Installing to ${SWIFTSHADER_INSTALL_DIR}" |
| if [[ -d "${SWIFTSHADER_INSTALL_DIR}" ]]; then |
| echo " Install directory already exists, cleaning it" |
| rm -rf "${SWIFTSHADER_INSTALL_DIR}" |
| fi |
| |
| if ! [[ -d "${PLATFORM_DIR}" ]]; then |
| echo "Build failed to create expected directory '${PLATFORM_DIR}'" >&2 |
| exit 1 |
| fi |
| |
| # Copy the actual built artifacts into the installation directory |
| cp -rf "${PLATFORM_DIR}" "${SWIFTSHADER_INSTALL_DIR}" |
| |
| # Keep track of the commit we are using. |
| echo "${SWIFTSHADER_COMMIT}" > "${SWIFTSHADER_INSTALL_DIR}/git-commit" |
| |
| # Cleanup |
| rm -rf "${SWIFTSHADER_SRC_DIR}" "${SWIFTSHADER_BUILD_DIR}" |
| |
| echo |
| echo "Ensure the following variable is set in your enviroment:" |
| echo " " "${SET_VK_ICD_CMD}" |