1*35238bceSAndroid Build Coastguard Worker# -*- coding: utf-8 -*- 2*35238bceSAndroid Build Coastguard Worker 3*35238bceSAndroid Build Coastguard Worker#------------------------------------------------------------------------- 4*35238bceSAndroid Build Coastguard Worker# drawElements Quality Program utilities 5*35238bceSAndroid Build Coastguard Worker# -------------------------------------- 6*35238bceSAndroid Build Coastguard Worker# 7*35238bceSAndroid Build Coastguard Worker# Copyright 2015 The Android Open Source Project 8*35238bceSAndroid Build Coastguard Worker# 9*35238bceSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 10*35238bceSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 11*35238bceSAndroid Build Coastguard Worker# You may obtain a copy of the License at 12*35238bceSAndroid Build Coastguard Worker# 13*35238bceSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 14*35238bceSAndroid Build Coastguard Worker# 15*35238bceSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 16*35238bceSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 17*35238bceSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18*35238bceSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 19*35238bceSAndroid Build Coastguard Worker# limitations under the License. 20*35238bceSAndroid Build Coastguard Worker# 21*35238bceSAndroid Build Coastguard Worker#------------------------------------------------------------------------- 22*35238bceSAndroid Build Coastguard Worker 23*35238bceSAndroid Build Coastguard Workerimport os 24*35238bceSAndroid Build Coastguard Workerimport sys 25*35238bceSAndroid Build Coastguard Workerimport shutil 26*35238bceSAndroid Build Coastguard Workerimport random 27*35238bceSAndroid Build Coastguard Workerimport subprocess 28*35238bceSAndroid Build Coastguard Worker 29*35238bceSAndroid Build Coastguard Workerdef die (msg): 30*35238bceSAndroid Build Coastguard Worker print(msg) 31*35238bceSAndroid Build Coastguard Worker exit(-1) 32*35238bceSAndroid Build Coastguard Worker 33*35238bceSAndroid Build Coastguard Workerdef shellquote(s): 34*35238bceSAndroid Build Coastguard Worker return '"%s"' % s.replace('\\', '\\\\').replace('"', '\"').replace('$', '\$').replace('`', '\`') 35*35238bceSAndroid Build Coastguard Worker 36*35238bceSAndroid Build Coastguard Workerdef execute (args, workDir = None): 37*35238bceSAndroid Build Coastguard Worker curPath = os.getcwd() 38*35238bceSAndroid Build Coastguard Worker if workDir != None: 39*35238bceSAndroid Build Coastguard Worker os.chdir(workDir) 40*35238bceSAndroid Build Coastguard Worker retcode = subprocess.call(args) 41*35238bceSAndroid Build Coastguard Worker os.chdir(curPath) 42*35238bceSAndroid Build Coastguard Worker if retcode != 0: 43*35238bceSAndroid Build Coastguard Worker raise Exception("Failed to execute %s, got %d" % (str(args), retcode)) 44*35238bceSAndroid Build Coastguard Worker 45*35238bceSAndroid Build Coastguard Workerclass Config: 46*35238bceSAndroid Build Coastguard Worker def __init__ (self, name, srcPath, buildPath, genParams, buildParams, testBinaryName, executor = 'executor', execserver = 'execserver', junitTool = 'testlog-to-junit'): 47*35238bceSAndroid Build Coastguard Worker self.name = name 48*35238bceSAndroid Build Coastguard Worker self.srcPath = srcPath 49*35238bceSAndroid Build Coastguard Worker self.buildPath = buildPath 50*35238bceSAndroid Build Coastguard Worker self.genParams = genParams 51*35238bceSAndroid Build Coastguard Worker self.buildParams = buildParams 52*35238bceSAndroid Build Coastguard Worker self.testBinaryName = testBinaryName 53*35238bceSAndroid Build Coastguard Worker self.executor = executor 54*35238bceSAndroid Build Coastguard Worker self.execserver = execserver 55*35238bceSAndroid Build Coastguard Worker self.junitTool = junitTool 56*35238bceSAndroid Build Coastguard Worker 57*35238bceSAndroid Build Coastguard Workerdef initBuildDir (config): 58*35238bceSAndroid Build Coastguard Worker if os.path.exists(config.buildPath): 59*35238bceSAndroid Build Coastguard Worker shutil.rmtree(config.buildPath) 60*35238bceSAndroid Build Coastguard Worker 61*35238bceSAndroid Build Coastguard Worker os.makedirs(config.buildPath) 62*35238bceSAndroid Build Coastguard Worker execute(["cmake", os.path.realpath(config.srcPath)] + config.genParams, workDir = config.buildPath) 63*35238bceSAndroid Build Coastguard Worker 64*35238bceSAndroid Build Coastguard Workerdef prepareBuildDir (config): 65*35238bceSAndroid Build Coastguard Worker # If build dir exists, try to refresh 66*35238bceSAndroid Build Coastguard Worker if os.path.exists(config.buildPath): 67*35238bceSAndroid Build Coastguard Worker try: 68*35238bceSAndroid Build Coastguard Worker execute(["cmake", "."], workDir = config.buildPath) 69*35238bceSAndroid Build Coastguard Worker except: 70*35238bceSAndroid Build Coastguard Worker print("WARNING: Failed to refresh build dir, recreating") 71*35238bceSAndroid Build Coastguard Worker initBuildDir(config) 72*35238bceSAndroid Build Coastguard Worker else: 73*35238bceSAndroid Build Coastguard Worker initBuildDir(config) 74*35238bceSAndroid Build Coastguard Worker 75*35238bceSAndroid Build Coastguard Workerdef build (config): 76*35238bceSAndroid Build Coastguard Worker prepareBuildDir(config) 77*35238bceSAndroid Build Coastguard Worker execute(["cmake", "--build", "."] + config.buildParams, workDir = config.buildPath) 78*35238bceSAndroid Build Coastguard Worker 79*35238bceSAndroid Build Coastguard Workerdef runInternalTests (config): 80*35238bceSAndroid Build Coastguard Worker batchResultFile = config.name + ".qpa" 81*35238bceSAndroid Build Coastguard Worker infoLogFile = config.name + ".txt" 82*35238bceSAndroid Build Coastguard Worker junitFile = config.name + ".xml" 83*35238bceSAndroid Build Coastguard Worker 84*35238bceSAndroid Build Coastguard Worker testWorkDir = os.path.join(config.buildPath, "modules", "internal") 85*35238bceSAndroid Build Coastguard Worker junitToolPath = os.path.join(config.buildPath, 'executor', config.junitTool) 86*35238bceSAndroid Build Coastguard Worker 87*35238bceSAndroid Build Coastguard Worker # Remove old files 88*35238bceSAndroid Build Coastguard Worker for file in [batchResultFile, junitFile]: 89*35238bceSAndroid Build Coastguard Worker if os.path.exists(file): 90*35238bceSAndroid Build Coastguard Worker os.remove(file) 91*35238bceSAndroid Build Coastguard Worker 92*35238bceSAndroid Build Coastguard Worker build(config) 93*35238bceSAndroid Build Coastguard Worker 94*35238bceSAndroid Build Coastguard Worker # Dump case list 95*35238bceSAndroid Build Coastguard Worker execute([config.testBinaryName, "--deqp-runmode=xml-caselist"], workDir = testWorkDir) 96*35238bceSAndroid Build Coastguard Worker 97*35238bceSAndroid Build Coastguard Worker # Run test binary using executor 98*35238bceSAndroid Build Coastguard Worker args = [ 99*35238bceSAndroid Build Coastguard Worker os.path.join(config.buildPath, 'executor', config.executor), 100*35238bceSAndroid Build Coastguard Worker '--port=%d' % random.randint(50000, 60000), 101*35238bceSAndroid Build Coastguard Worker '--start-server=%s' % os.path.join(config.buildPath, 'execserver', config.execserver), 102*35238bceSAndroid Build Coastguard Worker '--binaryname=%s' % config.testBinaryName, 103*35238bceSAndroid Build Coastguard Worker '--cmdline=--deqp-crashhandler=enable --deqp-watchdog=enable', 104*35238bceSAndroid Build Coastguard Worker '--workdir=%s' % testWorkDir, 105*35238bceSAndroid Build Coastguard Worker '--caselistdir=%s' % os.path.join(testWorkDir), 106*35238bceSAndroid Build Coastguard Worker '--testset=dE-IT.*', 107*35238bceSAndroid Build Coastguard Worker '--out=%s' % batchResultFile, 108*35238bceSAndroid Build Coastguard Worker '--info=%s' % infoLogFile 109*35238bceSAndroid Build Coastguard Worker ] 110*35238bceSAndroid Build Coastguard Worker execute(args) 111*35238bceSAndroid Build Coastguard Worker 112*35238bceSAndroid Build Coastguard Worker # Convert log to junit format 113*35238bceSAndroid Build Coastguard Worker execute([junitToolPath, batchResultFile, junitFile]) 114*35238bceSAndroid Build Coastguard Worker 115*35238bceSAndroid Build Coastguard WorkerSRC_PATH = os.path.normpath(os.path.join(os.path.dirname(__file__), "..")) 116*35238bceSAndroid Build Coastguard WorkerBASE_BUILD_PATH = os.path.normpath(os.path.join(SRC_PATH, "..", "de-internal-tests")) 117*35238bceSAndroid Build Coastguard Worker 118*35238bceSAndroid Build Coastguard WorkerCONFIGS = [ 119*35238bceSAndroid Build Coastguard Worker Config( 120*35238bceSAndroid Build Coastguard Worker "win32-vs10-debug", 121*35238bceSAndroid Build Coastguard Worker SRC_PATH, 122*35238bceSAndroid Build Coastguard Worker os.path.join(BASE_BUILD_PATH, "win32-vs10-debug"), 123*35238bceSAndroid Build Coastguard Worker ['-GVisual Studio 10', '-DDEQP_TARGET=no_modules'], 124*35238bceSAndroid Build Coastguard Worker ['--config', 'Debug', '--', '/m'], 125*35238bceSAndroid Build Coastguard Worker 'Debug\\de-internal-tests.exe', 126*35238bceSAndroid Build Coastguard Worker 'Debug\\executor.exe', 127*35238bceSAndroid Build Coastguard Worker 'Debug\\execserver.exe', 128*35238bceSAndroid Build Coastguard Worker 'Debug\\testlog-to-junit.exe' 129*35238bceSAndroid Build Coastguard Worker ), 130*35238bceSAndroid Build Coastguard Worker Config( 131*35238bceSAndroid Build Coastguard Worker "win32-vs10-release", 132*35238bceSAndroid Build Coastguard Worker SRC_PATH, 133*35238bceSAndroid Build Coastguard Worker os.path.join(BASE_BUILD_PATH, "win32-vs10-release"), 134*35238bceSAndroid Build Coastguard Worker ['-GVisual Studio 10', '-DDEQP_TARGET=no_modules'], 135*35238bceSAndroid Build Coastguard Worker ['--config', 'Release', '--', '/m'], 136*35238bceSAndroid Build Coastguard Worker 'Release\\de-internal-tests.exe', 137*35238bceSAndroid Build Coastguard Worker 'Release\\executor.exe', 138*35238bceSAndroid Build Coastguard Worker 'Release\\execserver.exe', 139*35238bceSAndroid Build Coastguard Worker 'Release\\testlog-to-junit.exe' 140*35238bceSAndroid Build Coastguard Worker ), 141*35238bceSAndroid Build Coastguard Worker Config( 142*35238bceSAndroid Build Coastguard Worker "win64-vs10-debug", 143*35238bceSAndroid Build Coastguard Worker SRC_PATH, 144*35238bceSAndroid Build Coastguard Worker os.path.join(BASE_BUILD_PATH, "win64-vs10-debug"), 145*35238bceSAndroid Build Coastguard Worker ['-GVisual Studio 10 Win64', '-DDEQP_TARGET=no_modules'], 146*35238bceSAndroid Build Coastguard Worker ['--config', 'Debug', '--', '/m'], 147*35238bceSAndroid Build Coastguard Worker 'Debug\\de-internal-tests.exe', 148*35238bceSAndroid Build Coastguard Worker 'Debug\\executor.exe', 149*35238bceSAndroid Build Coastguard Worker 'Debug\\execserver.exe', 150*35238bceSAndroid Build Coastguard Worker 'Debug\\testlog-to-junit.exe' 151*35238bceSAndroid Build Coastguard Worker ), 152*35238bceSAndroid Build Coastguard Worker Config( 153*35238bceSAndroid Build Coastguard Worker "win64-vs10-release", 154*35238bceSAndroid Build Coastguard Worker SRC_PATH, 155*35238bceSAndroid Build Coastguard Worker os.path.join(BASE_BUILD_PATH, "win64-vs10-release"), 156*35238bceSAndroid Build Coastguard Worker ['-GVisual Studio 10 Win64', '-DDEQP_TARGET=no_modules'], 157*35238bceSAndroid Build Coastguard Worker ['--config', 'Release', '--', '/m'], 158*35238bceSAndroid Build Coastguard Worker 'Release\\de-internal-tests.exe', 159*35238bceSAndroid Build Coastguard Worker 'Release\\executor.exe', 160*35238bceSAndroid Build Coastguard Worker 'Release\\execserver.exe', 161*35238bceSAndroid Build Coastguard Worker 'Release\\testlog-to-junit.exe' 162*35238bceSAndroid Build Coastguard Worker ), 163*35238bceSAndroid Build Coastguard Worker 164*35238bceSAndroid Build Coastguard Worker # GCC configs 165*35238bceSAndroid Build Coastguard Worker Config( 166*35238bceSAndroid Build Coastguard Worker "linux32-gcc-debug", 167*35238bceSAndroid Build Coastguard Worker SRC_PATH, 168*35238bceSAndroid Build Coastguard Worker os.path.join(BASE_BUILD_PATH, "linux32-gcc-debug"), 169*35238bceSAndroid Build Coastguard Worker ['-DDEQP_TARGET=no_modules', '-DCMAKE_BUILD_TYPE=Debug', '-DCMAKE_C_FLAGS=-m32', '-DCMAKE_CXX_FLAGS=-m32', '-DCMAKE_LIBRARY_PATH=/usr/lib32;usr/lib/i386-linux-gnu'], 170*35238bceSAndroid Build Coastguard Worker ['--', '-j', '2'], 171*35238bceSAndroid Build Coastguard Worker './de-internal-tests' 172*35238bceSAndroid Build Coastguard Worker ), 173*35238bceSAndroid Build Coastguard Worker Config( 174*35238bceSAndroid Build Coastguard Worker "linux32-gcc-release", 175*35238bceSAndroid Build Coastguard Worker SRC_PATH, 176*35238bceSAndroid Build Coastguard Worker os.path.join(BASE_BUILD_PATH, "linux32-gcc-release"), 177*35238bceSAndroid Build Coastguard Worker ['-DDEQP_TARGET=no_modules', '-DCMAKE_BUILD_TYPE=Release', '-DCMAKE_C_FLAGS=-m32', '-DCMAKE_CXX_FLAGS=-m32', '-DCMAKE_LIBRARY_PATH=/usr/lib32;usr/lib/i386-linux-gnu'], 178*35238bceSAndroid Build Coastguard Worker ['--', '-j', '2'], 179*35238bceSAndroid Build Coastguard Worker './de-internal-tests' 180*35238bceSAndroid Build Coastguard Worker ), 181*35238bceSAndroid Build Coastguard Worker Config( 182*35238bceSAndroid Build Coastguard Worker "linux64-gcc-debug", 183*35238bceSAndroid Build Coastguard Worker SRC_PATH, 184*35238bceSAndroid Build Coastguard Worker os.path.join(BASE_BUILD_PATH, "linux64-gcc-debug"), 185*35238bceSAndroid Build Coastguard Worker ['-DDEQP_TARGET=no_modules', '-DCMAKE_BUILD_TYPE=Debug', '-DCMAKE_C_FLAGS=-m64', '-DCMAKE_CXX_FLAGS=-m64'], 186*35238bceSAndroid Build Coastguard Worker ['--', '-j', '2'], 187*35238bceSAndroid Build Coastguard Worker './de-internal-tests' 188*35238bceSAndroid Build Coastguard Worker ), 189*35238bceSAndroid Build Coastguard Worker Config( 190*35238bceSAndroid Build Coastguard Worker "linux64-gcc-release", 191*35238bceSAndroid Build Coastguard Worker SRC_PATH, 192*35238bceSAndroid Build Coastguard Worker os.path.join(BASE_BUILD_PATH, "linux64-gcc-release"), 193*35238bceSAndroid Build Coastguard Worker ['-DDEQP_TARGET=no_modules', '-DCMAKE_BUILD_TYPE=Release', '-DCMAKE_C_FLAGS=-m64', '-DCMAKE_CXX_FLAGS=-m64'], 194*35238bceSAndroid Build Coastguard Worker ['--', '-j', '2'], 195*35238bceSAndroid Build Coastguard Worker './de-internal-tests' 196*35238bceSAndroid Build Coastguard Worker ), 197*35238bceSAndroid Build Coastguard Worker 198*35238bceSAndroid Build Coastguard Worker # Clang configs 199*35238bceSAndroid Build Coastguard Worker Config( 200*35238bceSAndroid Build Coastguard Worker "linux32-clang-debug", 201*35238bceSAndroid Build Coastguard Worker SRC_PATH, 202*35238bceSAndroid Build Coastguard Worker os.path.join(BASE_BUILD_PATH, "linux32-clang-debug"), 203*35238bceSAndroid Build Coastguard Worker ['-DDEQP_TARGET=no_modules', '-DCMAKE_BUILD_TYPE=Debug', '-DCMAKE_C_FLAGS=-m32', '-DCMAKE_CXX_FLAGS=-m32', '-DCMAKE_LIBRARY_PATH=/usr/lib32;usr/lib/i386-linux-gnu', '-DCMAKE_C_COMPILER=clang', '-DCMAKE_CXX_COMPILER=clang++', '-DDE_COMPILER=DE_COMPILER_CLANG'], 204*35238bceSAndroid Build Coastguard Worker ['--', '-j', '2'], 205*35238bceSAndroid Build Coastguard Worker './de-internal-tests' 206*35238bceSAndroid Build Coastguard Worker ), 207*35238bceSAndroid Build Coastguard Worker Config( 208*35238bceSAndroid Build Coastguard Worker "linux32-clang-release", 209*35238bceSAndroid Build Coastguard Worker SRC_PATH, 210*35238bceSAndroid Build Coastguard Worker os.path.join(BASE_BUILD_PATH, "linux32-clang-release"), 211*35238bceSAndroid Build Coastguard Worker ['-DDEQP_TARGET=no_modules', '-DCMAKE_BUILD_TYPE=Release', '-DCMAKE_C_FLAGS=-m32', '-DCMAKE_CXX_FLAGS=-m32', '-DCMAKE_LIBRARY_PATH=/usr/lib32;usr/lib/i386-linux-gnu', '-DCMAKE_C_COMPILER=clang', '-DCMAKE_CXX_COMPILER=clang++', '-DDE_COMPILER=DE_COMPILER_CLANG'], 212*35238bceSAndroid Build Coastguard Worker ['--', '-j', '2'], 213*35238bceSAndroid Build Coastguard Worker './de-internal-tests' 214*35238bceSAndroid Build Coastguard Worker ), 215*35238bceSAndroid Build Coastguard Worker Config( 216*35238bceSAndroid Build Coastguard Worker "linux64-clang-debug", 217*35238bceSAndroid Build Coastguard Worker SRC_PATH, 218*35238bceSAndroid Build Coastguard Worker os.path.join(BASE_BUILD_PATH, "linux64-clang-debug"), 219*35238bceSAndroid Build Coastguard Worker ['-DDEQP_TARGET=no_modules', '-DCMAKE_BUILD_TYPE=Debug', '-DCMAKE_C_FLAGS=-m64', '-DCMAKE_CXX_FLAGS=-m64', '-DCMAKE_C_COMPILER=clang', '-DCMAKE_CXX_COMPILER=clang++', '-DDE_COMPILER=DE_COMPILER_CLANG'], 220*35238bceSAndroid Build Coastguard Worker ['--', '-j', '2'], 221*35238bceSAndroid Build Coastguard Worker './de-internal-tests' 222*35238bceSAndroid Build Coastguard Worker ), 223*35238bceSAndroid Build Coastguard Worker Config( 224*35238bceSAndroid Build Coastguard Worker "linux64-clang-release", 225*35238bceSAndroid Build Coastguard Worker SRC_PATH, 226*35238bceSAndroid Build Coastguard Worker os.path.join(BASE_BUILD_PATH, "linux64-clang-release"), 227*35238bceSAndroid Build Coastguard Worker ['-DDEQP_TARGET=no_modules', '-DCMAKE_BUILD_TYPE=Release', '-DCMAKE_C_FLAGS=-m64', '-DCMAKE_CXX_FLAGS=-m64', '-DCMAKE_C_COMPILER=clang', '-DCMAKE_CXX_COMPILER=clang++', '-DDE_COMPILER=DE_COMPILER_CLANG'], 228*35238bceSAndroid Build Coastguard Worker ['--', '-j', '2'], 229*35238bceSAndroid Build Coastguard Worker './de-internal-tests' 230*35238bceSAndroid Build Coastguard Worker ) 231*35238bceSAndroid Build Coastguard Worker] 232*35238bceSAndroid Build Coastguard Worker 233*35238bceSAndroid Build Coastguard Workerdef findConfig (name): 234*35238bceSAndroid Build Coastguard Worker for config in CONFIGS: 235*35238bceSAndroid Build Coastguard Worker if config.name == name: 236*35238bceSAndroid Build Coastguard Worker return config 237*35238bceSAndroid Build Coastguard Worker return None 238*35238bceSAndroid Build Coastguard Worker 239*35238bceSAndroid Build Coastguard Workerif __name__ == "__main__": 240*35238bceSAndroid Build Coastguard Worker if len(sys.argv) != 2: 241*35238bceSAndroid Build Coastguard Worker die("%s: [config]" % sys.argv[0]) 242*35238bceSAndroid Build Coastguard Worker 243*35238bceSAndroid Build Coastguard Worker config = findConfig(sys.argv[1]) 244*35238bceSAndroid Build Coastguard Worker if config == None: 245*35238bceSAndroid Build Coastguard Worker die("Config '%s' not found" % sys.argv[1]) 246*35238bceSAndroid Build Coastguard Worker 247*35238bceSAndroid Build Coastguard Worker random.seed() 248*35238bceSAndroid Build Coastguard Worker runInternalTests(config) 249