• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
23import os
24import subprocess
25import sys
26import argparse
27
28def readFile (filename):
29	f = open(filename, 'rt')
30	d = f.read()
31	f.close()
32	return d
33
34def writeFile (filename, data):
35	f = open(filename, 'wt')
36	f.write(data)
37	f.close()
38
39def getDescribe (gitDir):
40	commit = subprocess.check_output(["git", "--git-dir", gitDir,
41	                                  "describe", "--always", "--long", "--abbrev=40"])
42	return commit.decode().strip()
43
44def getHead (gitDir):
45	commit = subprocess.check_output(["git", "--git-dir", gitDir,
46									  "rev-parse", "HEAD"])
47	return commit.decode().strip()
48
49def makeReleaseInfo (name, id, glslname, spirvtoolsname, spirvheadersname):
50	return """
51/* WARNING: auto-generated file, use {genFileName} to modify */
52
53#define DEQP_RELEASE_NAME				"{releaseName}"
54#define DEQP_RELEASE_ID					{releaseId}
55#define DEQP_RELEASE_GLSL_NAME			"{glslReleaseName}"
56#define DEQP_RELEASE_SPIRV_TOOLS_NAME	"{spirvToolsReleaseName}"
57#define DEQP_RELEASE_SPIRV_HEADERS_NAME	"{spirvHeadersReleaseName}"
58
59"""[1:].format(
60		genFileName				= os.path.basename(__file__),
61		releaseName				= name,
62		releaseId				= id,
63		glslReleaseName			= glslname,
64		spirvToolsReleaseName	= spirvtoolsname,
65		spirvHeadersReleaseName	= spirvheadersname)
66
67def parseArgs ():
68	parser = argparse.ArgumentParser(description="Generate release info for build")
69	parser.add_argument('--name', dest='releaseName', default=None, help="Release name")
70	parser.add_argument('--id', dest='releaseId', default=None, help="Release ID (must be C integer literal)")
71	parser.add_argument('--git', dest='git', action='store_true', default=False, help="Development build, use git HEAD to identify")
72	parser.add_argument('--git-dir', dest='gitDir', default=None, help="Use specific git dir for extracting info")
73	parser.add_argument('--glsl-git-dir', dest='glslGitDir', default=None, help="Use specific git dir for extracting glsl version info")
74	parser.add_argument('--glsl-spirvtools-dir', dest='spirvToolsGitDir', default=None, help="Use specific git dir for extracting spirv tools version info")
75	parser.add_argument('--glsl-spirvheaders-dir', dest='spirvHeadersGitDir', default=None, help="Use specific git dir for extracting spirv headers version info")
76	parser.add_argument('--out', dest='out', default=None, help="Output file")
77
78	args = parser.parse_args()
79
80	if (args.releaseName == None) != (args.releaseId == None):
81		print("Both --name and --id must be specified")
82		parser.print_help()
83		sys.exit(-1)
84
85	if (args.releaseName != None) == args.git:
86		print("Either --name and --id, or --git must be specified")
87		parser.print_help()
88		sys.exit(-1)
89
90	return args
91
92if __name__ == "__main__":
93	curDir						= os.path.dirname(__file__)
94	defaultGitDir				= os.path.normpath(os.path.join(curDir, "..", "..", ".git"))
95	defaultGlslGitDir			= os.path.normpath(os.path.join(curDir, "..", "..", "external", "glslang", "src", ".git"))
96	defaultSpirvToolsGitDir		= os.path.normpath(os.path.join(curDir, "..", "..", "external", "spirv-tools", "src", ".git"))
97	defaultSpirvHeadersGitDir	= os.path.normpath(os.path.join(curDir, "..", "..", "external", "spirv-headers", "src", ".git"))
98	defaultDstFile				= os.path.join(curDir, "qpReleaseInfo.inl")
99
100	args = parseArgs()
101
102	if args.git:
103		gitDir				= args.gitDir				if args.gitDir				!= None else defaultGitDir
104		head				= getHead(gitDir)
105		releaseName			= getDescribe(gitDir)
106		releaseId			= "0x%s" % head[0:8]
107	else:
108		releaseName			= args.releaseName
109		releaseId			= args.releaseId
110
111	if args.glslGitDir or os.path.exists(defaultGlslGitDir):
112		glslGitDir			= args.glslGitDir			if args.glslGitDir			!= None else defaultGlslGitDir
113		glslHead			= getHead(glslGitDir)
114		glslName			= "git-%s" % glslHead
115	elif args.git:
116		glslName			= "unknown"
117	else:
118		glslName			= args.releaseName
119
120	if args.spirvToolsGitDir or os.path.exists(defaultSpirvToolsGitDir):
121		spirvToolsGitDir	= args.spirvToolsGitDir		if args.spirvToolsGitDir	!= None else defaultSpirvToolsGitDir
122		spirvToolsHead		= getHead(spirvToolsGitDir)
123		spirvToolsName		= "git-%s" % spirvToolsHead
124	elif args.git:
125		spirvToolsName		= "unknown"
126	else:
127		spirvToolsName		= args.releaseName
128
129	if args.spirvHeadersGitDir or os.path.exists(defaultSpirvHeadersGitDir):
130		spirvHeadersGitDir	= args.spirvHeadersGitDir	if args.spirvHeadersGitDir	!= None else defaultSpirvHeadersGitDir
131		spirvHeadersHead	= getHead(spirvHeadersGitDir)
132		spirvHeadersName	= "git-%s" % spirvHeadersHead
133	elif args.git:
134		spirvHeadersName	= "unknown"
135	else:
136		spirvHeadersName	= args.releaseName
137
138	releaseInfo	= makeReleaseInfo(releaseName, releaseId, glslName, spirvToolsName, spirvHeadersName)
139	dstFile		= args.out if args.out != None else defaultDstFile
140
141	writeFile(dstFile, releaseInfo)
142