Vulkan: Add wide-color tests
[platform/upstream/VK-GL-CTS.git] / scripts / gen_android_mk.py
1 # -*- coding: utf-8 -*-
2
3 #-------------------------------------------------------------------------
4 # drawElements Quality Program utilities
5 # --------------------------------------
6 #
7 # Copyright 2017 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
23 import os
24 import posixpath
25 from fnmatch import fnmatch
26
27 from build.common import DEQP_DIR, writeFile
28
29 SRC_ROOTS = [
30         "execserver",
31         "executor",
32         "external/vulkancts",
33         "framework/common",
34         "framework/delibs",
35         "framework/egl",
36         "framework/opengl",
37         "framework/platform/android",
38         "framework/qphelper",
39         "framework/randomshaders",
40         "framework/referencerenderer",
41         "modules",
42 ]
43
44 INCLUDE_PATTERNS = [
45         "*.cpp",
46         "*.c",
47 ]
48
49 EXCLUDE_PATTERNS = [
50         "execserver/xsWin32TestProcess.cpp",
51         "external/vulkancts/modules/vulkan/vktBuildPrograms.cpp",
52         "framework/delibs/dethread/standalone_test.c",
53         "framework/randomshaders/rsgTest.cpp",
54         "executor/tools/*",
55         "execserver/tools/*",
56 ]
57
58 TEMPLATE = """
59 # WARNING: This is auto-generated file. Do not modify, since changes will
60 # be lost! Modify scripts/gen_android_mk.py instead.
61
62 LOCAL_SRC_FILES :={SRC_FILES}
63
64 LOCAL_C_INCLUDES :={INCLUDES}
65
66 """[1:-1]
67
68 def matchesAny (filename, patterns):
69         for ptrn in patterns:
70                 if fnmatch(filename, ptrn):
71                         return True
72         return False
73
74 def isSourceFile (filename):
75         return matchesAny(filename, INCLUDE_PATTERNS) and not matchesAny(filename, EXCLUDE_PATTERNS)
76
77 def toPortablePath (nativePath):
78         # os.path is so convenient...
79         head, tail      = os.path.split(nativePath)
80         components      = [tail]
81
82         while head != None and head != '':
83                 head, tail = os.path.split(head)
84                 components.append(tail)
85
86         components.reverse()
87
88         portablePath = ""
89         for component in components:
90                 portablePath = posixpath.join(portablePath, component)
91
92         return portablePath
93
94 def getSourceFiles ():
95         sources = []
96
97         for srcRoot in SRC_ROOTS:
98                 baseDir = os.path.join(DEQP_DIR, srcRoot)
99                 for root, dirs, files in os.walk(baseDir):
100                         for file in files:
101                                 absPath                 = os.path.join(root, file)
102                                 nativeRelPath   = os.path.relpath(absPath, DEQP_DIR)
103                                 portablePath    = toPortablePath(nativeRelPath)
104
105                                 if isSourceFile(portablePath):
106                                         sources.append(portablePath)
107
108         sources.sort()
109
110         return sources
111
112 def getSourceDirs (sourceFiles):
113         seenDirs        = set()
114         sourceDirs      = []
115
116         for sourceFile in sourceFiles:
117                 sourceDir = posixpath.dirname(sourceFile)
118
119                 if not sourceDir in seenDirs:
120                         sourceDirs.append(sourceDir)
121                         seenDirs.add(sourceDir)
122
123         return sourceDirs
124
125 def genMkStringList (items):
126         src = ""
127
128         for item in items:
129                 src += " \\\n\t%s" % item
130
131         return src
132
133 def genAndroidMk (sourceDirs, sourceFiles):
134         src = TEMPLATE
135         src = src.replace("{INCLUDES}", genMkStringList(["$(deqp_dir)/%s" % s for s in sourceDirs]))
136         src = src.replace("{SRC_FILES}", genMkStringList(sourceFiles))
137
138         return src
139
140 if __name__ == "__main__":
141         sourceFiles             = getSourceFiles()
142         sourceDirs              = getSourceDirs(sourceFiles)
143         androidMkText   = genAndroidMk(sourceDirs, sourceFiles)
144
145         writeFile(os.path.join(DEQP_DIR, "AndroidGen.mk"), androidMkText)