1 # -*- coding: utf-8 -*-
3 #-------------------------------------------------------------------------
4 # drawElements Quality Program utilities
5 # --------------------------------------
7 # Copyright 2015 The Android Open Source Project
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
13 # http://www.apache.org/licenses/LICENSE-2.0
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.
21 #-------------------------------------------------------------------------
23 from ctsbuild.common import *
24 from ctsbuild.config import *
25 from ctsbuild.build import *
35 def __init__ (self, name, dirName, binName):
37 self.dirName = dirName
38 self.binName = binName
41 Module("dE-IT", "internal", "de-internal-tests"),
42 Module("dEQP-EGL", "egl", "deqp-egl"),
43 Module("dEQP-GLES2", "gles2", "deqp-gles2"),
44 Module("dEQP-GLES3", "gles3", "deqp-gles3"),
45 Module("dEQP-GLES31", "gles31", "deqp-gles31"),
46 Module("dEQP-VK", "../external/vulkancts/modules/vulkan", "deqp-vk"),
47 Module("dEQP-VKSC", "../external/vulkancts/modules/vulkan", "deqp-vksc"),
50 DEFAULT_BUILD_DIR = os.path.join(tempfile.gettempdir(), "deqp-caselists", "{targetName}-{buildType}")
51 DEFAULT_TARGET = "null"
53 def getModuleByName (name):
54 for module in MODULES:
55 if module.name == name:
58 raise Exception("Unknown module %s" % name)
60 def getBuildConfig (buildPathPtrn, targetName, buildType):
61 buildPath = buildPathPtrn.format(
62 targetName = targetName,
63 buildType = buildType)
65 return BuildConfig(buildPath, buildType, ["-DDEQP_TARGET=%s" % targetName])
67 def getModulesPath (buildCfg):
68 return os.path.join(buildCfg.getBuildDir(), "modules")
70 def getBuiltModules (buildCfg):
72 modulesDir = getModulesPath(buildCfg)
74 for module in MODULES:
75 fullPath = os.path.join(modulesDir, module.dirName)
76 if os.path.exists(fullPath) and os.path.isdir(fullPath):
77 modules.append(module)
81 def getCaseListFileName (module, caseListType):
82 return "%s-cases.%s" % (module.name, caseListType)
84 def getCaseListPath (buildCfg, module, caseListType):
85 return os.path.join(getModulesPath(buildCfg), module.dirName, getCaseListFileName(module, caseListType))
87 def genCaseList (buildCfg, generator, module, caseListType):
88 workDir = os.path.join(getModulesPath(buildCfg), module.dirName)
90 pushWorkingDir(workDir)
93 binPath = generator.getBinaryPath(buildCfg.getBuildType(), os.path.join(".", module.binName))
94 execute([binPath, "--deqp-runmode=%s-caselist" % caseListType])
98 def genAndCopyCaseList (buildCfg, generator, module, dstDir, caseListType):
99 caseListFile = getCaseListFileName(module, caseListType)
100 srcPath = getCaseListPath(buildCfg, module, caseListType)
101 dstPath = os.path.join(dstDir, caseListFile)
103 if os.path.exists(srcPath):
106 genCaseList(buildCfg, generator, module, caseListType)
108 if not os.path.exists(srcPath):
109 raise Exception("%s not generated" % srcPath)
111 shutil.copyfile(srcPath, dstPath)
114 parser = argparse.ArgumentParser(description = "Build test case lists",
115 formatter_class=argparse.ArgumentDefaultsHelpFormatter)
116 parser.add_argument("-b",
119 default=DEFAULT_BUILD_DIR,
120 help="Temporary build directory")
121 parser.add_argument("-t",
126 parser.add_argument("-c",
129 default=DEFAULT_TARGET,
130 help="dEQP build target")
131 parser.add_argument("--case-list-type",
134 help="Case list type (xml, txt)")
135 parser.add_argument("-m",
138 help="Comma-separated list of modules to update")
139 parser.add_argument("dst",
140 help="Destination directory for test case lists")
141 return parser.parse_args()
143 if __name__ == "__main__":
146 generator = ANY_GENERATOR
147 buildCfg = getBuildConfig(args.buildDir, args.targetName, args.buildType)
152 for m in args.modules.split(","):
153 modules.append(getModuleByName(m))
156 build(buildCfg, generator, [m.binName for m in modules])
158 build(buildCfg, generator)
159 modules = getBuiltModules(buildCfg)
161 for module in modules:
162 print("Generating test case list for %s" % module.name)
163 genAndCopyCaseList(buildCfg, generator, module, args.dst, args.caseListType)