# -*- coding: utf-8 -*- #------------------------------------------------------------------------- # drawElements Quality Program utilities # -------------------------------------- # # Copyright 2015 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # #------------------------------------------------------------------------- from build.common import * from build.config import * from build.build import * import os import sys import string import argparse import tempfile import shutil class Module: def __init__ (self, name, dirName, binName): self.name = name self.dirName = dirName self.binName = binName MODULES = [ Module("dE-IT", "internal", "de-internal-tests"), Module("dEQP-EGL", "egl", "deqp-egl"), Module("dEQP-GLES2", "gles2", "deqp-gles2"), Module("dEQP-GLES3", "gles3", "deqp-gles3"), Module("dEQP-GLES31", "gles31", "deqp-gles31"), Module("dEQP-VK", "../external/vulkancts/modules/vulkan", "deqp-vk"), ] DEFAULT_BUILD_DIR = os.path.join(tempfile.gettempdir(), "deqp-caselists", "{targetName}-{buildType}") DEFAULT_TARGET = "null" def getModuleByName (name): for module in MODULES: if module.name == name: return module else: raise Exception("Unknown module %s" % name) def getBuildConfig (buildPathPtrn, targetName, buildType): buildPath = buildPathPtrn.format( targetName = targetName, buildType = buildType) return BuildConfig(buildPath, buildType, ["-DDEQP_TARGET=%s" % targetName]) def getModulesPath (buildCfg): return os.path.join(buildCfg.getBuildDir(), "modules") def getBuiltModules (buildCfg): modules = [] modulesDir = getModulesPath(buildCfg) for module in MODULES: fullPath = os.path.join(modulesDir, module.dirName) if os.path.exists(fullPath) and os.path.isdir(fullPath): modules.append(module) return modules def getCaseListFileName (module, caseListType): return "%s-cases.%s" % (module.name, caseListType) def getCaseListPath (buildCfg, module, caseListType): return os.path.join(getModulesPath(buildCfg), module.dirName, getCaseListFileName(module, caseListType)) def genCaseList (buildCfg, generator, module, caseListType): workDir = os.path.join(getModulesPath(buildCfg), module.dirName) pushWorkingDir(workDir) try: binPath = generator.getBinaryPath(buildCfg.getBuildType(), os.path.join(".", module.binName)) execute([binPath, "--deqp-runmode=%s-caselist" % caseListType]) finally: popWorkingDir() def genAndCopyCaseList (buildCfg, generator, module, dstDir, caseListType): caseListFile = getCaseListFileName(module, caseListType) srcPath = getCaseListPath(buildCfg, module, caseListType) dstPath = os.path.join(dstDir, caseListFile) if os.path.exists(srcPath): os.remove(srcPath) genCaseList(buildCfg, generator, module, caseListType) if not os.path.exists(srcPath): raise Exception("%s not generated" % srcPath) shutil.copyfile(srcPath, dstPath) def parseArgs (): parser = argparse.ArgumentParser(description = "Build test case lists", formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument("-b", "--build-dir", dest="buildDir", default=DEFAULT_BUILD_DIR, help="Temporary build directory") parser.add_argument("-t", "--build-type", dest="buildType", default="Debug", help="Build type") parser.add_argument("-c", "--deqp-target", dest="targetName", default=DEFAULT_TARGET, help="dEQP build target") parser.add_argument("--case-list-type", dest="caseListType", default="xml", help="Case list type (xml, txt)") parser.add_argument("-m", "--modules", dest="modules", help="Comma-separated list of modules to update") parser.add_argument("dst", help="Destination directory for test case lists") return parser.parse_args() if __name__ == "__main__": args = parseArgs() generator = ANY_GENERATOR buildCfg = getBuildConfig(args.buildDir, args.targetName, args.buildType) modules = None if args.modules: modules = [] for m in args.modules.split(","): modules.append(getModuleByName(m)) if modules: build(buildCfg, generator, [m.binName for m in modules]) else: build(buildCfg, generator) modules = getBuiltModules(buildCfg) for module in modules: print("Generating test case list for %s" % module.name) genAndCopyCaseList(buildCfg, generator, module, args.dst, args.caseListType)