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