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