blob: 329eaaa2d96d558ab47a1f44688eef6e73202683 [file] [log] [blame]
Pyry Haulosc15aafb2015-01-07 11:50:55 -08001# -*- coding: utf-8 -*-
2
Pyry Haulos484aa202015-04-02 11:08:39 -07003#-------------------------------------------------------------------------
4# drawElements Quality Program utilities
5# --------------------------------------
6#
7# Copyright 2015 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
Pyry Haulosc15aafb2015-01-07 11:50:55 -080023from build.common import *
24from build.config import *
25from build.build import *
26
27import os
28import sys
29import string
30import argparse
31import tempfile
32import shutil
33
34class Module:
35 def __init__ (self, name, dirName, binName):
36 self.name = name
37 self.dirName = dirName
38 self.binName = binName
39
40MODULES = [
Pyry Haulos846cc3c2015-06-29 14:28:58 -070041 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"),
Pyry Haulosc15aafb2015-01-07 11:50:55 -080047]
48
49DEFAULT_BUILD_DIR = os.path.join(tempfile.gettempdir(), "deqp-caselists", "{targetName}-{buildType}")
50DEFAULT_TARGET = "null"
51
52def getModuleByName (name):
53 for module in MODULES:
54 if module.name == name:
55 return module
56 else:
57 raise Exception("Unknown module %s" % name)
58
59def getBuildConfig (buildPathPtrn, targetName, buildType):
60 buildPath = buildPathPtrn.format(
61 targetName = targetName,
62 buildType = buildType)
63
64 return BuildConfig(buildPath, buildType, ["-DDEQP_TARGET=%s" % targetName])
65
66def getModulesPath (buildCfg):
67 return os.path.join(buildCfg.getBuildDir(), "modules")
68
69def getBuiltModules (buildCfg):
70 modules = []
71 modulesDir = getModulesPath(buildCfg)
Pyry Haulosc15aafb2015-01-07 11:50:55 -080072
Pyry Haulos3eedc582015-08-04 12:46:55 -070073 for module in MODULES:
74 fullPath = os.path.join(modulesDir, module.dirName)
75 if os.path.exists(fullPath) and os.path.isdir(fullPath):
76 modules.append(module)
Pyry Haulosc15aafb2015-01-07 11:50:55 -080077
78 return modules
79
Pyry Haulos484aa202015-04-02 11:08:39 -070080def getCaseListFileName (module, caseListType):
81 return "%s-cases.%s" % (module.name, caseListType)
Pyry Haulosc15aafb2015-01-07 11:50:55 -080082
Pyry Haulos484aa202015-04-02 11:08:39 -070083def getCaseListPath (buildCfg, module, caseListType):
84 return os.path.join(getModulesPath(buildCfg), module.dirName, getCaseListFileName(module, caseListType))
85
86def genCaseList (buildCfg, generator, module, caseListType):
Pyry Haulosc15aafb2015-01-07 11:50:55 -080087 workDir = os.path.join(getModulesPath(buildCfg), module.dirName)
88
89 pushWorkingDir(workDir)
90
91 try:
92 binPath = generator.getBinaryPath(buildCfg.getBuildType(), os.path.join(".", module.binName))
Pyry Haulos484aa202015-04-02 11:08:39 -070093 execute([binPath, "--deqp-runmode=%s-caselist" % caseListType])
Pyry Haulosc15aafb2015-01-07 11:50:55 -080094 finally:
95 popWorkingDir()
96
Pyry Haulos484aa202015-04-02 11:08:39 -070097def genAndCopyCaseList (buildCfg, generator, module, dstDir, caseListType):
98 caseListFile = getCaseListFileName(module, caseListType)
99 srcPath = getCaseListPath(buildCfg, module, caseListType)
Pyry Haulosc15aafb2015-01-07 11:50:55 -0800100 dstPath = os.path.join(dstDir, caseListFile)
101
102 if os.path.exists(srcPath):
103 os.remove(srcPath)
104
Pyry Haulos484aa202015-04-02 11:08:39 -0700105 genCaseList(buildCfg, generator, module, caseListType)
Pyry Haulosc15aafb2015-01-07 11:50:55 -0800106
107 if not os.path.exists(srcPath):
108 raise Exception("%s not generated" % srcPath)
109
110 shutil.copyfile(srcPath, dstPath)
111
112def parseArgs ():
113 parser = argparse.ArgumentParser(description = "Build test case lists",
114 formatter_class=argparse.ArgumentDefaultsHelpFormatter)
115 parser.add_argument("-b",
116 "--build-dir",
117 dest="buildDir",
118 default=DEFAULT_BUILD_DIR,
119 help="Temporary build directory")
120 parser.add_argument("-t",
121 "--build-type",
122 dest="buildType",
123 default="Debug",
124 help="Build type")
125 parser.add_argument("-c",
126 "--deqp-target",
127 dest="targetName",
128 default=DEFAULT_TARGET,
129 help="dEQP build target")
Pyry Haulos484aa202015-04-02 11:08:39 -0700130 parser.add_argument("--case-list-type",
131 dest="caseListType",
132 default="xml",
133 help="Case list type (xml, txt)")
Pyry Haulosc15aafb2015-01-07 11:50:55 -0800134 parser.add_argument("-m",
135 "--modules",
136 dest="modules",
137 help="Comma-separated list of modules to update")
138 parser.add_argument("dst",
139 help="Destination directory for test case lists")
140 return parser.parse_args()
141
142if __name__ == "__main__":
143 args = parseArgs()
144
145 generator = ANY_GENERATOR
146 buildCfg = getBuildConfig(args.buildDir, args.targetName, args.buildType)
147 modules = None
148
149 if args.modules:
150 modules = []
151 for m in args.modules.split(","):
152 modules.append(getModuleByName(m))
153
154 if modules:
155 build(buildCfg, generator, [m.binName for m in modules])
156 else:
157 build(buildCfg, generator)
158 modules = getBuiltModules(buildCfg)
159
160 for module in modules:
161 print "Generating test case list for %s" % module.name
Pyry Haulos484aa202015-04-02 11:08:39 -0700162 genAndCopyCaseList(buildCfg, generator, module, args.dst, args.caseListType)