1# -*- coding: utf-8 -*- 2 3#------------------------------------------------------------------------- 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 23import os 24import sys 25import string 26import argparse 27import tempfile 28import shutil 29 30sys.path.append(os.path.join(os.path.dirname(__file__), "..", "..", "..", "scripts")) 31 32from build.common import * 33from build.config import * 34from build.build import * 35 36 37class Module: 38 def __init__ (self, name, api): 39 self.name = name 40 self.api = api 41 42MODULES = [ 43 Module("dEQP-EGL", "EGL"), 44 Module("dEQP-GLES2", "GLES2"), 45 Module("dEQP-GLES3", "GLES3"), 46 Module("dEQP-GLES31", "GLES31"), 47 Module("KHR-GLES3", "GLES3"), 48 Module("KHR-GLES2", "GLES2"), 49 Module("KHR-GLES31", "GLES31"), 50 Module("KHR-GLES32", "GLES32"), 51 Module("KHR-NOCTX-ES2", "GLES2"), 52 Module("KHR-NOCTX-ES32","GLES32"), 53 Module("GTF-GLES2", "GLES2" ), 54 Module("GTF-GLES3", "GLES3" ), 55 Module("GTF-GLES31", "GLES31"), 56 Module("KHR-GL46", "GL46"), 57 Module("KHR-GL45", "GL45"), 58 Module("KHR-GL44", "GL44"), 59 Module("KHR-GL43", "GL43"), 60 Module("KHR-GL42", "GL42"), 61 Module("KHR-GL41", "GL41"), 62 Module("KHR-GL40", "GL40"), 63 Module("KHR-GL33", "GL33"), 64 Module("KHR-GL32", "GL32"), 65 Module("KHR-GL31", "GL31"), 66 Module("KHR-GL30", "GL30"), 67 Module("GTF-GL46", "GL46"), 68 Module("GTF-GL45", "GL45"), 69 Module("GTF-GL44", "GL44"), 70 Module("GTF-GL43", "GL43"), 71 Module("GTF-GL42", "GL42"), 72 Module("GTF-GL41", "GL41"), 73 Module("GTF-GL40", "GL40"), 74 Module("GTF-GL33", "GL33"), 75 Module("GTF-GL32", "GL32"), 76 Module("GTF-GL31", "GL31"), 77 Module("GTF-GL30", "GL30"), 78 Module("KHR-NOCTX-GL30","GL30"), 79 Module("KHR-NOCTX-GL40","GL40"), 80 Module("KHR-NOCTX-GL43","GL43"), 81 Module("KHR-NOCTX-GL45","GL45"), 82] 83GLCTS_BIN_NAME = "glcts" 84GLCTS_DIR_NAME = "external/openglcts/modules/" 85DEFAULT_BUILD_DIR = os.path.join(tempfile.gettempdir(), "deqp-caselists", "{targetName}-{buildType}") 86DEFAULT_TARGET = "null" 87 88def getModuleByName (name): 89 for module in MODULES: 90 if module.name == name: 91 return module 92 else: 93 raise Exception("Unknown module %s" % name) 94 95def getBuildConfig (buildPathPtrn, targetName, buildType): 96 buildPath = buildPathPtrn.format( 97 targetName = targetName, 98 buildType = buildType) 99 100 return BuildConfig(buildPath, buildType, ["-DDEQP_TARGET=%s" % targetName]) 101 102def getModulesPath (buildCfg): 103 return os.path.join(buildCfg.getBuildDir(), GLCTS_DIR_NAME) 104 105def getCaseListFileName (module, caseListType): 106 mname = module.name 107 if mname == "KHR-NOCTX-ES2" or mname == "KHR-NOCTX-ES32" or mname == "KHR-NOCTX-GL30" or mname == "KHR-NOCTX-GL40" or mname == "KHR-NOCTX-GL43" or mname == "KHR-NOCTX-GL45": 108 mname = "KHR-NoContext" 109 return "%s-cases.%s" % (mname, caseListType) 110 111def getCaseListPath (buildCfg, module, caseListType): 112 workDir = getModulesPath(buildCfg) 113 114 return os.path.join(workDir, getCaseListFileName(module, caseListType)) 115 116def genCaseList (buildCfg, generator, caseListType): 117 workDir = getModulesPath(buildCfg) 118 119 pushWorkingDir(workDir) 120 121 try: 122 binPath = generator.getBinaryPath(buildCfg.getBuildType(), os.path.join(".", GLCTS_BIN_NAME)) 123 execute([binPath, "--deqp-runmode=%s-caselist" % caseListType]) 124 finally: 125 popWorkingDir() 126 127def genAndCopyCaseList (buildCfg, generator, module, dstDir, caseListType): 128 caseListFile = getCaseListFileName(module, caseListType) 129 srcPath = getCaseListPath(buildCfg, module, caseListType) 130 dstPath = os.path.join(dstDir, caseListFile) 131 132 if os.path.exists(srcPath): 133 os.remove(srcPath) 134 135 genCaseList(buildCfg, generator, module, caseListType) 136 137 if not os.path.exists(srcPath): 138 raise Exception("%s not generated" % srcPath) 139 140 shutil.copyfile(srcPath, dstPath) 141