diff options
Diffstat (limited to 'codegen/vulkan/BUILD.adoc')
-rw-r--r-- | codegen/vulkan/BUILD.adoc | 459 |
1 files changed, 0 insertions, 459 deletions
diff --git a/codegen/vulkan/BUILD.adoc b/codegen/vulkan/BUILD.adoc deleted file mode 100644 index 855b7d33..00000000 --- a/codegen/vulkan/BUILD.adoc +++ /dev/null @@ -1,459 +0,0 @@ -// Copyright 2014-2021 The Khronos Group Inc. -// SPDX-License-Identifier: CC-BY-4.0 - -= Vulkan^(R)^ Specification Build Instructions and Notes -:toc2: -:toclevels: 2 - -ifdef::env-github[] -:note-caption: :information_source: -endif::[] - -[[intro]] -== Introduction - -This README describes how to build the Vulkan API specification, reference -pages, and/or other related targets. - -It documents how to set up your build environment, build steps and targets, -and contains some troubleshooting advice. - -[[building]] -== Building The Spec - -First, clone the Khronos Github repository containing the Vulkan -specification to your local Linux, Windows, or Mac PC. -The repository is located at https://github.com/KhronosGroup/Vulkan-Docs/. - -Next, install all the necessary build tools (see <<depends,Software -Dependencies>> below). -If you are using the <<depends-docker, Khronos-Provided Docker Image>>, -which we strongly recommend, then one way to build using the image (assuming -a Linux docker host) is: - - $ docker run --user `id -u`:`id -g` -it --rm \ - -v <vulkan-path>:/vulkan \ - khronosgroup/docker-images:asciidoctor-spec /bin/bash - -where <vulkan-path> is the path to the cloned repository. This runs the -image with the cloned repository under /vulkan and accesses it as a -specified user (set to your own user and group ID above), so that it doesn't -get filled with files owned by another user. - -Then in the running image, - - $ cd /vulkan - $ ./makeSpec -spec core html - -which builds an HTML5 specification output for the core Vulkan 1.2 -specification, with no extensions included, or - - $ ./makeSpec -spec all all - -which builds the spec targets `html`, `pdf`, `styleguide`, `registry`, -`manhtmlpages`, and `allchecks`, with *all* registered extensions included. - -There are many other ways of using the image, including inside a Continuous -Integration pipeline; locally with persistent Docker volume storage of the -repository; and so on. - -If you are not using our Docker image to build with, and you have a -<<depends-nondocker, Non-Docker Build Environment>> with the entire -toolchain installed, you can go to <vulkan-path> and invoke the same `make` -commands there. - -[NOTE] -.Note -==== - * While it's possible to invoke `make` directly, this is rarely - appropriate or useful. - Usually dozens to hundreds of build options must be set to specify the - desired set of extensions to include in the specification. - The `makeSpec` python script, which is discussed in more detail - <<building-extensions, below>>, simplifies this process for common - cases. - * The `all` target takes a long time to run, and generates outputs that - are irrelevant for most users. - The `html` target just generates the HTML output, which is often all - that's needed for spec bugfixes not involving extensions. - * The default `make` options build a Vulkan 1.2 specification with no - optional extensions. - * The `validusage` target is not built as part of the `all` target, due to - it needing to be built with all extensions enabled (`-spec all`). - Building the `validusage` target will fail otherwise. -==== - -These targets generate a variety of output documents in the directory -specified by the Makefile variable `$(OUTDIR)` (by default, `out/`). -The checked-in file `out/index.html` links to all these -targets, or they can individually be found as follows: - -Vulkan Specification:: - * `html` -- Single-file HTML5 in `$(OUTDIR)/html/vkspec.html`, and KaTeX - dependency in $(OUTDIR)/katex - * `chunked` -- Chunked HTML5 in `$(OUTDIR)/html/chap?.html` - * `pdf` -- PDF in `$(OUTDIR)/pdf/vkspec.pdf` -"`styleguide`" (Vulkan Documentation and Extensions: Procedures and Conventions):: - * `styleguide` -- Single-file HTML5 in `$(OUTDIR)/styleguide.html` -XML Registry schema document:: - * `registry` -- Single-file HTML5 in `$(OUTDIR)/registry.html` -<<building-diff,Diff spec>>:: - * `diff_html` -- Single-file HTML5 in `$(OUTDIR)/html/diff.html` -<<refpages,Reference pages>>:: - * `manhtmlpages` -- File-per-entry-point HTML in `$(OUTDIR)/man/html/*`. - Must be built with all extensions enabled (using `makeSpec -spec all`). -<<validation-scripts,Validator output>>:: - * None at present. The `allchecks` target writes to standard output unless - the underlying script is given additional options. -Valid usage database:: - * `validusage` - json database of all valid usage statements in the - specification. Must be built with `./makeAllExts` (for now). - Output in `$(OUTDIR)/validation/validusage.json`. - A validated schema for the output of this is stored in - `$(CURDIR)/config/vu-to-json/vu_schema.json` - -Once you have the basic build working, an appropriate parallelization -option, such as `-j 8`, should significantly speed up the reference page -builds. - -If you encounter problems refer to the <<troubleshooting>> section. - - -[[building-versions]] -=== Building Specifications For Different API Versions - -The `Makefile` defaults to building a Vulkan 1.2 specification. -This is controlled by Asciidoctor attributes passed in the Makefile variable -`$(VERSIONS)` -To instead build a Vulkan 1.1 specification, pass - ----- -VERSIONS="VK_VERSION_1_0 VK_VERSION_1_1" ----- - -on the `makeSpec` command line. - - -[[building-extensions]] -=== Building With Extensions Included - -Extensions are defined in the same source as the core Specification, but -are only conditionally included in the output. -http://asciidoctor.org/docs/user-manual/#attributes[Asciidoctor attributes] -of the same name as the extension are used to define whether the extension -is included or not -- defining such an attribute will cause the output to -include the text for that extension. - -When building the specification, the extensions included are those specified -as a space-separated list of extension names (e.g. `VK_KHR_surface`) in the -Makefile variable `$(EXTENSIONS)`, usually set on the make command line. -When changing the list of extensions, it is critical to remove all generated -files using the `clean_generated` Makefile target, as the contents of -generated files depends on `$(EXTENSIONS)`. - -The `makeSpec` wrapper script can clean generated files and then build one -or more specification targets for a set of explicitly specified extensions, -including all implicit extension dependencies of that set. -It accepts these options: - - * -clean - remove generated targets before building - * -v - print actions as well as executing them - * -n - print actions without executing them - * -genpath *path* - specify path to generated files (default `gen`) - * -spec *type* - build with sepcified sets of extensions. - *type* may be - ** *core* - no extensions added (default if not specified) - ** *khr* - all KHR extensions added - ** *all* - all registered extensions added - * -extension *extname* - build with specified extension included, - as well as the set specified by `-spec`. - Can be given multiple times. - * All remaining targets are arbitrary `make` options or - targets in the Makefile. - -The `target(s)` passed to these scripts are arbitrary `make` options, and -can be used to set Makefile variables and options discussed above, as well -as specify actual build targets. -For example, to build the HTML specification with all KHR extensions -included as well as a single vendor extension: - ----- -$ ./makeSpec -clean -spec khr -extension VK_EXT_debug_report html ----- - -The scripts `makeAllExts`, `makeKHR`, and `makeExt` set appropriate options -and invoke `makeSpec`, for backwards compatibility, but are no longer used -by Khronos. - -The Makefile variable `$(APITITLE)` defines an additional string which is -appended to the specification title. -When building with extensions enabled, this should be set to something like -`(with extension VK_extension_name)`. -The `makeSpec` script already does this. - -The reference pages (the `manhtmlpages` target) must be built using the -`-spec all` option; there are markup and scripting issues which will -probably cause any more restricted set of refpages to fail to build. - - -[[building-diff]] -==== Building A Highlighted Extension Diff - -The `diff_html` target in the Makefile can be used to generate a version of -the specification which highlights changes made to the specification by the -inclusion of a particular set of extensions. - -Extensions in the Makefile variable `$(EXTENSIONS)` define the base -extensions to be enabled by the specification, and these will not be -highlighted in the output. -Extensions in the Makefile variable `$(DIFFEXTENSIONS)` define the set of -extensions whose changes to the text will be highlighted when they are -enabled. -Any extensions in both variables will be treated as if they were only -included in `$(DIFFEXTENSIONS)`. -`$(DIFFEXTENSIONS)` can be set when using the `makeSpec` script described -above. - -In the resulting HTML document, content that has been added by one of the -extensions will be highlighted with a lime background, and content that was -removed will be highlighted with a pink background. -Each section has an anchor of `#differenceN`, with an arrow (=>) at the end -of each section which links to the next difference section. -The first diff section is `#difference1`. - -[NOTE] -.Note -==== -This output is not without errors. -It may instead result in visible `+++[.added]##content##+++` and -`+++[.removed]##content##+++`, and so also highlights not being rendered. -But such visible markup still correctly encapsulates the modified content. -==== - -[[building-test]] -=== Alternate and Test Builds - -If you are just testing Asciidoctor formatting, macros, stylesheets, etc., -you may want to edit `vkspec.txt` to just include your test code. -The asciidoctor HTML build is very fast, even for the whole Specification, -but PDF builds take several minutes. - - -=== Images Used In The Specification - -All images used in the specification are in the `images/` directory in the -SVG format, and were created with Inkscape. -We recommend using Inkscape to modify or create new images, as we've had -problems using SVG files created by some other tools; especially in the PDF -builds. - - -[[validation-scripts]] -=== Validation Scripts - -The `allchecks` Makefile target runs a Python script that looks for markup -errors, missing interfaces, macro misuse, and inconsistencies in the -specification text. -This script is necessarily heuristic, since it's dealing with lots of -hand-written material, but it identifies many problems and can suggest -solutions. -This script is also run as part of the CI tests in the internal Khronos -gitlab repository. - - -[[macros]] -== Our Asciidoctor Macros - -We use many custom Ruby macros in the reference pages and API spec -Asciidoctor sources. -The validator scripts rely on these macros as part of their sanity checks, -and you should use the macros whenever referring to an API command, struct, -token, or enum name, so the documents are semantically tagged and more -easily verifiable. - -The supported macros are defined in the `config/spec-macros/extension.rb` -asciidoctor extension script. - -The tags used are described in the -link:https://www.khronos.org/registry/vulkan/specs/1.1/styleguide.html[style -guide] (generated from `styleguide.txt`). - -We (may) eventually tool up the spec and reference pages to the point that -anywhere there's a type or token referred to, clicking on (or perhaps -hovering over) it in the HTML view will take reader to the definition of -that type/token. -That will take some more plumbing work to tag the stuff in the autogenerated -include files, and do something sensible in the spec (e.g. resolve links to -internal references). - -Most of these macros deeply need more intuitive names. - - -[[refpages]] -== Reference Pages - -The reference pages are extracted from the API Specification source, which -has been tagged to help identify boundaries of language talking about -different commands, structures, enumerants, and other types. -A set of Python scripts extract and lightly massage the relevant tagged -language into corresponding reference page sources. - -To regenerate the reference page sources from scratch yourself, execute: - ----- -./makeSpec -spec all refpages ----- - -The `genRef.py` script will generate many warnings, but most are just -reminders that some pages are automatically generated. -If everything is working correctly, all the `$(GENERATED)/refpage/*.txt` -files will be regenerated, but their contents will not change. - -If you add new API features to the Specification in a branch, make sure that -the commands have the required tagging and that reference pages are -generated for them, and build properly. - -When executing the `manhtmlpages` target in the Makefile, after building -HTML versions of all reference pages extracted from the spec, symbolic links -from aliases to the reference page for the API they alias will also be -created. - - -[[styles]] -== Our stylesheets - -We use an HTML stylesheet `config/khronos.css` derived from the -http://asciidoctor.org/docs/produce-custom-themes-using-asciidoctor-stylesheet-factory/[Asciidoctor -stylesheet factory] "`colony`" theme, with the default Arial font family -replaced by the sans-serif https://en.wikipedia.org/wiki/Noto_fonts[Noto -font family]. - - -[[styleguide]] -== Vulkan Style Guide - - -If you're writing new spec language or modifying existing language, see the -link:https://www.khronos.org/registry/vulkan/specs/1.2/styleguide.html["`style -guide`"] (formally titled "`Vulkan Documentation and Extensions: Procedures -and Conventions`") document for details of our asciidoctor macros, -extensions, mathematical equation markup, writing style, etc. - - -[[depends]] -== Software Dependencies - -This section describes the software components used by the Vulkan spec -toolchain. - -In the past, we previously specified package versions and instructions for -installing the toolchain in multiple desktop environments including Linux, -MacOS X, and Microsoft Windows. -The underlying components evolve rapidly, and we have not kept those -instructions up to date. - - -[[depends-docker]] -=== Khronos-Provided Docker Image - -Khronos has published a Docker image containing a Debian Linux distribution -with the entire toolchain preinstalled. - -We will occasionally update this image if needed, and we recommend people -needing to build from this repository use the Docker image. - -Docker installation is beyond the scope of this document. -Refer to link:https://docs.docker.com/get-docker/[the Docker website] for -information about installing Docker on Linux, Windows, and MacOS X. - -The name of the build image is - - khronosgroup/docker-images:asciidoctor-spec - -It can be pulled from the -link:https://hub.docker.com/repository/docker/khronosgroup/docker-images[Dockerhub -repository] with the command - - docker pull khronosgroup/docker-images:asciidoctor-spec - -Once docker is installed and the image is available, it can be executed as -described above under <<building, Building the Spec>> to generate -Specification output documents or other Makefile targets. - -[NOTE] -.Note -==== -The old `vulkan-docs-base` and `vulkan-docs` images continue to be hosted, -but the new `asciidoctor-spec` image is preferred - the added functionality -of `vulkan-docs`, to set the user/group inside Docker based on environment -variables passed into Docker, is no longer needed with the Docker `--user` -option. -==== - - -[[depends-nondocker]] -=== Non-Docker Build Environments - -We do not actively support building outside of our Docker image, but it is -straightforward to reproduce our toolchain in a Debian (or similar APT-based -Linux) distribution by executing the same steps as the -link:https://github.com/KhronosGroup/DockerContainers/blob/master/asciidoctor-spec.dockerfile[Dockerfile] -used to build our Docker image. - -It should be possible to apply the same steps in a Windows Subsystem for -Linux (WSL2) environment on Windows 10, as well. - -For other native environments, such as MacOS X and older Unix-like -environments for Windows such as MinGW and Cygwin, we provided instructions -in older versions of this document. -While those instructions are out of date and have been removed from current -versions of this document, you may be able to make use of -link:https://github.com/KhronosGroup/Vulkan-Docs/blob/v1.2.135/BUILD.adoc#depends[the -version of BUILD.adoc in the v1.2.135 repository tag] - -[NOTE] -.Note -==== -While we have no intention of forcing people to use our Docker image, we -cannot support every possible environment. -The Docker image is a straightforward way to use the Vulkan-Docs repository -with almost all modern desktop environments. -==== - - -[[history]] -== Revision History - - * 2021-03-12 - Use the new Docker image. - * 2020-07-15 - Update to use `makeSpec` instead of `makeAllExts`. - * 2020-03-23 - Document Khronos' published Docker image for building the - spec, and remove all platform-specific instructions. - * 2018-12-04 - Update Rbenv and ruby gem installation instructions and - package dependencies for Linux and Ubuntu/Windows 10. - * 2018-10-25 - Update Troubleshooting, and Windows and Linux build. Plus - random editing. - * 2018-03-13 - Rename to BUILD.adoc and update for new directory - structure. - * 2018-03-05 - Update README for Vulkan 1.1 release. - * 2017-03-20 - Add description of prawn versioning problem and how to fix - it. - * 2017-03-06 - Add description of ruby-enum versioning problem and how to - fix it. - * 2017-02-13 - Move some comments here from ../../../README.md. Tweak - asciidoctor markup to more clearly delineate shell command blocks. - * 2017-02-10 - Add more Ruby installation guidelines and reflow the - document in accordance with the style guide. - * 2017-01-31 - Add rbenv instructions and update the README elsewhere. - * 2017-01-16 - Modified dependencies for Asciidoctor - * 2017-01-06 - Replace MathJax with KaTeX. - * 2016-08-25 - Update for the single-branch model. - * 2016-07-10 - Update for current state of spec and ref page generation. - * 2015-11-11 - Add new can: etc. - macros and DBLATEXPREFIX variable. - * 2015-09-21 - Convert document to asciidoc and rename to README.md in the - hope the gitlab browser will render it in some fashion. - * 2015-09-21 - Add descriptions of LaTeX and MathJax math support for all - output formats. - * 2015-09-02 - Added Cygwin package info. - * 2015-09-02 - Initial version documenting macros, required toolchain - components and versions, etc. |