KhronosGroup / SYCL-Docs

SYCL Open Source Specification
Other
116 stars 68 forks source link

SYCL Logo

SPEC 2020-9 SPEC 2020-9 SPEC latest Join the Slack group

SYCL Open Source Specification

This repository contains the source markup used to generate the formal SYCL specifications found on https://www.khronos.org/sycl/.

If you are proposing a merge or pull request to the specification, this README describes how the specification HTML and PDF targets can be built. Proposed changes must successfully build these targets before being considered for inclusion by the SYCL Working Group.

Building the SYCL specification

Building using Github CI

When using our github repository, pushing to a branch will trigger the Github Actions CI script under ../.github/workflows/CI.yml to build HTML and PDF versions of the spec. To see the outputs, click on the Actions tab in the top navigation bar, or go to https://github.com/KhronosGroup/SYCL-Docs/actions . Your commit should show up on the list of commits below. Click through to the Actions summary for that commit.

On success, a green checkmark will appear by the commit name on this page. Output artifacts can be downloaded as a zipfile from the Artifacts section near the bottom of the page.

On failure, a red x will appear by the commit name. Click through to the build job and it should auto-scroll to the CI log showing where the build failed. Fix it and push a new commit to try again.

Note that to read the HTML specification correctly with all the mathematical symbols, you need also to have the katex directory along the html one. This might not be the case if your downloading framework lazily unzips just what you read.

If you are proposing a pull request from your own clone of our repository, you may need to enable Github Actions for your clone.

Building Using The Khronos Docker Image

Building the specification on your own machine requires a large set of tools. Rather than installing these tools yourself, if you can run Docker on a Linux compatible host (probably including Windows WSL2 with a Ubuntu or Debian OS, and possibly including MacOS X), you can use the same pre-configured Docker image used by the CI builds.

If you are on Debian/Ubuntu Linux, install Docker with:

sudo apt update
sudo apt install docker.io

The Docker image used to build the specifications can then be downloaded or updated to the latest version via

docker pull khronosgroup/docker-images:asciidoctor-spec

The Dockerfile specifying this image can be found at https://github.com/KhronosGroup/DockerContainers if you need to build a modified or layered image. However, if something is missing or out of date in the image, please file an issue on the DockerContainers repository before trying to build your own image. We will try to keep the image updated as needed.

To build the specification using the image, use the Makefile inside the adoc directory:

cd adoc
make clean docker-html docker-pdf

Outputs will be located in $(OUTDIR) (by default, out/ in the adoc directory).

There are some variables defined in the Makefile you can set to change the behavior, such as to verbosely display the build process:

make QUIET= clean docker-html docker-pdf

If you need to invoke Docker without using make on the host, look at the actions in the docker-% target in adoc/Makefile and replicate them on your system.

Building On Your Native Machine

If you don't want to, or can't use Docker (or a compatible replacement - it is possible that the Red Hat podman tool can run our Docker container, for example, though we do not support this), then you will need to install all the same tools in your own environment.

We cannot provide instructions to do this on every possible build environment. However, if you are using Debian/Ubuntu Linux, either native or via WSL2, you should be able to install the required tools by looking at the Dockerfile at

https://github.com/KhronosGroup/DockerContainers/blob/master/asciidoctor-spec.Dockerfile

Note that the Khronos Docker image layers on the official Ruby 3.1 Docker image, so you must install Ruby first.

If you have installed an older version of the tools and the Khronos image is updated, there may be minor changes in the Makefile and markup required by the new versions. For example, updating from asciidoctor-pdf 1.6.1 to 2.2.0 required changing the pdf-stylesdir attribute in the asciidoctor build to pdf-themesdir. Eventually, these changes may make using the older tools impractical. If this happens, update your tools to match the latest Docker image, and rebase your working branch on current main branch.

Building Using GitLab CI

Finally, if you are a Khronos member working in our internal Gitlab server, Gitlab CI builds the image just like Github CI. Go to the ...sycl/Specification repository page on the gitlab server, click through to CI/CD-Jobs (the rocket-ship icon on the left menu bar or ...sycl/Specification/-/jobs). If your job succeeded, click on the Download icon for the latest CI job in the appropriate branch to download the zip file of build artifacts, or click on Passed to see build details.

The Gitlab CI script is functionally equivalent to the Github CI script, but is located under .gitlab-ci.yml, using a different YAML scheme.