xref: /aosp_15_r20/external/deqp/scripts/gen_khronos_cts_bp.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 2024 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 posixpath
25*35238bceSAndroid Build Coastguard Workerfrom fnmatch import fnmatch
26*35238bceSAndroid Build Coastguard Worker
27*35238bceSAndroid Build Coastguard Workerfrom ctsbuild.common import DEQP_DIR, writeFile, which, execute
28*35238bceSAndroid Build Coastguard Worker
29*35238bceSAndroid Build Coastguard Worker# source code to compile into static lib libkhronoscts_common
30*35238bceSAndroid Build Coastguard WorkerLIB_KHRONOS_CTS_COMMON_SRC_ROOTS = [
31*35238bceSAndroid Build Coastguard Worker    "execserver",
32*35238bceSAndroid Build Coastguard Worker    "executor",
33*35238bceSAndroid Build Coastguard Worker    "framework/common",
34*35238bceSAndroid Build Coastguard Worker    "framework/delibs",
35*35238bceSAndroid Build Coastguard Worker    "framework/egl",
36*35238bceSAndroid Build Coastguard Worker    "framework/opengl",
37*35238bceSAndroid Build Coastguard Worker    "framework/qphelper",
38*35238bceSAndroid Build Coastguard Worker    "framework/randomshaders",
39*35238bceSAndroid Build Coastguard Worker    "framework/referencerenderer",
40*35238bceSAndroid Build Coastguard Worker    "framework/xexml",
41*35238bceSAndroid Build Coastguard Worker]
42*35238bceSAndroid Build Coastguard Worker
43*35238bceSAndroid Build Coastguard WorkerLIB_KHRONOS_CTS_COMMON_INCLUDE_PATTERNS = [
44*35238bceSAndroid Build Coastguard Worker    "*.cpp",
45*35238bceSAndroid Build Coastguard Worker    "*.c",
46*35238bceSAndroid Build Coastguard Worker]
47*35238bceSAndroid Build Coastguard Worker
48*35238bceSAndroid Build Coastguard WorkerLIB_KHRONOS_CTS_COMMON_EXCLUDE_PATTERNS = [
49*35238bceSAndroid Build Coastguard Worker    "execserver/xsWin32TestProcess.cpp",
50*35238bceSAndroid Build Coastguard Worker    "framework/delibs/dethread/standalone_test.c",
51*35238bceSAndroid Build Coastguard Worker    "framework/randomshaders/rsgTest.cpp",
52*35238bceSAndroid Build Coastguard Worker    "execserver/tools/*",
53*35238bceSAndroid Build Coastguard Worker    "executor/tools/*",
54*35238bceSAndroid Build Coastguard Worker]
55*35238bceSAndroid Build Coastguard Worker
56*35238bceSAndroid Build Coastguard WorkerLIB_KHRONOS_CTS_COMMON_EXTRA_INCLUDE_DIRS = []
57*35238bceSAndroid Build Coastguard Worker
58*35238bceSAndroid Build Coastguard Worker# source code to compile into static lib libkhronoscts_modules_gles
59*35238bceSAndroid Build Coastguard WorkerLIB_KHRONOS_CTS_MODULES_SRC_ROOTS = [
60*35238bceSAndroid Build Coastguard Worker    "modules",
61*35238bceSAndroid Build Coastguard Worker]
62*35238bceSAndroid Build Coastguard Worker
63*35238bceSAndroid Build Coastguard WorkerLIB_KHRONOS_CTS_MODULES_INCLUDE_PATTERNS = [
64*35238bceSAndroid Build Coastguard Worker    "*.cpp",
65*35238bceSAndroid Build Coastguard Worker    "*.c",
66*35238bceSAndroid Build Coastguard Worker]
67*35238bceSAndroid Build Coastguard Worker
68*35238bceSAndroid Build Coastguard WorkerLIB_KHRONOS_CTS_MODULES_EXCLUDE_PATTERNS = [
69*35238bceSAndroid Build Coastguard Worker    "modules/egl/teglTestPackageEntry.cpp",
70*35238bceSAndroid Build Coastguard Worker    "modules/gles2/tes2TestPackageEntry.cpp",
71*35238bceSAndroid Build Coastguard Worker    "modules/gles3/tes3TestPackageEntry.cpp",
72*35238bceSAndroid Build Coastguard Worker    "modules/gles31/tes31TestPackageEntry.cpp",
73*35238bceSAndroid Build Coastguard Worker    "modules/internal/ditTestPackageEntry.cpp",
74*35238bceSAndroid Build Coastguard Worker]
75*35238bceSAndroid Build Coastguard Worker
76*35238bceSAndroid Build Coastguard WorkerLIB_KHRONOS_CTS_MODULES_EXTRA_INCLUDE_DIRS = [
77*35238bceSAndroid Build Coastguard Worker    "external/vulkancts/framework/vulkan",
78*35238bceSAndroid Build Coastguard Worker    "external/vulkancts/framework/vulkan/generated/vulkan",
79*35238bceSAndroid Build Coastguard Worker]
80*35238bceSAndroid Build Coastguard Worker
81*35238bceSAndroid Build Coastguard Worker# source code to compile into static lib libkhronoscts_openglcts
82*35238bceSAndroid Build Coastguard WorkerLIB_KHRONOS_CTS_OPENGLCTS_SRC_ROOTS = [
83*35238bceSAndroid Build Coastguard Worker    "external/openglcts",
84*35238bceSAndroid Build Coastguard Worker]
85*35238bceSAndroid Build Coastguard Worker
86*35238bceSAndroid Build Coastguard WorkerLIB_KHRONOS_CTS_OPENGLCTS_INCLUDE_PATTERNS = [
87*35238bceSAndroid Build Coastguard Worker    "*.cpp",
88*35238bceSAndroid Build Coastguard Worker    "*.c",
89*35238bceSAndroid Build Coastguard Worker]
90*35238bceSAndroid Build Coastguard Worker
91*35238bceSAndroid Build Coastguard WorkerLIB_KHRONOS_CTS_OPENGLCTS_EXCLUDE_PATTERNS = [
92*35238bceSAndroid Build Coastguard Worker    "external/openglcts/modules/gl/gl4cContextFlushControlTests.cpp",
93*35238bceSAndroid Build Coastguard Worker    "external/openglcts/modules/glcTestPackageEntry.cpp",
94*35238bceSAndroid Build Coastguard Worker    "external/openglcts/modules/runner/glcAndroidMain.cpp",
95*35238bceSAndroid Build Coastguard Worker    "external/openglcts/modules/runner/glcAndroidTestActivity.cpp",
96*35238bceSAndroid Build Coastguard Worker    "external/openglcts/modules/runner/glcTestRunner.cpp",
97*35238bceSAndroid Build Coastguard Worker    "external/openglcts/modules/runner/glcTestRunnerMain.cpp",
98*35238bceSAndroid Build Coastguard Worker]
99*35238bceSAndroid Build Coastguard Worker
100*35238bceSAndroid Build Coastguard WorkerLIB_KHRONOS_CTS_OPENGLCTS_EXTRA_INCLUDE_DIRS = [
101*35238bceSAndroid Build Coastguard Worker]
102*35238bceSAndroid Build Coastguard Worker
103*35238bceSAndroid Build Coastguard Worker# source code to compile into static lib libkhronoscts_vulkancts
104*35238bceSAndroid Build Coastguard WorkerLIB_KHRONOS_CTS_VULKANCTS_SRC_ROOTS = [
105*35238bceSAndroid Build Coastguard Worker    "external/vulkancts",
106*35238bceSAndroid Build Coastguard Worker]
107*35238bceSAndroid Build Coastguard Worker
108*35238bceSAndroid Build Coastguard WorkerLIB_KHRONOS_CTS_VULKANCTS_INCLUDE_PATTERNS = [
109*35238bceSAndroid Build Coastguard Worker    "*.cpp",
110*35238bceSAndroid Build Coastguard Worker    "*.c",
111*35238bceSAndroid Build Coastguard Worker]
112*35238bceSAndroid Build Coastguard Worker
113*35238bceSAndroid Build Coastguard WorkerLIB_KHRONOS_CTS_VULKANCTS_EXCLUDE_PATTERNS = [
114*35238bceSAndroid Build Coastguard Worker    "external/vulkancts/framework/vulkan/vkRenderDocUtil.cpp",
115*35238bceSAndroid Build Coastguard Worker    "external/vulkancts/modules/vulkan/vktBuildPrograms.cpp",
116*35238bceSAndroid Build Coastguard Worker    "external/vulkancts/modules/vulkan/sc/*",
117*35238bceSAndroid Build Coastguard Worker    "external/vulkancts/modules/vulkan/vktTestPackageEntrySC.cpp",
118*35238bceSAndroid Build Coastguard Worker    "external/vulkancts/vkscpc/*",
119*35238bceSAndroid Build Coastguard Worker    "external/vulkancts/vkscserver/*",
120*35238bceSAndroid Build Coastguard Worker    "external/vulkancts/modules/vulkan/video/*",
121*35238bceSAndroid Build Coastguard Worker]
122*35238bceSAndroid Build Coastguard Worker
123*35238bceSAndroid Build Coastguard WorkerLIB_KHRONOS_CTS_VULKANCTS_EXTRA_INCLUDE_DIRS = [
124*35238bceSAndroid Build Coastguard Worker    "external/vulkancts/framework/vulkan/generated/vulkan",
125*35238bceSAndroid Build Coastguard Worker]
126*35238bceSAndroid Build Coastguard Worker
127*35238bceSAndroid Build Coastguard Worker# source code to compile into static lib libkhronoscts_platform
128*35238bceSAndroid Build Coastguard WorkerLIB_KHRONOS_CTS_PLATFORM_SRC_ROOTS = [
129*35238bceSAndroid Build Coastguard Worker    "framework/platform/android",
130*35238bceSAndroid Build Coastguard Worker    "framework/platform/surfaceless",
131*35238bceSAndroid Build Coastguard Worker    "external/openglcts/modules/runner",
132*35238bceSAndroid Build Coastguard Worker]
133*35238bceSAndroid Build Coastguard Worker
134*35238bceSAndroid Build Coastguard WorkerLIB_KHRONOS_CTS_PLATFORM_INCLUDE_PATTERNS = [
135*35238bceSAndroid Build Coastguard Worker    "*.cpp",
136*35238bceSAndroid Build Coastguard Worker    "*.c",
137*35238bceSAndroid Build Coastguard Worker]
138*35238bceSAndroid Build Coastguard Worker
139*35238bceSAndroid Build Coastguard WorkerLIB_KHRONOS_CTS_PLATFORM_EXCLUDE_PATTERNS = [
140*35238bceSAndroid Build Coastguard Worker    "external/openglcts/modules/runner/glcAndroidMain.cpp",
141*35238bceSAndroid Build Coastguard Worker    "framework/platform/android/tcuAndroidJNI.cpp",
142*35238bceSAndroid Build Coastguard Worker    "framework/platform/android/tcuAndroidMain.cpp",
143*35238bceSAndroid Build Coastguard Worker    "framework/platform/android/tcuAndroidPlatformCapabilityQueryJNI.cpp",
144*35238bceSAndroid Build Coastguard Worker]
145*35238bceSAndroid Build Coastguard Worker
146*35238bceSAndroid Build Coastguard WorkerLIB_KHRONOS_CTS_PLATFORM_EXTRA_INCLUDE_DIRS = [
147*35238bceSAndroid Build Coastguard Worker]
148*35238bceSAndroid Build Coastguard Worker
149*35238bceSAndroid Build Coastguard WorkerAUTO_GEN_WARNING = """// WARNING: This is auto-generated file. Do not modify, since changes will
150*35238bceSAndroid Build Coastguard Worker// be lost! Modify scripts/gen_khronos_cts_bp.py instead.
151*35238bceSAndroid Build Coastguard Worker"""
152*35238bceSAndroid Build Coastguard Worker
153*35238bceSAndroid Build Coastguard WorkerCC_LIBRARY_KHRONOS_COMPILE_OPTION = """
154*35238bceSAndroid Build Coastguard Workercc_defaults {
155*35238bceSAndroid Build Coastguard Worker    name: "khronosctscompilationflag_default",
156*35238bceSAndroid Build Coastguard Worker    cppflags: [
157*35238bceSAndroid Build Coastguard Worker        "-fexceptions",
158*35238bceSAndroid Build Coastguard Worker        "-Wno-non-virtual-dtor",
159*35238bceSAndroid Build Coastguard Worker        "-Wno-delete-non-virtual-dtor",
160*35238bceSAndroid Build Coastguard Worker        "-Wno-implicit-int-conversion",
161*35238bceSAndroid Build Coastguard Worker        "-Wno-implicit-float-conversion",
162*35238bceSAndroid Build Coastguard Worker        "-Wno-unused-function",
163*35238bceSAndroid Build Coastguard Worker        "-Wno-enum-float-conversion",
164*35238bceSAndroid Build Coastguard Worker        "-Wno-missing-field-initializers",
165*35238bceSAndroid Build Coastguard Worker        "-Wno-switch",
166*35238bceSAndroid Build Coastguard Worker        "-Wno-unused-parameter",
167*35238bceSAndroid Build Coastguard Worker        "-Wno-unused-variable",
168*35238bceSAndroid Build Coastguard Worker        "-Wno-macro-redefined",
169*35238bceSAndroid Build Coastguard Worker    ],
170*35238bceSAndroid Build Coastguard Worker
171*35238bceSAndroid Build Coastguard Worker    cpp_std: "c++17",
172*35238bceSAndroid Build Coastguard Worker    cflags: [
173*35238bceSAndroid Build Coastguard Worker        // Amber defines.
174*35238bceSAndroid Build Coastguard Worker        "-DAMBER_CTS_VULKAN_HEADER=1",
175*35238bceSAndroid Build Coastguard Worker        "-DAMBER_ENABLE_CLSPV=0",
176*35238bceSAndroid Build Coastguard Worker        "-DAMBER_ENABLE_DXC=0",
177*35238bceSAndroid Build Coastguard Worker        "-DAMBER_ENABLE_LODEPNG=1", // This has no effect.
178*35238bceSAndroid Build Coastguard Worker        "-DAMBER_ENABLE_RTTI=1",
179*35238bceSAndroid Build Coastguard Worker        "-DAMBER_ENABLE_SHADERC=0",
180*35238bceSAndroid Build Coastguard Worker        "-DAMBER_ENABLE_SPIRV_TOOLS=0",
181*35238bceSAndroid Build Coastguard Worker        "-DAMBER_ENABLE_VK_DEBUGGING=0",
182*35238bceSAndroid Build Coastguard Worker        "-DAMBER_ENGINE_DAWN=0",
183*35238bceSAndroid Build Coastguard Worker        "-DAMBER_ENGINE_VULKAN=1",
184*35238bceSAndroid Build Coastguard Worker
185*35238bceSAndroid Build Coastguard Worker        // glslang defines:
186*35238bceSAndroid Build Coastguard Worker        "-DENABLE_HLSL",
187*35238bceSAndroid Build Coastguard Worker        "-DENABLE_OPT=0",
188*35238bceSAndroid Build Coastguard Worker        "-DGLSLANG_OSINCLUDE_UNIX",
189*35238bceSAndroid Build Coastguard Worker
190*35238bceSAndroid Build Coastguard Worker        // SPIRV-Tools defines:
191*35238bceSAndroid Build Coastguard Worker        "-DSPIRV_ANDROID",
192*35238bceSAndroid Build Coastguard Worker        "-DSPIRV_CHECK_CONTEXT",
193*35238bceSAndroid Build Coastguard Worker        "-DSPIRV_COLOR_TERMINAL",
194*35238bceSAndroid Build Coastguard Worker        "-DSPIRV_TIMER_ENABLED",
195*35238bceSAndroid Build Coastguard Worker
196*35238bceSAndroid Build Coastguard Worker        // Android/Clang defines (not needed):
197*35238bceSAndroid Build Coastguard Worker        // -D_FORTIFY_SOURCE=2
198*35238bceSAndroid Build Coastguard Worker        // -DANDROID
199*35238bceSAndroid Build Coastguard Worker        // -DNDEBUG
200*35238bceSAndroid Build Coastguard Worker
201*35238bceSAndroid Build Coastguard Worker        // dEQP defines that we don't want/need:
202*35238bceSAndroid Build Coastguard Worker        // -DDE_DEBUG
203*35238bceSAndroid Build Coastguard Worker        // -DDEQP_USE_RELEASE_INFO_FILE
204*35238bceSAndroid Build Coastguard Worker        // -DPNG_DEBUG
205*35238bceSAndroid Build Coastguard Worker
206*35238bceSAndroid Build Coastguard Worker        // dEQP defines that are worked out in deDefs.h, without needing
207*35238bceSAndroid Build Coastguard Worker        // explicit defs:
208*35238bceSAndroid Build Coastguard Worker        // -DDE_PTR_SIZE=8
209*35238bceSAndroid Build Coastguard Worker        // -DDE_CPU=DE_CPU_ARM_64
210*35238bceSAndroid Build Coastguard Worker        //"-DDE_FENV_ACCESS_ON=_Pragma(\"STDC FENV_ACCESS ON\")",
211*35238bceSAndroid Build Coastguard Worker
212*35238bceSAndroid Build Coastguard Worker        // dEQP defines:
213*35238bceSAndroid Build Coastguard Worker        "-D_XOPEN_SOURCE=600",
214*35238bceSAndroid Build Coastguard Worker        "-DDE_ANDROID_API=28",
215*35238bceSAndroid Build Coastguard Worker        "-DDE_ASSERT_FAILURE_CALLBACK",
216*35238bceSAndroid Build Coastguard Worker        "-DDE_COMPILER=DE_COMPILER_CLANG",
217*35238bceSAndroid Build Coastguard Worker        "-DDE_MINGW=0",
218*35238bceSAndroid Build Coastguard Worker        "-DDE_OS=DE_OS_ANDROID",
219*35238bceSAndroid Build Coastguard Worker        "-DDEQP_GLES2_DIRECT_LINK=1",
220*35238bceSAndroid Build Coastguard Worker        "-DDEQP_HAVE_RENDERDOC_HEADER=0", // Needs to be 0.
221*35238bceSAndroid Build Coastguard Worker        "-DDEQP_EXCLUDE_VK_VIDEO_TESTS",
222*35238bceSAndroid Build Coastguard Worker        "-DDEQP_SUPPORT_DRM=0",
223*35238bceSAndroid Build Coastguard Worker        "-DDEQP_SUPPORT_GLES1=1",
224*35238bceSAndroid Build Coastguard Worker        "-DDEQP_TARGET_NAME=\\"Android\\"",
225*35238bceSAndroid Build Coastguard Worker        "-DQP_SUPPORT_PNG",
226*35238bceSAndroid Build Coastguard Worker        "-DCTS_USES_VULKAN",
227*35238bceSAndroid Build Coastguard Worker
228*35238bceSAndroid Build Coastguard Worker        "-Wall",
229*35238bceSAndroid Build Coastguard Worker        "-Werror",
230*35238bceSAndroid Build Coastguard Worker        "-Wconversion",
231*35238bceSAndroid Build Coastguard Worker
232*35238bceSAndroid Build Coastguard Worker        "-fwrapv",
233*35238bceSAndroid Build Coastguard Worker
234*35238bceSAndroid Build Coastguard Worker        "-Wno-implicit-fallthrough",
235*35238bceSAndroid Build Coastguard Worker        "-Wno-sign-conversion",
236*35238bceSAndroid Build Coastguard Worker        "-Wno-unused-private-field",
237*35238bceSAndroid Build Coastguard Worker        "-Wno-shorten-64-to-32",
238*35238bceSAndroid Build Coastguard Worker    ],
239*35238bceSAndroid Build Coastguard Worker
240*35238bceSAndroid Build Coastguard Worker    include_dirs: [
241*35238bceSAndroid Build Coastguard Worker        "external/deqp-deps/SPIRV-Headers/include",
242*35238bceSAndroid Build Coastguard Worker    ],
243*35238bceSAndroid Build Coastguard Worker
244*35238bceSAndroid Build Coastguard Worker    header_libs: ["jni_headers"],
245*35238bceSAndroid Build Coastguard Worker    shared_libs: ["libandroid"],
246*35238bceSAndroid Build Coastguard Worker
247*35238bceSAndroid Build Coastguard Worker    sdk_version: "current",
248*35238bceSAndroid Build Coastguard Worker    rtti: true,
249*35238bceSAndroid Build Coastguard Worker    stl: "c++_static",
250*35238bceSAndroid Build Coastguard Worker}
251*35238bceSAndroid Build Coastguard Worker"""
252*35238bceSAndroid Build Coastguard Worker
253*35238bceSAndroid Build Coastguard WorkerCC_LIBRARY_STATIC_TEMPLATE = """
254*35238bceSAndroid Build Coastguard Worker
255*35238bceSAndroid Build Coastguard Workercc_library_static {
256*35238bceSAndroid Build Coastguard Worker    name: "{CC_STATIC_LIB_NAME}",
257*35238bceSAndroid Build Coastguard Worker
258*35238bceSAndroid Build Coastguard Worker    defaults: ["khronosctscompilationflag_default"],
259*35238bceSAndroid Build Coastguard Worker
260*35238bceSAndroid Build Coastguard Worker    srcs: [
261*35238bceSAndroid Build Coastguard Worker{SRC_FILES}    ],
262*35238bceSAndroid Build Coastguard Worker    export_include_dirs: [
263*35238bceSAndroid Build Coastguard Worker{EXPORT_INCLUDES}    ],
264*35238bceSAndroid Build Coastguard Worker    static_libs: [
265*35238bceSAndroid Build Coastguard Worker{STATIC_LIBS}    ],
266*35238bceSAndroid Build Coastguard Worker}
267*35238bceSAndroid Build Coastguard Worker
268*35238bceSAndroid Build Coastguard Worker"""[1:-1]
269*35238bceSAndroid Build Coastguard Worker
270*35238bceSAndroid Build Coastguard Workerdef matchesAny (filename, patterns):
271*35238bceSAndroid Build Coastguard Worker    for ptrn in patterns:
272*35238bceSAndroid Build Coastguard Worker        if fnmatch(filename, ptrn):
273*35238bceSAndroid Build Coastguard Worker            return True
274*35238bceSAndroid Build Coastguard Worker    return False
275*35238bceSAndroid Build Coastguard Worker
276*35238bceSAndroid Build Coastguard Workerdef isSourceFile (filename, include_patterns, exclude_patterns):
277*35238bceSAndroid Build Coastguard Worker    return matchesAny(filename, include_patterns) and not matchesAny(filename, exclude_patterns)
278*35238bceSAndroid Build Coastguard Worker
279*35238bceSAndroid Build Coastguard Workerdef toPortablePath (nativePath):
280*35238bceSAndroid Build Coastguard Worker    # os.path is so convenient...
281*35238bceSAndroid Build Coastguard Worker    head, tail = os.path.split(nativePath)
282*35238bceSAndroid Build Coastguard Worker    components = [tail]
283*35238bceSAndroid Build Coastguard Worker
284*35238bceSAndroid Build Coastguard Worker    while head != None and head != '':
285*35238bceSAndroid Build Coastguard Worker        head, tail = os.path.split(head)
286*35238bceSAndroid Build Coastguard Worker        components.append(tail)
287*35238bceSAndroid Build Coastguard Worker
288*35238bceSAndroid Build Coastguard Worker    components.reverse()
289*35238bceSAndroid Build Coastguard Worker
290*35238bceSAndroid Build Coastguard Worker    portablePath = ""
291*35238bceSAndroid Build Coastguard Worker    for component in components:
292*35238bceSAndroid Build Coastguard Worker        portablePath = posixpath.join(portablePath, component)
293*35238bceSAndroid Build Coastguard Worker
294*35238bceSAndroid Build Coastguard Worker    return portablePath
295*35238bceSAndroid Build Coastguard Worker
296*35238bceSAndroid Build Coastguard Workerdef getSourceFiles (src_roots, include_patterns, exclude_patterns):
297*35238bceSAndroid Build Coastguard Worker    sources = []
298*35238bceSAndroid Build Coastguard Worker
299*35238bceSAndroid Build Coastguard Worker    for srcRoot in src_roots:
300*35238bceSAndroid Build Coastguard Worker        baseDir = os.path.join(DEQP_DIR, srcRoot)
301*35238bceSAndroid Build Coastguard Worker        for root, dirs, files in os.walk(baseDir):
302*35238bceSAndroid Build Coastguard Worker            for file in files:
303*35238bceSAndroid Build Coastguard Worker                absPath = os.path.join(root, file)
304*35238bceSAndroid Build Coastguard Worker                nativeRelPath = os.path.relpath(absPath, DEQP_DIR)
305*35238bceSAndroid Build Coastguard Worker                portablePath = toPortablePath(nativeRelPath)
306*35238bceSAndroid Build Coastguard Worker
307*35238bceSAndroid Build Coastguard Worker                if isSourceFile(portablePath, include_patterns, exclude_patterns):
308*35238bceSAndroid Build Coastguard Worker                    sources.append(portablePath)
309*35238bceSAndroid Build Coastguard Worker
310*35238bceSAndroid Build Coastguard Worker    sources.sort()
311*35238bceSAndroid Build Coastguard Worker
312*35238bceSAndroid Build Coastguard Worker    return sources
313*35238bceSAndroid Build Coastguard Worker
314*35238bceSAndroid Build Coastguard Workerdef getSourceDirs (sourceFiles, extra_include_dirs):
315*35238bceSAndroid Build Coastguard Worker    seenDirs = set()
316*35238bceSAndroid Build Coastguard Worker    sourceDirs = []
317*35238bceSAndroid Build Coastguard Worker
318*35238bceSAndroid Build Coastguard Worker    for sourceFile in sourceFiles:
319*35238bceSAndroid Build Coastguard Worker        sourceDir = posixpath.dirname(sourceFile)
320*35238bceSAndroid Build Coastguard Worker
321*35238bceSAndroid Build Coastguard Worker        if not sourceDir in seenDirs:
322*35238bceSAndroid Build Coastguard Worker            sourceDirs.append(sourceDir)
323*35238bceSAndroid Build Coastguard Worker            seenDirs.add(sourceDir)
324*35238bceSAndroid Build Coastguard Worker
325*35238bceSAndroid Build Coastguard Worker    sourceDirs.extend(extra_include_dirs)
326*35238bceSAndroid Build Coastguard Worker    sourceDirs.sort()
327*35238bceSAndroid Build Coastguard Worker
328*35238bceSAndroid Build Coastguard Worker    return sourceDirs
329*35238bceSAndroid Build Coastguard Worker
330*35238bceSAndroid Build Coastguard Workerdef genBpStringList (items):
331*35238bceSAndroid Build Coastguard Worker    src = ""
332*35238bceSAndroid Build Coastguard Worker
333*35238bceSAndroid Build Coastguard Worker    for item in items:
334*35238bceSAndroid Build Coastguard Worker        src += "        \"%s\",\n" % item
335*35238bceSAndroid Build Coastguard Worker
336*35238bceSAndroid Build Coastguard Worker    return src
337*35238bceSAndroid Build Coastguard Worker
338*35238bceSAndroid Build Coastguard Workerdef genCCStaticLibrary (ccStaticLibName, sourceDirs, sourceFiles, staticLibs):
339*35238bceSAndroid Build Coastguard Worker    src = CC_LIBRARY_STATIC_TEMPLATE
340*35238bceSAndroid Build Coastguard Worker    src = src.replace("{EXPORT_INCLUDES}", genBpStringList(sourceDirs))
341*35238bceSAndroid Build Coastguard Worker    src = src.replace("{SRC_FILES}", genBpStringList(sourceFiles))
342*35238bceSAndroid Build Coastguard Worker    src = src.replace("{CC_STATIC_LIB_NAME}", ccStaticLibName)
343*35238bceSAndroid Build Coastguard Worker    src = src.replace("{STATIC_LIBS}", genBpStringList(staticLibs))
344*35238bceSAndroid Build Coastguard Worker
345*35238bceSAndroid Build Coastguard Worker    return src
346*35238bceSAndroid Build Coastguard Worker
347*35238bceSAndroid Build Coastguard Workerif __name__ == "__main__":
348*35238bceSAndroid Build Coastguard Worker    # Android bp content for compiling static lib libkhronoscts_common
349*35238bceSAndroid Build Coastguard Worker    libKhronosCTSCommonSourceFiles = getSourceFiles(LIB_KHRONOS_CTS_COMMON_SRC_ROOTS,
350*35238bceSAndroid Build Coastguard Worker                                                            LIB_KHRONOS_CTS_COMMON_INCLUDE_PATTERNS,
351*35238bceSAndroid Build Coastguard Worker                                                            LIB_KHRONOS_CTS_COMMON_EXCLUDE_PATTERNS)
352*35238bceSAndroid Build Coastguard Worker    libKhronosCTSCommonSourceDirs = getSourceDirs(libKhronosCTSCommonSourceFiles,
353*35238bceSAndroid Build Coastguard Worker                                                            LIB_KHRONOS_CTS_COMMON_EXTRA_INCLUDE_DIRS)
354*35238bceSAndroid Build Coastguard Worker    libKhronosCTSCommonStaticLibs = ["libpng_ndk"]
355*35238bceSAndroid Build Coastguard Worker    libKhronosCTSCommonAndroidBpText = genCCStaticLibrary("libkhronoscts_common",
356*35238bceSAndroid Build Coastguard Worker                                                                libKhronosCTSCommonSourceDirs,
357*35238bceSAndroid Build Coastguard Worker                                                                libKhronosCTSCommonSourceFiles,
358*35238bceSAndroid Build Coastguard Worker                                                            libKhronosCTSCommonStaticLibs)
359*35238bceSAndroid Build Coastguard Worker
360*35238bceSAndroid Build Coastguard Worker    # Android bp content for compiling static lib libkhronoscts_modules_gles
361*35238bceSAndroid Build Coastguard Worker    libKhronosCTSModulesSourceFiles = getSourceFiles(LIB_KHRONOS_CTS_MODULES_SRC_ROOTS,
362*35238bceSAndroid Build Coastguard Worker                                                        LIB_KHRONOS_CTS_MODULES_INCLUDE_PATTERNS,
363*35238bceSAndroid Build Coastguard Worker                                                        LIB_KHRONOS_CTS_MODULES_EXCLUDE_PATTERNS)
364*35238bceSAndroid Build Coastguard Worker    libKhronosCTSModulesSourceDirs = getSourceDirs(libKhronosCTSModulesSourceFiles,
365*35238bceSAndroid Build Coastguard Worker                                                                LIB_KHRONOS_CTS_MODULES_EXTRA_INCLUDE_DIRS)
366*35238bceSAndroid Build Coastguard Worker    libKhronosCTSModulesStaticLibs = ["libkhronoscts_common"]
367*35238bceSAndroid Build Coastguard Worker    libKhronosCTSModulesAndroidBpText = genCCStaticLibrary("libkhronoscts_modules_gles",
368*35238bceSAndroid Build Coastguard Worker                                                                    libKhronosCTSModulesSourceDirs,
369*35238bceSAndroid Build Coastguard Worker                                                                    libKhronosCTSModulesSourceFiles,
370*35238bceSAndroid Build Coastguard Worker                                                                    libKhronosCTSModulesStaticLibs)
371*35238bceSAndroid Build Coastguard Worker
372*35238bceSAndroid Build Coastguard Worker    # Android bp content for compiling static lib libkhronoscts_openglcts
373*35238bceSAndroid Build Coastguard Worker    libKhronosCTSOpenGLCTSSourceFiles = getSourceFiles(LIB_KHRONOS_CTS_OPENGLCTS_SRC_ROOTS,
374*35238bceSAndroid Build Coastguard Worker                                                    LIB_KHRONOS_CTS_OPENGLCTS_INCLUDE_PATTERNS,
375*35238bceSAndroid Build Coastguard Worker                                                    LIB_KHRONOS_CTS_OPENGLCTS_EXCLUDE_PATTERNS)
376*35238bceSAndroid Build Coastguard Worker    libKhronosCTSOpenGLCTSSourceDirs = getSourceDirs(libKhronosCTSOpenGLCTSSourceFiles,
377*35238bceSAndroid Build Coastguard Worker                                                    LIB_KHRONOS_CTS_OPENGLCTS_EXTRA_INCLUDE_DIRS)
378*35238bceSAndroid Build Coastguard Worker    libKhronosCTSOpenGLCTSStaticLibs = ["libkhronoscts_common",
379*35238bceSAndroid Build Coastguard Worker                                        "libkhronoscts_modules_gles",
380*35238bceSAndroid Build Coastguard Worker                                        "deqp_glslang_SPIRV",
381*35238bceSAndroid Build Coastguard Worker                                        "deqp_spirv-tools"]
382*35238bceSAndroid Build Coastguard Worker    libKhronosCTSOpenGLCTSAndroidBpText = genCCStaticLibrary("libkhronoscts_openglcts",
383*35238bceSAndroid Build Coastguard Worker                                                            libKhronosCTSOpenGLCTSSourceDirs,
384*35238bceSAndroid Build Coastguard Worker                                                            libKhronosCTSOpenGLCTSSourceFiles,
385*35238bceSAndroid Build Coastguard Worker                                                            libKhronosCTSOpenGLCTSStaticLibs)
386*35238bceSAndroid Build Coastguard Worker
387*35238bceSAndroid Build Coastguard Worker    # Android bp content for compiling static lib libkhronoscts_vulkancts
388*35238bceSAndroid Build Coastguard Worker    libKhronosCTSVulkanCTSSourceFiles = getSourceFiles(LIB_KHRONOS_CTS_VULKANCTS_SRC_ROOTS,
389*35238bceSAndroid Build Coastguard Worker                                                    LIB_KHRONOS_CTS_VULKANCTS_INCLUDE_PATTERNS,
390*35238bceSAndroid Build Coastguard Worker                                                    LIB_KHRONOS_CTS_VULKANCTS_EXCLUDE_PATTERNS)
391*35238bceSAndroid Build Coastguard Worker    libKhronosCTSVulkanCTSSourceDirs = getSourceDirs(libKhronosCTSVulkanCTSSourceFiles,
392*35238bceSAndroid Build Coastguard Worker                                                    LIB_KHRONOS_CTS_VULKANCTS_EXTRA_INCLUDE_DIRS)
393*35238bceSAndroid Build Coastguard Worker    libKhronosCTSVulkanCTSStaticLibs = ["libkhronoscts_common",
394*35238bceSAndroid Build Coastguard Worker                                        "deqp_glslang_glslang",
395*35238bceSAndroid Build Coastguard Worker                                        "deqp_spirv-tools",
396*35238bceSAndroid Build Coastguard Worker                                        "deqp_amber"]
397*35238bceSAndroid Build Coastguard Worker    libKhronosCTSVulkanCTSAndroidBpText = genCCStaticLibrary("libkhronoscts_vulkancts",
398*35238bceSAndroid Build Coastguard Worker                                                        libKhronosCTSVulkanCTSSourceDirs,
399*35238bceSAndroid Build Coastguard Worker                                                        libKhronosCTSVulkanCTSSourceFiles,
400*35238bceSAndroid Build Coastguard Worker                                                        libKhronosCTSVulkanCTSStaticLibs)
401*35238bceSAndroid Build Coastguard Worker
402*35238bceSAndroid Build Coastguard Worker    # Android bp content for compiling libkhronoscts_platform
403*35238bceSAndroid Build Coastguard Worker    libKhronosCTSPlatformSourceFiles = getSourceFiles(LIB_KHRONOS_CTS_PLATFORM_SRC_ROOTS,
404*35238bceSAndroid Build Coastguard Worker                                                LIB_KHRONOS_CTS_PLATFORM_INCLUDE_PATTERNS,
405*35238bceSAndroid Build Coastguard Worker                                                LIB_KHRONOS_CTS_PLATFORM_EXCLUDE_PATTERNS)
406*35238bceSAndroid Build Coastguard Worker    libKhronosCTSPlatformSourceDirs = getSourceDirs(libKhronosCTSPlatformSourceFiles,
407*35238bceSAndroid Build Coastguard Worker                                                    LIB_KHRONOS_CTS_PLATFORM_EXTRA_INCLUDE_DIRS)
408*35238bceSAndroid Build Coastguard Worker    libKhronosCTSPlatformStaticLibs = ["libkhronoscts_common",
409*35238bceSAndroid Build Coastguard Worker                                        "libkhronoscts_modules_gles",
410*35238bceSAndroid Build Coastguard Worker                                        "libkhronoscts_vulkancts",
411*35238bceSAndroid Build Coastguard Worker                                        "libkhronoscts_openglcts"]
412*35238bceSAndroid Build Coastguard Worker    libKhronosCTSPlatformAndroidBpText = genCCStaticLibrary("libkhronoscts_platform",
413*35238bceSAndroid Build Coastguard Worker                                                        libKhronosCTSPlatformSourceDirs,
414*35238bceSAndroid Build Coastguard Worker                                                        libKhronosCTSPlatformSourceFiles,
415*35238bceSAndroid Build Coastguard Worker                                                        libKhronosCTSPlatformStaticLibs)
416*35238bceSAndroid Build Coastguard Worker
417*35238bceSAndroid Build Coastguard Worker    # put everything together into the final Android bp content
418*35238bceSAndroid Build Coastguard Worker    libKhronosCTSAndroidBpText = "".join([AUTO_GEN_WARNING,
419*35238bceSAndroid Build Coastguard Worker                                            CC_LIBRARY_KHRONOS_COMPILE_OPTION,
420*35238bceSAndroid Build Coastguard Worker                                            libKhronosCTSCommonAndroidBpText,
421*35238bceSAndroid Build Coastguard Worker                                            libKhronosCTSModulesAndroidBpText,
422*35238bceSAndroid Build Coastguard Worker                                            libKhronosCTSOpenGLCTSAndroidBpText,
423*35238bceSAndroid Build Coastguard Worker                                            libKhronosCTSVulkanCTSAndroidBpText,
424*35238bceSAndroid Build Coastguard Worker                                            libKhronosCTSPlatformAndroidBpText])
425*35238bceSAndroid Build Coastguard Worker    writeFile(os.path.join(DEQP_DIR, "AndroidKhronosCTSGen.bp"), libKhronosCTSAndroidBpText)
426