Update BUILD.adoc
- Windows & Linux build - Troubleshooting - Random editing
This commit is contained in:
parent
8d6a7b23a7
commit
8a20479bc6
696
BUILD.adoc
696
BUILD.adoc
|
@ -2,74 +2,82 @@
|
||||||
:toc2:
|
:toc2:
|
||||||
:toclevels: 2
|
:toclevels: 2
|
||||||
|
|
||||||
|
ifdef::env-github[]
|
||||||
|
:note-caption: :information_source:
|
||||||
|
endif::[]
|
||||||
|
|
||||||
[[intro]]
|
[[intro]]
|
||||||
== Introduction
|
== Introduction
|
||||||
|
|
||||||
This README describes important stuff for getting the Vulkan API
|
This README describes how to build the Vulkan API specification,
|
||||||
specification and reference pages building properly.
|
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]]
|
||||||
== Building The Spec
|
== Building The Spec
|
||||||
|
|
||||||
First, clone the Khronos Github repository containing the Vulkan
|
First, clone the Khronos Github repository containing the Vulkan
|
||||||
specification to your local Linux, Windows, or Mac PC. The repository is
|
specification to your local Linux, Windows, or Mac PC.
|
||||||
located at https://github.com/KhronosGroup/Vulkan-Docs/ .
|
The repository is located at https://github.com/KhronosGroup/Vulkan-Docs/.
|
||||||
|
|
||||||
Next, install all the necessary build tools (see <<depends,Software
|
Next, install all the necessary build tools (see <<depends,Software
|
||||||
Dependencies>> below).
|
Dependencies>> below).
|
||||||
|
|
||||||
Finally, go to the root directory of your local repository clone, and
|
Finally, go to the root directory of your local repository clone, and do
|
||||||
|
|
||||||
$ make html
|
$ make html
|
||||||
|
|
||||||
builds an HTML5 specification output.
|
which builds an HTML5 specification output.
|
||||||
|
|
||||||
$ make all
|
$ make all
|
||||||
|
|
||||||
builds the spec targets `html`, `pdf`, `styleguide`, `manhtml`, `manpdf`,
|
builds the spec targets `html`, `pdf`, `styleguide`, `registry`, `manhtml`,
|
||||||
`manhtmlpages`, `checkinc`, and `checklinks`.
|
`manpdf`, `manhtmlpages`, `checkinc`, and `checklinks`.
|
||||||
|
|
||||||
[NOTE]
|
[NOTE]
|
||||||
.Notes
|
.Note
|
||||||
====
|
====
|
||||||
* `make all` takes a long time to run, and generates outputs that are
|
* `make all` takes a long time to run, and generates outputs that are
|
||||||
irrelevant for most users.
|
irrelevant for most users.
|
||||||
Usually `make html` is used to update the HTML target, which is all
|
Usually `make html` is used to update the HTML target, which is all
|
||||||
that's needed for quick verification and viewing of changes.
|
that's needed for quick review of changes made.
|
||||||
* The default `make` options build a Vulkan 1.1 specification with no
|
* The default `make` options build a Vulkan 1.1 specification with no
|
||||||
optional extensions.
|
optional extensions.
|
||||||
* The `validusage` target is not built as part of `make all`, due to it
|
* The `validusage` target is not built as part of `make all`, due to it
|
||||||
needing to be built with all extensions enabled. Building this target
|
needing to be built with all extensions enabled.
|
||||||
will fail otherwise.
|
Building this target will fail otherwise.
|
||||||
====
|
====
|
||||||
|
|
||||||
These targets generate a variety of output documents in the directory
|
These targets generate a variety of output documents in the directory
|
||||||
specified by the Makefile variable `$(OUTDIR)` (by default, `out`).
|
specified by the Makefile variable `$(OUTDIR)` (by default, `out/`).
|
||||||
The checked-in file `out/index.html` links to all these
|
The checked-in file `out/index.html` links to all these
|
||||||
targets, or they can individually be found as follows:
|
targets, or they can individually be found as follows:
|
||||||
|
|
||||||
* API spec:
|
Vulkan^(R)^ Specification::
|
||||||
** `html` - HTML5 in `$(OUTDIR)/html/vkspec.html`
|
* `html` -- Single-file HTML5 in `$(OUTDIR)/html/vkspec.html`, and KaTeX
|
||||||
** `pdf` - PDF in `$(OUTDIR)/pdf/vkspec.pdf`
|
dependency in $(OUTDIR)/katex
|
||||||
* "`Vulkan Documentation and Extensions`" guide:
|
* `pdf` -- PDF in `$(OUTDIR)/pdf/vkspec.pdf`
|
||||||
** `styleguide` - Single-file HTML5 in `$(OUTDIR)/styleguide.html`
|
"`styleguide`" (Vulkan^(R)^ Documentation and Extensions: Procedures and Conventions)::
|
||||||
* Diff spec:
|
* `styleguide` -- Single-file HTML5 in `$(OUTDIR)/styleguide.html`
|
||||||
** `diff_html` - Single-file HTML5 in `$(OUTDIR)/html/diff.html`
|
XML Registry schema document::
|
||||||
* Reference pages:
|
* `registry` -- Single-file HTML5 in `$(OUTDIR)/registry.html`
|
||||||
** `manhtml` - Single-file HTML in `$(OUTDIR)/apispec.html`
|
<<building-diff,Diff spec>>::
|
||||||
** `manpdf` - Single-file PDF in `$(OUTDIR)/apispec.html`
|
* `diff_html` -- Single-file HTML5 in `$(OUTDIR)/html/diff.html`
|
||||||
** `manhtmlpages` - File-per-entry-point HTML in `$(OUTDIR)/man/html/*`
|
<<refpages,Reference pages>>::
|
||||||
* Validator output:
|
* `manhtml` -- Single-file HTML in `$(OUTDIR)/apispec.html`
|
||||||
** `checkinc` - List of commands, structs, etc.
|
* `manpdf` -- Single-file PDF in `$(OUTDIR)/apispec.pdf`
|
||||||
|
* `manhtmlpages` -- File-per-entry-point HTML in `$(OUTDIR)/man/html/*`
|
||||||
|
<<validation-scripts,Validator output>>::
|
||||||
|
* `checkinc` -- List of commands, structs, etc.
|
||||||
missing from the API spec in `$(OUTDIR)/checks/notInSpec.txt`
|
missing from the API spec in `$(OUTDIR)/checks/notInSpec.txt`
|
||||||
** `checklinks` - Validator script output for API spec in
|
* `checklinks` -- Validator script output for API spec in
|
||||||
`$(OUTDIR)/checks/specErrs.txt` and for reference pages in
|
`$(OUTDIR)/checks/specErrs.txt` and for reference pages in
|
||||||
`$(OUTDIR)/checks/manErrs.txt`
|
`$(OUTDIR)/checks/manErrs.txt`
|
||||||
* Valid usage database:
|
Valid usage database::
|
||||||
** `validusage` - json database of all valid usage statements in the
|
* `validusage` - json database of all valid usage statements in the
|
||||||
specification. Must be built with ./makeAllExts (for now).
|
specification. Must be built with `./makeAllExts` (for now).
|
||||||
Output in `$(OUTDIR)/validation/validusage.json`.
|
Output in `$(OUTDIR)/validation/validusage.json`.
|
||||||
A validated schema for the output of this is stored in
|
A validated schema for the output of this is stored in
|
||||||
`$(CURDIR)/config/vu-to-json/vu_schema.json`
|
`$(CURDIR)/config/vu-to-json/vu_schema.json`
|
||||||
|
@ -83,23 +91,13 @@ make -j 8
|
||||||
|
|
||||||
may significantly speed up the reference page builds.
|
may significantly speed up the reference page builds.
|
||||||
|
|
||||||
|
If you encounter problems refer to the <<troubleshooting>> section.
|
||||||
[[build-bugs]]
|
|
||||||
=== Asciidoctor Build Errors
|
|
||||||
|
|
||||||
If you see an error like this from the `pdf` target:
|
|
||||||
|
|
||||||
/home/jon/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ruby-enum-0.7.1/lib/ruby-enum/enum.rb:34:in `const_set': asciidoctor: FAILED: /home/tree/git/vulkan/vkspec.txt: Failed to load AsciiDoc document - wrong constant name default (NameError)
|
|
||||||
|
|
||||||
then try <<ruby-enum-downgrade,downgrading ruby-enum>>
|
|
||||||
as described below
|
|
||||||
|
|
||||||
|
|
||||||
[[building-versions]]
|
[[building-versions]]
|
||||||
=== Building Specifications For Different API Versions
|
=== Building Specifications For Different API Versions
|
||||||
|
|
||||||
The `Makefile` defaults to building a Vulkan 1.1 specification.
|
The `Makefile` defaults to building a Vulkan 1.1 specification.
|
||||||
This is controlled by asciidoc attributes passed in the Makefile variable
|
This is controlled by Asciidoctor attributes passed in the Makefile variable
|
||||||
`$(VERSIONS)`
|
`$(VERSIONS)`
|
||||||
To instead build a Vulkan 1.0 specification, pass
|
To instead build a Vulkan 1.0 specification, pass
|
||||||
|
|
||||||
|
@ -115,39 +113,45 @@ on the `make` command line.
|
||||||
|
|
||||||
Extensions are defined in the same source as the core Specification, but
|
Extensions are defined in the same source as the core Specification, but
|
||||||
are only conditionally included in the output.
|
are only conditionally included in the output.
|
||||||
Asciidoctor http://asciidoctor.org/docs/user-manual/#attributes[attributes]
|
http://asciidoctor.org/docs/user-manual/#attributes[Asciidoctor attributes]
|
||||||
of the same name as the extension are used to define whether the extension
|
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
|
is included or not -- defining such an attribute will cause the output to
|
||||||
include the text for that extension.
|
include the text for that extension.
|
||||||
|
|
||||||
When building the specification, the extensions included are those specified
|
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
|
as a space-separated list of extension names (e.g. `VK_KHR_surface`) in the
|
||||||
Makefile variable `$(EXTENSIONS)`, normally set on the make command line.
|
Makefile variable `$(EXTENSIONS)`, usually set on the make command line.
|
||||||
When changing the list of extensions, it is critical to remove all generated
|
When changing the list of extensions, it is critical to remove all generated
|
||||||
files using the `clean_generated` Makefile target, as the contents of
|
files using the `clean_generated` Makefile target, as the contents of
|
||||||
generated files depends on `$(EXTENSIONS)`.
|
generated files depends on `$(EXTENSIONS)`.
|
||||||
There are several helper scripts which clean these files and then build one
|
There are several helper scripts which clean these files and then build one
|
||||||
or more specified targets for specified extensions:
|
or more specified targets for specified extensions:
|
||||||
|
|
||||||
* `makeExt` - generate outputs with one or more extensions enabled.
|
* `makeExt` -- generate outputs with one or more extensions enabled.
|
||||||
Usage is `makeExt extension-names target(s)`, where `extension-names` is
|
Usage is `makeExt extension-names target(s)`, where `extension-names` is
|
||||||
a space-separated list of extension names, such as
|
a space-separated list of extension names, such as
|
||||||
`VK_EXT_debug_report`.
|
`VK_EXT_debug_report`.
|
||||||
If more than one extension is specified, `extension-names` must be
|
If more than one extension is specified, `extension-names` must be
|
||||||
quoted on the command line.
|
quoted on the command line.
|
||||||
* `makeKHR` - generate outputs with all Khronos (`VK_KHR_*`) extensions
|
* `makeKHR` -- generate outputs with all Khronos (`VK_KHR_*`) extensions
|
||||||
enabled.
|
enabled.
|
||||||
Usage is `makeKHR target(s)`.
|
Usage is `makeKHR target(s)`.
|
||||||
|
* `makeAllExts` -- generate outputs with all Vulkan extensions enabled.
|
||||||
|
Usage is `makeAllExts target(s)`.
|
||||||
|
|
||||||
The `target(s)` passed to these scripts are arbitrary `make` options, and
|
The `target(s)` passed to these scripts are arbitrary `make` options, and
|
||||||
can be used to set Makefile variables and options, as well as specify actual
|
can be used to set Makefile variables and options, as well as specify actual
|
||||||
build targets.
|
build targets; you can, for example, do:
|
||||||
|
|
||||||
|
----
|
||||||
|
$ ./makeAllExts -j 8 VERSIONS="VK_VERSION_1_0" html
|
||||||
|
----
|
||||||
|
|
||||||
The Makefile variable `$(APITITLE)` defines an additional string which is
|
The Makefile variable `$(APITITLE)` defines an additional string which is
|
||||||
appended to the specification title.
|
appended to the specification title.
|
||||||
When building with extensions enabled, this should be set to something like
|
When building with extensions enabled, this should be set to something like
|
||||||
`(with extension VK_extension_name)`.
|
`(with extension VK_extension_name)`.
|
||||||
The `makeExt` and `makeKHR` scripts already do this.
|
The `makeExt`, `makeKHR`, and `makeAllExts` scripts already do this.
|
||||||
|
|
||||||
|
|
||||||
[[building-diff]]
|
[[building-diff]]
|
||||||
|
@ -171,29 +175,37 @@ above.
|
||||||
In the resulting HTML document, content that has been added by one of the
|
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
|
extensions will be highlighted with a lime background, and content that was
|
||||||
removed will be highlighted with a pink background.
|
removed will be highlighted with a pink background.
|
||||||
Each section has an anchor of `"#differenceN"`, with an arrow (=>) at the end
|
Each section has an anchor of `#differenceN`, with an arrow (=>) at the end
|
||||||
of each section which links to the next difference section.
|
of each section which links to the next difference section.
|
||||||
The first diff section is "difference1".
|
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]]
|
[[building-test]]
|
||||||
=== Alternate and Test Builds
|
=== Alternate and Test Builds
|
||||||
|
|
||||||
If you are just testing asciidoc formatting, macros, stylesheets, etc., you
|
If you are just testing Asciidoctor formatting, macros, stylesheets, etc.,
|
||||||
may want to edit `vkspec.txt` to just include your test code.
|
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,
|
The asciidoctor HTML build is very fast, even for the whole Specification,
|
||||||
but PDF builds take several minutes.
|
but PDF builds take several minutes.
|
||||||
|
|
||||||
|
|
||||||
=== Images Used In The Specification
|
=== Images Used In The Specification
|
||||||
|
|
||||||
All images used in the specification are in the `images/` directory in SVG
|
All images used in the specification are in the `images/` directory in the
|
||||||
format, and were created with Inkscape.
|
SVG format, and were created with Inkscape.
|
||||||
We recommend using Inkscape to modify or create new images, as we've had
|
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
|
problems using SVG files created by some other tools; especially in the PDF
|
||||||
builds.
|
builds.
|
||||||
|
|
||||||
|
[[validation-scripts]]
|
||||||
=== Validation Scripts
|
=== Validation Scripts
|
||||||
|
|
||||||
[NOTE]
|
[NOTE]
|
||||||
|
@ -204,7 +216,7 @@ work properly at present due to numerous changes in the macro and
|
||||||
conditional markup used in the specification sources.
|
conditional markup used in the specification sources.
|
||||||
====
|
====
|
||||||
|
|
||||||
There are a several Makefile targets which look for inconsistencies and
|
There are several Makefile targets which look for inconsistencies and
|
||||||
missing material between the specification and ref pages, and the canonical
|
missing material between the specification and ref pages, and the canonical
|
||||||
description of the API in `vk.xml` :
|
description of the API in `vk.xml` :
|
||||||
|
|
||||||
|
@ -214,16 +226,13 @@ description of the API in `vk.xml` :
|
||||||
|
|
||||||
They are necessarily heuristic since they're dealing with lots of
|
They are necessarily heuristic since they're dealing with lots of
|
||||||
hand-written material.
|
hand-written material.
|
||||||
To use them you'll also need to install:
|
|
||||||
|
|
||||||
* `python3`
|
|
||||||
|
|
||||||
The `checkinc` target uses Unix filters to determine which autogenerated API
|
The `checkinc` target uses Unix filters to determine which autogenerated API
|
||||||
include files are used (and not used) in the spec.
|
include files are used (and not used) in the spec.
|
||||||
It generates several output files, but the only one you're likely to care
|
It generates `notInSpec.txt` report.
|
||||||
about is `actual.only`.
|
This contains a list of the include files which are *not* referenced
|
||||||
This is a list of the include files which are *not* referenced anywhere in
|
anywhere in the spec, and probably correspond to undocumented material in
|
||||||
the spec, and probably correspond to undocumented material in the spec.
|
the spec.
|
||||||
|
|
||||||
The `checklinks` target validates the various internal tagged links in the
|
The `checklinks` target validates the various internal tagged links in the
|
||||||
man pages and spec (e.g. the `fname:vkFuncBlah`, `sname:VkStructBlah`, etc.)
|
man pages and spec (e.g. the `fname:vkFuncBlah`, `sname:VkStructBlah`, etc.)
|
||||||
|
@ -234,10 +243,10 @@ found.
|
||||||
|
|
||||||
|
|
||||||
[[macros]]
|
[[macros]]
|
||||||
== Our Asciidoc Macros
|
== Our Asciidoctor Macros
|
||||||
|
|
||||||
We use a bunch of custom macros in the reference pages and API spec asciidoc
|
We use a bunch of custom macros in the reference pages and API spec
|
||||||
sources.
|
Asciidoctor sources.
|
||||||
The validator scripts rely on these macros as part of their sanity checks,
|
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,
|
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
|
token, or enum name, so the documents are semantically tagged and more
|
||||||
|
@ -246,12 +255,14 @@ easily verifiable.
|
||||||
The supported macros are defined in the `config/vulkan-macros/extension.rb`
|
The supported macros are defined in the `config/vulkan-macros/extension.rb`
|
||||||
asciidoctor extension script.
|
asciidoctor extension script.
|
||||||
|
|
||||||
The tags used are described in the style guide (`styleguide.txt`).
|
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 ref pages to the point that
|
We (may) eventually tool up the spec and ref pages to the point that
|
||||||
anywhere there's a type or token referred to, clicking on (or perhaps
|
anywhere there's a type or token referred to, clicking on (or perhaps
|
||||||
hovering over) it in the HTML view and be taken to the definition of that
|
hovering over) it in the HTML view will take reader to the definition of
|
||||||
type/token.
|
that type/token.
|
||||||
That will take some more plumbing work to tag the stuff in the autogenerated
|
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
|
include files, and do something sensible in the spec (e.g. resolve links to
|
||||||
internal references).
|
internal references).
|
||||||
|
@ -300,11 +311,13 @@ font family].
|
||||||
|
|
||||||
=== Marking Normative Language
|
=== Marking Normative Language
|
||||||
|
|
||||||
|
// editing-note: Chapter should probably be merged with styleguide to reduce size
|
||||||
|
|
||||||
Normative language is marked as *bold*, and also with the [purple]#purple#
|
Normative language is marked as *bold*, and also with the [purple]#purple#
|
||||||
role for HTML output.
|
role for HTML output.
|
||||||
It can be used to mark entire paragraphs or spans of words.
|
It can be used to mark entire paragraphs or spans of words.
|
||||||
In addition, the normative terminology macros, such as must: and may: and
|
In addition, the normative terminology macros, such as `must:` and `may:`
|
||||||
cannot:, always use this role.
|
and `cannot:`, always use this role.
|
||||||
|
|
||||||
The formatting of normative language depends on the stylesheet.
|
The formatting of normative language depends on the stylesheet.
|
||||||
Currently it just comes out in purple.
|
Currently it just comes out in purple.
|
||||||
|
@ -314,6 +327,8 @@ We may add a way to disable this formatting at build time.
|
||||||
[[equations]]
|
[[equations]]
|
||||||
== Imbedding Equations
|
== Imbedding Equations
|
||||||
|
|
||||||
|
// editing-note: Chapter should probably be merged with styleguide to reduce size
|
||||||
|
|
||||||
Where possible, equations should be written using straight asciidoc markup
|
Where possible, equations should be written using straight asciidoc markup
|
||||||
with the _eq_ role.
|
with the _eq_ role.
|
||||||
This covers many common equations and is faster than the alternatives.
|
This covers many common equations and is faster than the alternatives.
|
||||||
|
@ -323,9 +338,9 @@ These symbols are defined using attribute names the same as the comparable
|
||||||
LaTeX macro names, where possible.
|
LaTeX macro names, where possible.
|
||||||
|
|
||||||
For more complex equations, such as multi-case statements, matrices, and
|
For more complex equations, such as multi-case statements, matrices, and
|
||||||
complex fractions, equations should be written using the latexmath: inline
|
complex fractions, equations should be written using the `latexmath:` inline
|
||||||
and block macros.
|
and block macros.
|
||||||
The contents of the latexmath: blocks should be LaTeX math notation.
|
The contents of the `latexmath:` blocks should be LaTeX math notation.
|
||||||
LaTeX math markup delimiters are now inserted by the asciidoctor toolchain.
|
LaTeX math markup delimiters are now inserted by the asciidoctor toolchain.
|
||||||
|
|
||||||
LaTeX math is passed through unmodified to all HTML output forms, which is
|
LaTeX math is passed through unmodified to all HTML output forms, which is
|
||||||
|
@ -342,26 +357,31 @@ The following caveats apply:
|
||||||
`>=` respectively.
|
`>=` respectively.
|
||||||
`&` is an alignment construct for multiline equations, and should only
|
`&` is an alignment construct for multiline equations, and should only
|
||||||
appear in block macros anyway.
|
appear in block macros anyway.
|
||||||
* AMSmath environments (e.g. pass:[\begin{equation*}], pass:[{align*}],
|
* AMSmath environments (e.g. `pass:[\begin{equation*}]`,
|
||||||
etc.) cannot be used in KaTeX at present, and have been replaced with
|
`pass:[{align*}]`, etc.) cannot be used in KaTeX at present, and have
|
||||||
constructs supported by KaTeX such as pass:[{aligned}].
|
been replaced with constructs supported by KaTeX such as
|
||||||
|
`pass:[{aligned}]`.
|
||||||
* Arbitrary LaTeX constructs cannot be used.
|
* Arbitrary LaTeX constructs cannot be used.
|
||||||
KaTeX and asciidoctor-mathematical are only equation renderers, not full
|
KaTeX and asciidoctor-mathematical are only equation renderers, not full
|
||||||
LaTeX engines.
|
LaTeX engines.
|
||||||
Imbedding LaTeX like \Large or pass:[\hbox{\tt\small VK\_FOO}] may not
|
Imbedding LaTeX like `\Large` or `pass:[\hbox{\tt\small VK\_FOO}]` may
|
||||||
work in any of the backends, and should be avoided.
|
not work in any of the backends, and should be avoided.
|
||||||
|
|
||||||
See the "`Vulkan Documentation and Extensions`" document for more details of
|
See the
|
||||||
supported LaTeX math constructs.
|
link:https://www.khronos.org/registry/vulkan/specs/1.1/styleguide.html#writing-latexmath["`style guide`"]
|
||||||
|
(Vulkan Documentation and Extensions) document for more details of supported
|
||||||
|
LaTeX math constructs.
|
||||||
|
|
||||||
|
|
||||||
[[anchors]]
|
[[anchors]]
|
||||||
== Asciidoc Anchors And Xrefs
|
== Asciidoc Anchors And Xrefs
|
||||||
|
|
||||||
|
// editing-note: Chapter should probably be merged with styleguide to reduce size
|
||||||
|
|
||||||
In the API spec, sections can have anchors (labels) applied with the
|
In the API spec, sections can have anchors (labels) applied with the
|
||||||
following syntax.
|
following syntax.
|
||||||
In general the anchor should immediately precede the chapter or section
|
In general the anchor should immediately precede the chapter or section
|
||||||
title and should use the form '+++[[chapter-section-label]]+++'.
|
title and should use the form `pass:[[[chapter-section-label]]]`.
|
||||||
For example,
|
For example,
|
||||||
|
|
||||||
For example, in chapter `synchronization.txt`:
|
For example, in chapter `synchronization.txt`:
|
||||||
|
@ -392,6 +412,7 @@ Therefore you can say something like:
|
||||||
Fences are used with the +++<<vkQueueSubmit>>+++ command...
|
Fences are used with the +++<<vkQueueSubmit>>+++ command...
|
||||||
----
|
----
|
||||||
|
|
||||||
|
// editing-note: why would I though. There are xlink: macros for that.
|
||||||
|
|
||||||
[[depends]]
|
[[depends]]
|
||||||
== Software Dependencies
|
== Software Dependencies
|
||||||
|
@ -403,21 +424,21 @@ Before building the Vulkan spec, you must install the following tools.
|
||||||
Minimum versions known to be working are shown. Later versions will probably
|
Minimum versions known to be working are shown. Later versions will probably
|
||||||
work at least as well.
|
work at least as well.
|
||||||
|
|
||||||
* GNU make (make version: 4.0.8-1; older versions probably OK)
|
* GNU make (`make` version: 4.0.8-1; older versions probably OK)
|
||||||
* Python 3 (python, version: 3.4.2)
|
* Python 3 (`python`, version: 3.4.2)
|
||||||
* Ruby (ruby, version: 2.3.3)
|
* Ruby (`ruby`, version: 2.3.3)
|
||||||
** The Ruby development package (ruby-dev) may also be required in some
|
** The Ruby development package (`ruby-dev`) may also be required in some
|
||||||
environments.
|
environments.
|
||||||
* Git command-line client (git, version: 2.1.4).
|
* Git command-line client (`git`, version: 2.1.4).
|
||||||
The build can progress without a git client, but branch/commit
|
The build can progress without a git client, but branch/commit
|
||||||
information will be omitted from the build.
|
information will be omitted from the build.
|
||||||
Any version supporting the following operations should work:
|
Any version supporting the following operations should work:
|
||||||
** `git symbolic-ref --short HEAD`
|
** `git symbolic-ref --short HEAD`
|
||||||
** `git log -1 --format="%H"`
|
** `git log -1 --format="%H"`
|
||||||
* Ghostscript (ghostscript, version: 9.10).
|
* Ghostscript (`ghostscript`, version: 9.10).
|
||||||
This is for the PDF build, and it can still progress without it.
|
This is for the PDF build, and it can still progress without it.
|
||||||
Ghostscript is used to optimize the size of the PDF, so will be a lot
|
Ghostscript is used to optimize the size of the PDF, so it will be order
|
||||||
smaller if it is included.
|
of magnitude smaller if it is included.
|
||||||
|
|
||||||
The following Ruby Gems and platform package dependencies must also be
|
The following Ruby Gems and platform package dependencies must also be
|
||||||
installed.
|
installed.
|
||||||
|
@ -426,28 +447,28 @@ environment managers below.
|
||||||
Please read the remainder of this document (other than platform-specific
|
Please read the remainder of this document (other than platform-specific
|
||||||
parts you don't use) completely before trying to install.
|
parts you don't use) completely before trying to install.
|
||||||
|
|
||||||
* Asciidoctor (asciidoctor, version: 1.5.6.1)
|
* Asciidoctor (`asciidoctor`, version: 1.5.6.1)
|
||||||
* Coderay (coderay, version 1.1.2)
|
* Coderay (`coderay`, version 1.1.2)
|
||||||
* JSON Schema (json-schema, version 2.8.0)
|
* JSON Schema (`json-schema`, version 2.8.0)
|
||||||
* Asciidoctor PDF (asciidoctor-pdf, version: 1.5.0.alpha16)
|
* Asciidoctor PDF (`asciidoctor-pdf`, version: 1.5.0.alpha16)
|
||||||
* Asciidoctor Mathematical (asciidoctor-mathematical, version 0.2.2)
|
* Asciidoctor Mathematical (`asciidoctor-mathematical`, version 0.2.2)
|
||||||
* https://github.com/asciidoctor/asciidoctor-mathematical#dependencies[Dependencies
|
* https://github.com/asciidoctor/asciidoctor-mathematical#dependencies[Dependencies
|
||||||
for asciidoctor-mathematical] (There are a lot of these!)
|
for `asciidoctor-mathematical`] (There are a lot of these!)
|
||||||
* KaTeX distribution (version 0.7.0 from https://github.com/Khan/KaTeX .
|
* KaTeX distribution (version 0.7.0 from https://github.com/Khan/KaTeX.
|
||||||
This is cached under `katex/`, and need not be
|
This is cached under `katex/`, and need not be installed from github.
|
||||||
installed from github.
|
|
||||||
|
|
||||||
.Note
|
.Note
|
||||||
[NOTE]
|
[NOTE]
|
||||||
====
|
====
|
||||||
Older versions of these packages may work, but are not recommended.
|
Older versions of these packages may work, but are not recommended.
|
||||||
In particular, the latest versions of asciidoctor-pdf and
|
In particular, the latest versions of `asciidoctor-pdf` and
|
||||||
asciidoctor-mathematical contain important patches working around issues
|
`asciidoctor-mathematical` contain important patches working around issues
|
||||||
we've discovered, and those patches may not be present in earlier versions.
|
we've discovered, and those patches may not be present in earlier versions.
|
||||||
====
|
====
|
||||||
|
|
||||||
Only the `asciidoctor` and `coderay` gems are needed if you don't intend to
|
Only the `asciidoctor` and `coderay` gems are needed for the HTML `make`
|
||||||
build PDF versions of the spec and supporting documents.
|
targets.
|
||||||
|
Rest is needed for the PDF builds.
|
||||||
|
|
||||||
`json-schema` is only required in order to validate the output of the valid
|
`json-schema` is only required in order to validate the output of the valid
|
||||||
usage extraction scripts to a JSON file.
|
usage extraction scripts to a JSON file.
|
||||||
|
@ -478,166 +499,32 @@ Platform-specific toolchain instructions follow:
|
||||||
Most of the dependencies on Linux packages are light enough that it's
|
Most of the dependencies on Linux packages are light enough that it's
|
||||||
possible to build the spec natively in Windows, but it means bypassing the
|
possible to build the spec natively in Windows, but it means bypassing the
|
||||||
makefile and calling functions directly.
|
makefile and calling functions directly.
|
||||||
This might be solved in future.
|
Considering how easy it is to get an Unix subsystem or VM on Windows, this
|
||||||
For now, there are three options for Windows users: Ubuntu / Windows 10,
|
is not recommended and it is unlikely a direct path will become supported in
|
||||||
|
the future.
|
||||||
|
|
||||||
|
There are three supported options for Windows users: Ubuntu / Windows 10,
|
||||||
MinGW, or Cygwin.
|
MinGW, or Cygwin.
|
||||||
|
|
||||||
|
|
||||||
[[depends-ubuntu]]
|
[[depends-ubuntu]]
|
||||||
==== Ubuntu / Windows 10
|
==== Ubuntu / Windows 10
|
||||||
|
|
||||||
When using the "`Ubuntu Subsystem`" for Windows 10, most dependencies can be
|
At the time of writing Ubuntu Subsystem is provided in 18.04 LTS and
|
||||||
installed via apt-get:
|
16.04 LTS versions.
|
||||||
|
These versions are perfectly suitable for building this repo.
|
||||||
|
|
||||||
|
You can install Ubuntu Subsystem as described in the official documentation:
|
||||||
|
https://docs.microsoft.com/en-us/windows/wsl/install-win10
|
||||||
|
|
||||||
|
The distro image is not kept up-to-date, so it is recommended to run:
|
||||||
|
|
||||||
----
|
----
|
||||||
sudo apt-get -qq -y install build-essential python3 git cmake bison flex \
|
sudo apt update
|
||||||
libffi-dev libxml2-dev libgdk-pixbuf2.0-dev libcairo2-dev \
|
sudo apt full-upgrade
|
||||||
libpango1.0-dev ttf-lyx gtk-doc-tools ghostscript
|
|
||||||
----
|
----
|
||||||
|
|
||||||
The default ruby packages on Ubuntu are fairly out of date.
|
Rest is identical to <<depends-linux,Linux instructions>>.
|
||||||
Ubuntu only provides `ruby` and `ruby2.0` - the latter is multiple revisions
|
|
||||||
behind the current stable branch, and would require wrangling to get the
|
|
||||||
makefile working with it.
|
|
||||||
|
|
||||||
Luckily, there are better options; either https://rvm.io[rvm] or
|
|
||||||
https://github.com/rbenv/rbenv[rbenv] is recommended to install a more
|
|
||||||
recent version.
|
|
||||||
|
|
||||||
[NOTE]
|
|
||||||
.Note
|
|
||||||
====
|
|
||||||
|
|
||||||
* If you are new to Ruby, you should *completely remove* (through the
|
|
||||||
package manager, e.g. `sudo apt-get remove *packagename*`) all existing
|
|
||||||
Ruby and asciidoctor infrastructure on your machine before trying to use
|
|
||||||
rvm or rbenv for the first time.
|
|
||||||
`dpkg -l | egrep 'asciidoctor|ruby|rbenv|rvm'` will give you a list of
|
|
||||||
candidate package names to remove.
|
|
||||||
** If you already have a favorite Ruby package manager, ignore this
|
|
||||||
advice, and just install the required OS packages and gems.
|
|
||||||
* In addition, `rvm` and `rbenv` are *mutually incompatible*.
|
|
||||||
They both rely on inserting shims and `$PATH` modifications in your bash
|
|
||||||
shell.
|
|
||||||
If you already have one of these installed and are familiar with it,
|
|
||||||
it's probably best to stay with that one.
|
|
||||||
One of the editors, who is new to Ruby, found `rbenv` far more
|
|
||||||
comprehensible than `rvm`.
|
|
||||||
The other editor likes `rvm` better.
|
|
||||||
** Neither `rvm` nor `rbenv` work, out of the box, when invoked from
|
|
||||||
non-Bash shells like tcsh.
|
|
||||||
This can be hacked up by setting the right environment variables and
|
|
||||||
PATH additions based on a bash environment.
|
|
||||||
* Most of the tools on Bash for Windows are quite happy with Windows line
|
|
||||||
endings (CR LF), but bash scripts expect Unix line endings (LF).
|
|
||||||
The file `.gitattributes` at the top of the vulkan tree in the 1.0
|
|
||||||
branch forces such scripts to be checked out with the proper line
|
|
||||||
endings on non-Linux platforms.
|
|
||||||
If you add new scripts whose names don't end in `.sh`, they should be
|
|
||||||
included in .gitattributes as well.
|
|
||||||
====
|
|
||||||
|
|
||||||
|
|
||||||
[[depends-ubuntu-rbenv]]
|
|
||||||
===== Ubuntu/Windows 10 Using Rbenv
|
|
||||||
|
|
||||||
Rbenv is a lighter-weight Ruby environment manager with less functionality
|
|
||||||
than rvm.
|
|
||||||
Its primary task is to manage different Ruby versions, while rvm has
|
|
||||||
additional functionality such as managing "`gemsets`" that is irrelevant to
|
|
||||||
our needs.
|
|
||||||
|
|
||||||
A complete installation script for the toolchain on Ubuntu for Windows,
|
|
||||||
developed on an essentially out-of-the-box environment, follows.
|
|
||||||
If you try this, don't try to execute the entire thing at once.
|
|
||||||
Do each step separately in case of errors we didn't encounter.
|
|
||||||
|
|
||||||
----
|
|
||||||
# Install packages needed by `ruby_build` and by toolchain components.
|
|
||||||
# See https://github.com/rbenv/ruby-build/wiki and
|
|
||||||
# https://github.com/asciidoctor/asciidoctor-mathematical#dependencies
|
|
||||||
|
|
||||||
sudo apt-get install autoconf bison build-essential libssl-dev \
|
|
||||||
libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev \
|
|
||||||
libffi-dev libgdbm3 libgdbm-dev cmake libxml2 \
|
|
||||||
libxml2-dev flex pkg-config libglib2.0-dev \
|
|
||||||
libcairo-dev libpango1.0-dev libgdk-pixbuf2.0-dev \
|
|
||||||
libpangocairo-1.0
|
|
||||||
|
|
||||||
# Install rbenv from https://github.com/rbenv/rbenv
|
|
||||||
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
|
|
||||||
|
|
||||||
# Set path to shim layers in .bashrc
|
|
||||||
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> .bashrc
|
|
||||||
|
|
||||||
~/.rbenv/bin/rbenv init
|
|
||||||
|
|
||||||
# Set .rbenv environment variables in .bashrc
|
|
||||||
echo 'eval "$(rbenv init -)"' >> .bashrc
|
|
||||||
|
|
||||||
# Restart your shell (e.g. open a new terminal window). Note that
|
|
||||||
# you do not need to use the `-l` option, since the modifications
|
|
||||||
# were made to .bashrc rather than .bash_profile. If successful,
|
|
||||||
# `type rbenv` should print 'rbenv is a function' followed by code.
|
|
||||||
|
|
||||||
# Install `ruby_build` plugin from https://github.com/rbenv/ruby-build
|
|
||||||
|
|
||||||
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
|
|
||||||
|
|
||||||
# Install Ruby 2.3.3
|
|
||||||
# This takes in excess of 20 min. to build!
|
|
||||||
# https://github.com/rbenv/ruby-build/issues/1054#issuecomment-276934761
|
|
||||||
# suggests:
|
|
||||||
# "You can speed up Ruby installs by avoiding generating ri/RDoc
|
|
||||||
# documentation for them:
|
|
||||||
# RUBY_CONFIGURE_OPTS=--disable-install-doc rbenv install 2.3.3
|
|
||||||
# We have not tried this.
|
|
||||||
|
|
||||||
rbenv install 2.3.3
|
|
||||||
|
|
||||||
# Configure rbenv globally to always use Ruby 2.3.3.
|
|
||||||
echo "2.3.3" > ~/.rbenv/version
|
|
||||||
|
|
||||||
# Finally, install toolchain components.
|
|
||||||
# asciidoctor-mathematical also takes in excess of 20 min. to build!
|
|
||||||
# The same RUBY_CONFIGURE_OPTS advice above may apply here as well.
|
|
||||||
|
|
||||||
gem install asciidoctor coderay json-schema
|
|
||||||
gem install --pre asciidoctor-pdf
|
|
||||||
MATHEMATICAL_SKIP_STRDUP=1 gem install asciidoctor-mathematical
|
|
||||||
----
|
|
||||||
|
|
||||||
|
|
||||||
[[depends-ubuntu-rvm]]
|
|
||||||
===== Ubuntu/Windows 10 Using RVM
|
|
||||||
|
|
||||||
Here are (sparser) instructions for using rvm to setup version 2.3.x:
|
|
||||||
|
|
||||||
----
|
|
||||||
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
|
|
||||||
\curl -sSL https://get.rvm.io | bash -s stable --ruby
|
|
||||||
source ~/.rvm/scripts/rvm
|
|
||||||
rvm install ruby-2.3
|
|
||||||
rvm use ruby-2.3
|
|
||||||
----
|
|
||||||
|
|
||||||
NOTE: Windows 10 Bash will need to be launched with the "-l" option
|
|
||||||
appended, so that it runs a login shell; otherwise RVM won't function
|
|
||||||
correctly on future launches.
|
|
||||||
|
|
||||||
|
|
||||||
[[depends-ubuntu-sys]]
|
|
||||||
===== Ubuntu 16.04 using system Ruby
|
|
||||||
|
|
||||||
The Ubuntu 16.04.1 default Ruby install (version 2.3.1) seems to be
|
|
||||||
up-to-date enough to run all the required gems, but also needs the
|
|
||||||
`ruby-dev` package installed through the package manager.
|
|
||||||
|
|
||||||
In addition, the library
|
|
||||||
`/var/lib/gems/2.3.0/gems/mathematical-1.6.7/ext/mathematical/lib/liblasem.so`
|
|
||||||
has to be copied or linked into a directory where the loader can find it.
|
|
||||||
This requirement appears to be due to a problem with the
|
|
||||||
asciidoctor-mathematical build process.
|
|
||||||
|
|
||||||
|
|
||||||
[[depends-mingw]]
|
[[depends-mingw]]
|
||||||
|
@ -768,6 +655,34 @@ curl -LO http://mirrors.ctan.org/fonts/cm/ps-type1/bakoma/ttf/cmex10.ttf \
|
||||||
-LO http://mirrors.ctan.org/fonts/cm/ps-type1/bakoma/ttf/msbm10.ttf
|
-LO http://mirrors.ctan.org/fonts/cm/ps-type1/bakoma/ttf/msbm10.ttf
|
||||||
----
|
----
|
||||||
|
|
||||||
|
[[depends-linux]]
|
||||||
|
=== Linux (Debian, Ubuntu, etc.)
|
||||||
|
|
||||||
|
System dependencies can be installed via apt:
|
||||||
|
|
||||||
|
----
|
||||||
|
sudo apt install build-essential python3 git cmake bison flex \
|
||||||
|
libffi-dev libxml2-dev libgdk-pixbuf2.0-dev libcairo2-dev \
|
||||||
|
libpango1.0-dev fonts-lyx ghostscript
|
||||||
|
----
|
||||||
|
|
||||||
|
These instructions are for the Ubuntu installation and are generally
|
||||||
|
applicable to native Linux environments that use Debian packages, although
|
||||||
|
the exact list of packages to install may differ.
|
||||||
|
Other distributions using different package managers, such as RPM (Fedora)
|
||||||
|
and Yum (SuSE) will have different requirements.
|
||||||
|
|
||||||
|
Ruby can also be installed as a system package:
|
||||||
|
|
||||||
|
----
|
||||||
|
sudo apt install ruby ruby-dev
|
||||||
|
----
|
||||||
|
|
||||||
|
Ruby packages are often well out of date, so using <<ruby-env,alternative
|
||||||
|
ruby environments>> such as `rbenv` or `rvm` might be preferable.
|
||||||
|
|
||||||
|
Once the Ruby environment is set up, install the required
|
||||||
|
<<depends-gems,Ruby Gems>>.
|
||||||
|
|
||||||
[[depends-osx]]
|
[[depends-osx]]
|
||||||
=== Mac OS X
|
=== Mac OS X
|
||||||
|
@ -794,23 +709,6 @@ curl -LO http://mirrors.ctan.org/fonts/cm/ps-type1/bakoma/ttf/cmex10.ttf \
|
||||||
Then install the required <<depends-gems,Ruby Gems>>.
|
Then install the required <<depends-gems,Ruby Gems>>.
|
||||||
|
|
||||||
|
|
||||||
[[depends-linux]]
|
|
||||||
=== Linux (Debian, Ubuntu, etc.)
|
|
||||||
|
|
||||||
The instructions for the <<depends-ubuntu,Ubuntu / Windows 10>> installation
|
|
||||||
are generally applicable to native Linux environments using Debian packages,
|
|
||||||
such as Debian and Ubuntu, although the exact list of packages to install
|
|
||||||
may differ.
|
|
||||||
Other distributions using different package managers, such as RPM (Fedora)
|
|
||||||
and Yum (SuSE) will have different requirements.
|
|
||||||
|
|
||||||
Using `rbenv` or `rvm` is neccessary, since the system Ruby packages are
|
|
||||||
often well out of date.
|
|
||||||
|
|
||||||
Once the environment manager, Ruby, and `ruby_build` have been installed,
|
|
||||||
install the required <<depends-gems,Ruby Gems>>.
|
|
||||||
|
|
||||||
|
|
||||||
[[depends-gems]]
|
[[depends-gems]]
|
||||||
=== Ruby Gems
|
=== Ruby Gems
|
||||||
|
|
||||||
|
@ -818,35 +716,271 @@ The following ruby gems can be installed directly via the `gem install`
|
||||||
command, once the platform is set up:
|
command, once the platform is set up:
|
||||||
|
|
||||||
----
|
----
|
||||||
gem install rake asciidoctor coderay json-schema
|
gem install asciidoctor coderay json-schema
|
||||||
|
|
||||||
# Required only for pdf builds
|
# Required only for pdf builds
|
||||||
MATHEMATICAL_SKIP_STRDUP=1 gem install asciidoctor-mathematical
|
gem install asciidoctor-mathematical
|
||||||
gem install --pre asciidoctor-pdf
|
gem install --pre asciidoctor-pdf
|
||||||
----
|
----
|
||||||
|
|
||||||
[[ruby-enum-downgrade]]
|
Depending on Ruby environment `gem` may require `sudo`.
|
||||||
==== Ruby Gem Versioning Errors
|
|
||||||
|
It may significantly speed up installation if you skip documentation build
|
||||||
|
by passing `--no-rdoc --no-ri` arguments.
|
||||||
|
|
||||||
|
It may be beneficial to use updated packages via:
|
||||||
|
|
||||||
|
----
|
||||||
|
gem update
|
||||||
|
gem clean
|
||||||
|
----
|
||||||
|
|
||||||
|
[[troubleshooting]]
|
||||||
|
== Troubleshooting
|
||||||
|
|
||||||
|
This section goes over known problems and solutions for toolchain
|
||||||
|
installation or for build.
|
||||||
|
|
||||||
|
If you get arbitrary build errors it can't hurt to first try resolve it by
|
||||||
|
cleaning the tree:
|
||||||
|
|
||||||
|
----
|
||||||
|
make clean
|
||||||
|
git clean -dxf
|
||||||
|
----
|
||||||
|
|
||||||
|
|
||||||
|
=== STEM SVG Errors
|
||||||
|
|
||||||
|
If you happen to have `_` or other Asciidoctor formating characters in your
|
||||||
|
path, then PDF build using `asciidoctor-mathematical` may fail with:
|
||||||
|
|
||||||
|
----
|
||||||
|
asciidoctor: WARNING: image to embed not found or not readable: whatever/<em>stuff/Vulkan-Docs/out/equations_temp/stem-d3355033150173c1d397e342237db405.svg
|
||||||
|
----
|
||||||
|
|
||||||
|
See https://github.com/asciidoctor/asciidoctor-mathematical/issues/43.
|
||||||
|
|
||||||
|
You simply need to have the repository cloned in a simpler path.
|
||||||
|
|
||||||
|
|
||||||
|
=== Ghostscript Errors
|
||||||
|
|
||||||
|
Ghostscript optimization of the PDF may produce:
|
||||||
|
|
||||||
|
----
|
||||||
|
**** Error reading a content stream. The page may be incomplete.
|
||||||
|
Output may be incorrect.
|
||||||
|
**** Error: File did not complete the page properly and may be damaged.
|
||||||
|
Output may be incorrect.
|
||||||
|
----
|
||||||
|
|
||||||
|
Usually, it is just a problem with the Asciidoc sources (e.g. silent failure
|
||||||
|
to render content that does not fit in the page; such as SVG equations where
|
||||||
|
there is no line break opportunity).
|
||||||
|
|
||||||
|
|
||||||
|
=== Ruby Gem Versioning Errors
|
||||||
|
|
||||||
|
Sometimes, when updating ruby gem packages incompatibilities arise.
|
||||||
|
It is resoleved by identifying the offending packages and downgrading them:
|
||||||
|
|
||||||
|
----
|
||||||
|
$ gem uninstall package_name
|
||||||
|
$ gem install package_name --version good_version_number
|
||||||
|
----
|
||||||
|
|
||||||
|
If you already have the gem dependencies previously installed, if there are
|
||||||
|
new versions, then updating to them instead might help:
|
||||||
|
|
||||||
|
----
|
||||||
|
$ gem update
|
||||||
|
----
|
||||||
|
|
||||||
*ruby-enum*
|
*ruby-enum*
|
||||||
|
|
||||||
Make sure you are using ruby-enum 0.7.1 or later, and mathematical 1.6.8 or
|
We have seen this PDF build error:
|
||||||
later. If you are forced to use earlier versions, see
|
----
|
||||||
|
Failed to load AsciiDoc document - wrong constant name default (NameError)
|
||||||
|
----
|
||||||
|
|
||||||
|
It should not be occuring with updated packages.
|
||||||
|
Make sure you are using `ruby-enum 0.7.1` or later, and `mathematical 1.6.8`
|
||||||
|
or later.
|
||||||
|
If you are forced to use earlier versions, see
|
||||||
https://github.com/gjtorikian/mathematical/issues/69 for a report of a
|
https://github.com/gjtorikian/mathematical/issues/69 for a report of a
|
||||||
related versioning problem.
|
related versioning problem.
|
||||||
|
|
||||||
|
|
||||||
*prawn*
|
*prawn*
|
||||||
|
|
||||||
Make sure you are using prawn 2.2.1 or later, and prawn-templates 0.0.5 or
|
Make sure you are using prawn 2.2.1 or later, and prawn-templates 0.0.5 or
|
||||||
later. Incompatibilities between asciidoctor-pdf and earlier versions of
|
later. Incompatibilities between `asciidoctor-pdf` and earlier versions of
|
||||||
these gems affects the PDF build. See
|
these gems affects the PDF build. See
|
||||||
https://github.com/KhronosGroup/Vulkan-Docs/issues/476
|
https://github.com/KhronosGroup/Vulkan-Docs/issues/476
|
||||||
|
|
||||||
|
|
||||||
|
=== asciidoctor-mathematical gem native extension errors
|
||||||
|
|
||||||
|
Installing `mathematical` gem builds `lasem` and `mtex2MML` native binaries.
|
||||||
|
The <<depends,Dependencies>> we list should be sufficient for the install to
|
||||||
|
build those native extensions successfully.
|
||||||
|
|
||||||
|
If you encounter problems, it is possible to use those binaries from
|
||||||
|
preinstalled locations.
|
||||||
|
See https://github.com/gjtorikian/mathematical#troubleshooting.
|
||||||
|
|
||||||
|
|
||||||
|
=== Asciidoctor include errors
|
||||||
|
|
||||||
|
If you get errors like:
|
||||||
|
|
||||||
|
----
|
||||||
|
asciidoctor: ERROR: chapters/???.txt: line 189: include file not found: ???/Vulkan-Docs/api/protos/???.txt
|
||||||
|
----
|
||||||
|
|
||||||
|
you probably forgot to call `make clean_generated` as stated in the
|
||||||
|
<<building-extensions>> chapter.
|
||||||
|
|
||||||
|
|
||||||
|
[[ruby-env]]
|
||||||
|
== Alternative Ruby environments
|
||||||
|
|
||||||
|
The default `ruby` packages on Linux distro may be out of date.
|
||||||
|
Through the default `ruby` package, Ubuntu 18.04 provides ruby 2.5, and
|
||||||
|
Ubuntu 16.10 provides ruby 2.3.
|
||||||
|
Those system packages seem to be sufficient to build this repo.
|
||||||
|
|
||||||
|
But there are better options; either https://rvm.io[rvm] or
|
||||||
|
https://github.com/rbenv/rbenv[rbenv] is recommended to install an updated
|
||||||
|
version of Ruby environment.
|
||||||
|
|
||||||
|
[NOTE]
|
||||||
|
.Note
|
||||||
|
====
|
||||||
|
|
||||||
|
* If you are new to Ruby, you should *completely remove* (through the
|
||||||
|
package manager, e.g. `sudo apt purge *packagename*`) all existing
|
||||||
|
Ruby and asciidoctor infrastructure on your machine before trying to use
|
||||||
|
rvm or rbenv for the first time.
|
||||||
|
`dpkg -l | egrep 'asciidoctor|ruby|rbenv|rvm'` will give you a list of
|
||||||
|
candidate package names to remove.
|
||||||
|
** If you already have a favorite Ruby package manager, ignore this
|
||||||
|
advice, and just install the required OS packages and gems.
|
||||||
|
* In addition, `rvm` and `rbenv` are *mutually incompatible*.
|
||||||
|
They both rely on inserting shims and `$PATH` modifications in your bash
|
||||||
|
shell.
|
||||||
|
If you already have one of these installed and are familiar with it,
|
||||||
|
it's probably best to stay with that one.
|
||||||
|
One of the editors, who is new to Ruby, found `rbenv` far more
|
||||||
|
comprehensible than `rvm`.
|
||||||
|
The other editor likes `rvm` better.
|
||||||
|
** Neither `rvm` nor `rbenv` work, out of the box, when invoked from
|
||||||
|
non-Bash shells like `tcsh`.
|
||||||
|
This can be hacked up by setting the right environment variables and
|
||||||
|
`PATH` additions based on a bash environment.
|
||||||
|
* Most of the tools on Bash for Windows are quite happy with Windows line
|
||||||
|
endings (`CR LF`), but bash scripts expect Unix line endings (`LF`).
|
||||||
|
The file `.gitattributes` at the top of the vulkan tree forces such
|
||||||
|
scripts to be checked out with the proper line endings on non-Linux
|
||||||
|
platforms.
|
||||||
|
If you add new scripts whose names don't end in `.sh`, they should be
|
||||||
|
included in `.gitattributes` as well.
|
||||||
|
====
|
||||||
|
|
||||||
|
|
||||||
|
[[depends-ubuntu-rbenv]]
|
||||||
|
===== Ubuntu/Windows 10 Using Rbenv
|
||||||
|
|
||||||
|
Rbenv is a lighter-weight Ruby environment manager with less functionality
|
||||||
|
than rvm.
|
||||||
|
Its primary task is to manage different Ruby versions, while rvm has
|
||||||
|
additional functionality such as managing "`gemsets`" that is irrelevant to
|
||||||
|
our needs.
|
||||||
|
|
||||||
|
A complete installation script for the toolchain on Ubuntu for Windows,
|
||||||
|
developed on an essentially out-of-the-box environment, follows.
|
||||||
|
If you try this, don't try to execute the entire thing at once.
|
||||||
|
Do each step separately in case of errors we didn't encounter.
|
||||||
|
|
||||||
|
----
|
||||||
|
# Install packages needed by `ruby_build` and by toolchain components.
|
||||||
|
# See https://github.com/rbenv/ruby-build/wiki and
|
||||||
|
# https://github.com/asciidoctor/asciidoctor-mathematical#dependencies
|
||||||
|
|
||||||
|
sudo apt-get install autoconf bison build-essential libssl-dev \
|
||||||
|
libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev \
|
||||||
|
libffi-dev libgdbm3 libgdbm-dev cmake libxml2 \
|
||||||
|
libxml2-dev flex pkg-config libglib2.0-dev \
|
||||||
|
libcairo-dev libpango1.0-dev libgdk-pixbuf2.0-dev \
|
||||||
|
libpangocairo-1.0
|
||||||
|
|
||||||
|
# Install rbenv from https://github.com/rbenv/rbenv
|
||||||
|
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
|
||||||
|
|
||||||
|
# Set path to shim layers in .bashrc
|
||||||
|
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> .bashrc
|
||||||
|
|
||||||
|
~/.rbenv/bin/rbenv init
|
||||||
|
|
||||||
|
# Set .rbenv environment variables in .bashrc
|
||||||
|
echo 'eval "$(rbenv init -)"' >> .bashrc
|
||||||
|
|
||||||
|
# Restart your shell (e.g. open a new terminal window). Note that
|
||||||
|
# you do not need to use the `-l` option, since the modifications
|
||||||
|
# were made to .bashrc rather than .bash_profile. If successful,
|
||||||
|
# `type rbenv` should print 'rbenv is a function' followed by code.
|
||||||
|
|
||||||
|
# Install `ruby_build` plugin from https://github.com/rbenv/ruby-build
|
||||||
|
|
||||||
|
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
|
||||||
|
|
||||||
|
# Install Ruby 2.3.3
|
||||||
|
# This takes in excess of 20 min. to build!
|
||||||
|
# https://github.com/rbenv/ruby-build/issues/1054#issuecomment-276934761
|
||||||
|
# suggests:
|
||||||
|
# "You can speed up Ruby installs by avoiding generating ri/RDoc
|
||||||
|
# documentation for them:
|
||||||
|
# RUBY_CONFIGURE_OPTS=--disable-install-doc rbenv install 2.3.3
|
||||||
|
# We have not tried this.
|
||||||
|
|
||||||
|
rbenv install 2.3.3
|
||||||
|
|
||||||
|
# Configure rbenv globally to always use Ruby 2.3.3.
|
||||||
|
echo "2.3.3" > ~/.rbenv/version
|
||||||
|
|
||||||
|
# Finally, install toolchain components.
|
||||||
|
# asciidoctor-mathematical also takes in excess of 20 min. to build!
|
||||||
|
# The same RUBY_CONFIGURE_OPTS advice above may apply here as well.
|
||||||
|
|
||||||
|
gem install asciidoctor coderay json-schema
|
||||||
|
gem install --pre asciidoctor-pdf
|
||||||
|
MATHEMATICAL_SKIP_STRDUP=1 gem install asciidoctor-mathematical
|
||||||
|
----
|
||||||
|
|
||||||
|
|
||||||
|
[[depends-ubuntu-rvm]]
|
||||||
|
===== Ubuntu/Windows 10 Using RVM
|
||||||
|
|
||||||
|
Here are (sparser) instructions for using rvm to setup version 2.3.x:
|
||||||
|
|
||||||
|
----
|
||||||
|
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
|
||||||
|
\curl -sSL https://get.rvm.io | bash -s stable --ruby
|
||||||
|
source ~/.rvm/scripts/rvm
|
||||||
|
rvm install ruby-2.3
|
||||||
|
rvm use ruby-2.3
|
||||||
|
----
|
||||||
|
|
||||||
|
NOTE: Windows 10 Bash will need to be launched with the "-l" option
|
||||||
|
appended, so that it runs a login shell; otherwise RVM won't function
|
||||||
|
correctly on future launches.
|
||||||
|
|
||||||
|
|
||||||
[[history]]
|
[[history]]
|
||||||
== Revision History
|
== Revision History
|
||||||
|
|
||||||
|
* 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
|
* 2018-03-13 - Rename to BUILD.adoc and update for new directory
|
||||||
structure.
|
structure.
|
||||||
* 2018-03-05 - Update README for Vulkan 1.1 release.
|
* 2018-03-05 - Update README for Vulkan 1.1 release.
|
||||||
|
|
Loading…
Reference in New Issue