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