You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
4.8 KiB
162 lines
4.8 KiB
# -*- 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)
|
|
|