Fix missing dependency on sparse binds
[platform/upstream/VK-GL-CTS.git] / framework / qphelper / gen_release_info.py
1 # -*- coding: utf-8 -*-
2
3 #-------------------------------------------------------------------------
4 # drawElements Quality Program utilities
5 # --------------------------------------
6 #
7 # Copyright 2016 The Android Open Source Project
8 #
9 # Licensed under the Apache License, Version 2.0 (the "License");
10 # you may not use this file except in compliance with the License.
11 # You may obtain a copy of the License at
12 #
13 #      http://www.apache.org/licenses/LICENSE-2.0
14 #
15 # Unless required by applicable law or agreed to in writing, software
16 # distributed under the License is distributed on an "AS IS" BASIS,
17 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 # See the License for the specific language governing permissions and
19 # limitations under the License.
20 #
21 #-------------------------------------------------------------------------
22
23 import os
24 import subprocess
25 import sys
26 import argparse
27
28 def readFile (filename):
29         f = open(filename, 'rt')
30         d = f.read()
31         f.close()
32         return d
33
34 def writeFile (filename, data):
35         f = open(filename, 'wt')
36         f.write(data)
37         f.close()
38
39 def getHead (gitDir):
40         commit = subprocess.check_output(["git", "--git-dir", gitDir,
41                                                                           "rev-parse", "HEAD"])
42         return commit.decode().strip()
43
44 def makeReleaseInfo (name, id, glslname, spirvtoolsname, spirvheadersname):
45         return """
46 /* WARNING: auto-generated file, use {genFileName} to modify */
47
48 #define DEQP_RELEASE_NAME                               "{releaseName}"
49 #define DEQP_RELEASE_ID                                 {releaseId}
50 #define DEQP_RELEASE_GLSL_NAME                  "{glslReleaseName}"
51 #define DEQP_RELEASE_SPIRV_TOOLS_NAME   "{spirvToolsReleaseName}"
52 #define DEQP_RELEASE_SPIRV_HEADERS_NAME "{spirvHeadersReleaseName}"
53
54 """[1:].format(
55                 genFileName                             = os.path.basename(__file__),
56                 releaseName                             = name,
57                 releaseId                               = id,
58                 glslReleaseName                 = glslname,
59                 spirvToolsReleaseName   = spirvtoolsname,
60                 spirvHeadersReleaseName = spirvheadersname)
61
62 def parseArgs ():
63         parser = argparse.ArgumentParser(description="Generate release info for build")
64         parser.add_argument('--name', dest='releaseName', default=None, help="Release name")
65         parser.add_argument('--id', dest='releaseId', default=None, help="Release ID (must be C integer literal)")
66         parser.add_argument('--git', dest='git', action='store_true', default=False, help="Development build, use git HEAD to identify")
67         parser.add_argument('--git-dir', dest='gitDir', default=None, help="Use specific git dir for extracting info")
68         parser.add_argument('--glsl-git-dir', dest='glslGitDir', default=None, help="Use specific git dir for extracting glsl version info")
69         parser.add_argument('--glsl-spirvtools-dir', dest='spirvToolsGitDir', default=None, help="Use specific git dir for extracting spirv tools version info")
70         parser.add_argument('--glsl-spirvheaders-dir', dest='spirvHeadersGitDir', default=None, help="Use specific git dir for extracting spirv headers version info")
71         parser.add_argument('--out', dest='out', default=None, help="Output file")
72
73         args = parser.parse_args()
74
75         if (args.releaseName == None) != (args.releaseId == None):
76                 print("Both --name and --id must be specified")
77                 parser.print_help()
78                 sys.exit(-1)
79
80         if (args.releaseName != None) == args.git:
81                 print("Either --name and --id, or --git must be specified")
82                 parser.print_help()
83                 sys.exit(-1)
84
85         return args
86
87 if __name__ == "__main__":
88         curDir                                          = os.path.dirname(__file__)
89         defaultGitDir                           = os.path.normpath(os.path.join(curDir, "..", "..", ".git"))
90         defaultGlslGitDir                       = os.path.normpath(os.path.join(curDir, "..", "..", "external", "glslang", "src", ".git"))
91         defaultSpirvToolsGitDir         = os.path.normpath(os.path.join(curDir, "..", "..", "external", "spirv-tools", "src", ".git"))
92         defaultSpirvHeadersGitDir       = os.path.normpath(os.path.join(curDir, "..", "..", "external", "spirv-headers", "src", ".git"))
93         defaultDstFile                          = os.path.join(curDir, "qpReleaseInfo.inl")
94
95         args = parseArgs()
96
97         if args.git:
98                 gitDir                          = args.gitDir                           if args.gitDir                          != None else defaultGitDir
99                 head                            = getHead(gitDir)
100                 releaseName                     = "git-%s" % head
101                 releaseId                       = "0x%s" % head[0:8]
102         else:
103                 releaseName                     = args.releaseName
104                 releaseId                       = args.releaseId
105
106         if args.glslGitDir or os.path.exists(defaultGlslGitDir):
107                 glslGitDir                      = args.glslGitDir                       if args.glslGitDir                      != None else defaultGlslGitDir
108                 glslHead                        = getHead(glslGitDir)
109                 glslName                        = "git-%s" % glslHead
110         elif args.git:
111                 glslName                        = "unknown"
112         else:
113                 glslName                        = args.releaseName
114
115         if args.spirvToolsGitDir or os.path.exists(defaultSpirvToolsGitDir):
116                 spirvToolsGitDir        = args.spirvToolsGitDir         if args.spirvToolsGitDir        != None else defaultSpirvToolsGitDir
117                 spirvToolsHead          = getHead(spirvToolsGitDir)
118                 spirvToolsName          = "git-%s" % spirvToolsHead
119         elif args.git:
120                 spirvToolsName          = "unknown"
121         else:
122                 spirvToolsName          = args.releaseName
123
124         if args.spirvHeadersGitDir or os.path.exists(defaultSpirvHeadersGitDir):
125                 spirvHeadersGitDir      = args.spirvHeadersGitDir       if args.spirvHeadersGitDir      != None else defaultSpirvHeadersGitDir
126                 spirvHeadersHead        = getHead(spirvHeadersGitDir)
127                 spirvHeadersName        = "git-%s" % spirvHeadersHead
128         elif args.git:
129                 spirvHeadersName        = "unknown"
130         else:
131                 spirvHeadersName        = args.releaseName
132
133         releaseInfo     = makeReleaseInfo(releaseName, releaseId, glslName, spirvToolsName, spirvHeadersName)
134         dstFile         = args.out if args.out != None else defaultDstFile
135
136         writeFile(dstFile, releaseInfo)