Vulkan-Docs/scripts/genspec.py
Jon Leech 476e3f422d Change log for March 18, 2019 Vulkan 1.1.104 spec update:
* Update release number to 104.

Public Issues:

  * Remove the incorrect line from "`Initial`" to "`Invalid`" state in the
    <<commandbuffer-lifecycle-diagram, Lifecycle of a command buffer>>
    diagram (public issue 881).
  * Add Fuchsia platform to <<boilerplate-wsi-header-table, Window System
    Extensions and Headers>> table (public pull request 933).
  * Change the type of
    slink:VkBufferDeviceAddressCreateInfoEXT::pname:deviceAddress from
    basetype:VkDeviceSize to basetype:VkDeviceAddress. These are both
    typedefs of code:uint64_t, so it is an ABI-compatible change (public
    issue 934).

Internal Issues:

  * Remove generated header files and update the CI tests to build a copy of
    the headers for use by the hpp-generate / hpp-compile CI stages. Targets
    to generate the headers will not be removed, but keeping these generated
    files in the repository increased the frequency of conflicts between
    branches when merging to master (internal issue 745).
  * Reword "`undefined: behavior if *action*" to "`must: not do *action*`"
    in the places the old terminology was used, and add a new
    <<writing-undefined, Describing Undefined Behavior>> section of the
    style guide to explain how to write such language in the future
    (internal issue 1579).
  * Move almost all Python scripts into the toplevel `scripts/` directory.
    Apply extensive internal edits to clean up and simplify the scripts, and
    try to follow PEP8 guidelines. Generalize the scripts with the use of a
    Conventions object controlling many aspects of output generation, to
    enable their use in other Khronos projects with similar requirements.
    Autogenerate extension interface refpages (these are experimental and
    may be retired going forward).

New Extensions:

  * `VK_AMD_display_native_hdr`
  * `VK_EXT_full_screen_exclusive` (internal issue 1439)
  * `VK_EXT_host_query_reset`
  * `VK_EXT_pipeline_creation_feedback` (internal issue 1560)
  * `VK_KHR_surface_protected_capabilities` (internal issue 1520)
2019-03-17 06:05:46 -07:00

167 lines
5.9 KiB
Python

#!/usr/bin/python3
#
# Copyright (c) 2016-2019 The Khronos Group Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import time
from datetime import timedelta, date
# This script builds a full release package including XHTML and PDF
# versions of the specification, including an optional list of
# extensions. Other files in the release directory are removed,
#including man pages, XHTML chunked, HTML, validity output, etc.
# The current branch must be fully committed and up to date when the
# script is run, with no outstanding un-added / un-committed files.
# After completing the build, suggestions for creating tags are made.
# Return the Vulkan release number, used for tags
def releaseNum():
return '$REVISION'
# Return a date for the current, or upcoming if not already, Friday,
# which is when releases happen
def buildOnFriday():
today = date.today()
friday = today + timedelta((4 - today.weekday()) % 7)
return friday
# label = textual label to use for target being generated
# versions = list of core API versions to include
# extensions = list of extension names to include
# ratified = True if this is a ratified spec (one built without non-KHR
# extensions)
# outdir = directory to generate specs in
# apititle = extra title to apply to the specification
# xmlDir = directory containing registry XML
# xmlTargets = targets to build in xml/
# specDir = directory containing spec source & Makefile
# specTargets = targets to build
# miscSrc = path to copy misc files from, if non-None
# miscDst = path to copy misc files to, if non-None
# needRefSources = True if ref pages must be extracted from the spec sources
def buildRelease(label,
versions,
extensions,
ratified,
outdir,
apititle,
xmlDir, xmlTargets,
specDir, specTargets,
miscSrc = None, miscDst = None, needRefSources = False):
print('echo Info: Generating target=' + label,
'outdir=' + outdir)
outarg = 'OUTDIR=' + outdir
if versions != None and len(versions) > 0:
versarg = 'VERSIONS="' + ' '.join(versions) + '"'
else:
versarg = ''
if extensions != None and len(extensions) > 0:
extarg = 'EXTENSIONS="' + ' '.join(extensions) + '"'
else:
extarg = ''
if ratified:
ratifiedarg = 'EXTRAATTRIBS="-a ratified_core_spec"'
else:
ratifiedarg = ''
if apititle != None:
titlearg = 'APITITLE="' + apititle + '"'
else:
titlearg = ''
# print('echo Info: Creating directory and cleaning spec in', outdir)
print('mkdir -p', outdir)
print('(cd ', outdir, '&& rm -rf',
'html chunked pdf',
'man config checks',
'vkspec.html styleguide.html apispec.html apispec.pdf registry.html',
')')
# print('echo Info: Generating headers and spec include files')
print('cd', xmlDir)
print('make', outarg, xmlTargets)
# print('echo Info: Generating ref pages sources and spec targets')
print('cd', specDir)
print('make', outarg, 'clean')
# This is a temporary workaround for a dependency bug - if any of the
# specTargets require ref page sources, and they aren't already present
# at the time the make is invoked, that target will not be built.
if needRefSources:
print('make', outarg, versarg, extarg, 'man/apispec.txt')
# Now make the actual targets.
print('make -O -k -j 8',
outarg, versarg, extarg, ratifiedarg, titlearg,
'NOTEOPTS="-a implementation-guide"',
specTargets)
if miscSrc != None and miscDst != None:
print('mkdir -p', miscDst)
print('cp', miscSrc + '/*.txt', miscDst + '/')
print('')
# Build all target documents
# repoDir = path to the Vulkan git repo containing the specs
# outDir = path to the output base directory in which targets are generated
def buildBranch(targetDir,
versions,
extensions,
ratified,
apititle,
xmlTargets,
specTargets,
repoDir,
outDir,
needRefSources = False):
# Directory with vk.xml and generation tools
xmlDir = repoDir + '/xml'
# Directory with spec sources
specDir = repoDir
# Directory containing misc. files to copy to registry.
# At present there are none, since GLSL extensions have moved to the
# GLSL repository and are redirected from the Vulkan registy website.
# These should be relative to repoDir and outDir, respectively
miscSrc = None
miscDst = None
buildRelease(targetDir,
versions,
extensions,
ratified,
outDir + '/' + targetDir,
apititle,
xmlDir, xmlTargets,
specDir, specTargets,
miscSrc, miscDst,
needRefSources)
# Commands to tag the git branches
# releaseNum = release number of this spec update, to tag the tree with
# tagdate = date (used to be used to tag the tree with)
def createTags(releaseNum, tagdate):
# Tag date in YYYYMMDD format
now = tagdate.strftime('%Y%m%d')
print('echo To tag the spec branch for this release, execute the command:')
print('echo git tag -a -m \\"Tag Vulkan API specification for 1.1.' +
releaseNum, 'release\\"', 'v1.1.' + releaseNum)