xref: /aosp_15_r20/external/deqp/scripts/run_internal_tests.py (revision 35238bce31c2a825756842865a792f8cf7f89930)
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