• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/python3
2#
3# Copyright 2016-2021 The Khronos Group Inc.
4#
5# SPDX-License-Identifier: Apache-2.0
6
7import argparse
8import subprocess
9import sys
10
11from genspec import *
12
13# Eventually, these may be defined by the extdependency module
14allVersions = [ 'VK_VERSION_1_0', 'VK_VERSION_1_1', 'VK_VERSION_1_2' ]
15Version1_1 = [ 'VK_VERSION_1_0', 'VK_VERSION_1_1' ]
16Version1_0 = [ 'VK_VERSION_1_0' ]
17
18if __name__ == '__main__':
19    parser = argparse.ArgumentParser()
20
21    parser.add_argument('-internal', action='store_true',
22                        help='Generate internal build, not public')
23    parser.add_argument('-norefpages', action='store_true',
24                        help='Do not generate refpages')
25    parser.add_argument('-singlerefpage', action='store_true',
26                        help='Generate single-page refpage - NOT SUPPORTED')
27    parser.add_argument('-chunked', action='store_true',
28                        help='Generate chunked HTML outputs')
29    parser.add_argument('-pdf', action='store_true',
30                        help='Generate PDF outputs')
31
32    parser.add_argument('-nov12', action='store_false', dest='v12',
33                        help='Suppress Vulkan 1.2 targets')
34    parser.add_argument('-v11', action='store_true',
35                        help='Generate Vulkan 1.1 targets')
36    parser.add_argument('-v10', action='store_true',
37                        help='Generate Vulkan 1.0 targets')
38
39    parser.add_argument('-nocorespec', action='store_false', dest='corespec',
40                        help='Do not generate core API-only targets')
41    parser.add_argument('-nokhrspec', action='store_false', dest='khrspec',
42                        help='Do not generate core API + KHR extensions-only targets')
43    parser.add_argument('-noallspec', action='store_false', dest='allspec',
44                        help='Do not generate full API + all extensions targets')
45
46    parser.add_argument('-registry', action='store',
47                        default=None,
48                        help='Path to API XML registry file specifying version and extension dependencies')
49    parser.add_argument('-apiname', action='store',
50                        default=None,
51                        help='API name to generate')
52
53    parser.add_argument('-repodir', action='store', dest='repoDir',
54                        default=None,
55                        help='Set the repository directory to build from (overrides defaults)')
56    parser.add_argument('-outdir', action='store', dest='outDir',
57                        default=None,
58                        help='Set the output directory to build into (overrides defaults)')
59
60    args = parser.parse_args()
61
62    # Look for scripts/extdependency.py
63    # This requires makeSpec to be invoked from the repository root, but we
64    # could derive that path.
65    sys.path.insert(0, 'scripts')
66    from extdependency import ApiDependencies
67
68    deps = ApiDependencies(args.registry, args.apiname)
69
70    allExts = deps.allExtensions()
71    khrExts = deps.khrExtensions()
72
73    if args.internal:
74        # For internal build & pseudo-release
75        if args.repoDir == None:
76            args.repoDir = '/home/tree/git/vulkan'
77        if args.outDir == None:
78            args.outDir = '/home/tree/git/vulkan/out'
79    else:
80        # For public release
81        if args.repoDir == None:
82            args.repoDir = '/home/tree/git/Vulkan-Docs'
83        if args.outDir == None:
84            args.outDir = '/home/tree/git/registry/vulkan/specs'
85
86    refPageTargets = ''
87
88    if not args.norefpages:
89        # Generate separate reference pages
90        refPageTargets += ' manhtmlpages'
91
92    if args.singlerefpage:
93        # Generate single-page refpage.
94        refPageTargets += ' manhtml'
95        if args.pdf:
96            refPageTargets += ' manpdf'
97        print('echo Info: single-page refpage targets are NOT SUPPORTED')
98
99    specTargets = ' html'
100    if args.chunked:
101        specTargets += ' chunked'
102    if args.pdf:
103        specTargets += ' pdf'
104
105    print('echo Info: Building release from', args.repoDir, 'to', args.outDir)
106    print('echo Info: Building spec targets', specTargets)
107    print('')
108
109    # Current Vulkan 1.2 specs
110    if args.v12:
111        if args.allspec:
112            # Build ref pages and validusage targets only for 1.2 + all exts
113            # Formerly set xmlTargets = 'clobber install', but we no longer
114            # generate headers in the registry tree.
115            buildBranch(targetDir = '1.2-extensions',
116                        versions = allVersions,
117                        extensions = allExts,
118                        ratified = False,
119                        apititle = '(with all registered Vulkan extensions)',
120                        specTargets = specTargets + ' validusage' + refPageTargets,
121                        repoDir = args.repoDir,
122                        outDir = args.outDir)
123
124        if args.khrspec:
125            buildBranch(targetDir = '1.2-khr-extensions',
126                        versions = allVersions,
127                        extensions = khrExts,
128                        ratified = True,
129                        apititle = '(with KHR extensions)',
130                        specTargets = specTargets,
131                        repoDir = args.repoDir,
132                        outDir = args.outDir)
133
134        if args.corespec:
135            # Build style guide and registry documentation targets only for 1.2
136            # + no extensions.
137            buildBranch(targetDir = '1.2',
138                        versions = allVersions,
139                        extensions = None,
140                        ratified = True,
141                        apititle = None,
142                        specTargets = specTargets + ' styleguide registry',
143                        repoDir = args.repoDir,
144                        outDir = args.outDir,
145                        needRefSources = True)
146
147    # Vulkan 1.1 specs
148    if args.v11:
149        if args.allspec:
150            buildBranch(targetDir = '1.1-extensions',
151                        versions = Version1_1,
152                        extensions = allExts,
153                        ratified = False,
154                        apititle = '(with all registered Vulkan extensions)',
155                        specTargets = specTargets,
156                        repoDir = args.repoDir,
157                        outDir = args.outDir)
158
159        if args.khrspec:
160            buildBranch(targetDir = '1.1-khr-extensions',
161                        versions = Version1_1,
162                        extensions = khrExts,
163                        ratified = True,
164                        apititle = '(with KHR extensions)',
165                        specTargets = specTargets,
166                        repoDir = args.repoDir,
167                        outDir = args.outDir)
168
169        if args.corespec:
170            buildBranch(targetDir = '1.1',
171                        versions = Version1_1,
172                        extensions = None,
173                        ratified = True,
174                        apititle = None,
175                        specTargets = specTargets,
176                        repoDir = args.repoDir,
177                        outDir = args.outDir)
178    else:
179        print('echo Info: Not building 1.1 specs yet')
180
181
182    # Vulkan 1.0 specs.
183    if args.v10:
184        if args.allspec:
185            buildBranch(targetDir = '1.0-extensions',
186                        versions = Version1_0,
187                        extensions = allExts,
188                        ratified = False,
189                        apititle = '(with all registered Vulkan extensions)',
190                        specTargets = specTargets,
191                        repoDir = args.repoDir,
192                        outDir = args.outDir)
193
194        if args.khrspec:
195            buildBranch(targetDir = '1.0-wsi_extensions',
196                        versions = Version1_0,
197                        extensions = khrExts,
198                        ratified = True,
199                        apititle = '(with KHR extensions)',
200                        specTargets = specTargets,
201                        repoDir = args.repoDir,
202                        outDir = args.outDir)
203
204        if args.corespec:
205            buildBranch(targetDir = '1.0',
206                        versions = Version1_0,
207                        extensions = None,
208                        ratified = True,
209                        apititle = None,
210                        specTargets = specTargets,
211                        repoDir = args.repoDir,
212                        outDir = args.outDir)
213    else:
214        print('echo Info: Not building 1.0 specs yet')
215
216    print('echo Info: post-generation cleanup')
217    createTags(releaseNum(), buildOnFriday())
218