Merge "Merge "Fix color change verification in dithering tests" into nougat-cts-dev...
[platform/upstream/VK-GL-CTS.git] / android / scripts / build.py
index c7342f2..a1cc086 100644 (file)
@@ -24,7 +24,9 @@ import os
 import re
 import sys
 import shutil
+import string
 import argparse
+import time
 
 import common
 
@@ -94,7 +96,7 @@ def buildNative (buildRoot, libTargetDir, nativeLib, buildType):
        else:
                assert not os.path.exists(os.path.join(libsDir, "gdbserver"))
 
-def buildApp (buildRoot, isRelease, javaApi):
+def buildApp (buildRoot, androidBuildType, javaApi):
        appDir  = os.path.join(buildRoot, "package")
 
        # Set up app
@@ -118,7 +120,7 @@ def buildApp (buildRoot, isRelease, javaApi):
        # Build
        common.execArgs([
                        common.ANT_BIN,
-                       "release" if isRelease else "debug",
+                       androidBuildType,
                        "-Dsource.dir=" + os.path.join(common.ANDROID_DIR, "package", "src"),
                        "-Dresource.absolute.dir=" + os.path.join(common.ANDROID_DIR, "package", "res")
                ])
@@ -144,7 +146,7 @@ def signApp (keystore, keyname, storepass, keypass):
                        'bin/dEQP-release.apk'
                ])
 
-def build (buildRoot=common.ANDROID_DIR, isRelease=False, nativeBuildType="Release", javaApi=common.ANDROID_JAVA_API, doParallelBuild=False):
+def build (buildRoot=common.ANDROID_DIR, androidBuildType='debug', nativeBuildType="Release", javaApi=common.ANDROID_JAVA_API, doParallelBuild=False):
        curDir = os.getcwd()
 
        try:
@@ -176,7 +178,7 @@ def build (buildRoot=common.ANDROID_DIR, isRelease=False, nativeBuildType="Relea
                        shutil.copytree(assetsSrcDir, assetsDstDir)
 
                # Build java code and .apk
-               buildApp(buildRoot, isRelease, javaApi)
+               buildApp(buildRoot, androidBuildType, javaApi)
 
        finally:
                # Restore working dir
@@ -188,20 +190,71 @@ def dumpConfig ():
                print "%-30s : %s" % (entry[0], entry[1])
        print " "
 
+# Return NDK version as [<major>,<minor>] or None if cannot be figured out.
+def getNdkVersion (path):
+       if path == None:
+               return None
+
+       propFilePath = os.path.join(path, "source.properties")
+       try:
+               with open(propFilePath) as propFile:
+                       for line in propFile:
+                               keyValue = map(lambda x: string.strip(x), line.split("="))
+                               if keyValue[0] == "Pkg.Revision":
+                                       versionParts = keyValue[1].split(".")
+                                       return tuple(map(int, versionParts[0:2]))
+       except:
+               print("Could not read source prop file '%s'" % propFilePath)
+
+       return None
+
+def checkConfig ():
+       HOST_OS_TO_DOWNLOAD_STRING = {
+                       "linux-x86_64"          : "linux-x86_64",
+                       "windows"                       : "windows-x86",
+                       "windows-x86_64"        : "windows-x86_64"
+               }
+
+       version = getNdkVersion(common.ANDROID_NDK_PATH)
+       # Note: NDK currently maintains compatibility between minor
+       # versions. Error out only on major version mismatch.
+       if version == None or version[0] != common.ANDROID_NDK_VERSION[0]:
+               print("**** WARNING! Deqp requires NDK version %s" % common.ANDROID_NDK_VERSION_STRING)
+               print("**** NDK Path %s does not appear to have that version." % common.ANDROID_NDK_PATH)
+
+               # Download hint will use the version encored in common.py, not
+               # the latest minor version available
+               versionString = common.ANDROID_NDK_VERSION_STRING
+               if common.ANDROID_NDK_HOST_OS in HOST_OS_TO_DOWNLOAD_STRING:
+                       osString = HOST_OS_TO_DOWNLOAD_STRING[common.ANDROID_NDK_HOST_OS]
+                       print("**** Please install from https://dl.google.com/android/repository/android-ndk-%s-%s.zip" % (versionString, osString))
+               else:
+                       print("**** Please download version", versionString, "from https://developer.android.com/ndk/downloads/index.html")
+
+               return False
+
+       return True
+
 if __name__ == "__main__":
        nativeBuildTypes = ['Release', 'Debug', 'MinSizeRel', 'RelWithAsserts', 'RelWithDebInfo']
+       androidBuildTypes = ['debug', 'release']
 
        parser = argparse.ArgumentParser()
-       parser.add_argument('--is-release', dest='isRelease', type=bool, default=False, help="Build android project in release mode.")
-       parser.add_argument('--native-build-type', dest='nativeBuildType', default="RelWithAsserts", choices=nativeBuildTypes, help="Build type passed cmake when building native code.")
+       parser.add_argument('--android-build-type', dest='androidBuildType', choices=androidBuildTypes, default='debug', help="Build type for android project..")
+       parser.add_argument('--native-build-type', dest='nativeBuildType', default="RelWithAsserts", choices=nativeBuildTypes, help="Build type passed to cmake when building native code.")
        parser.add_argument('--build-root', dest='buildRoot', default=common.ANDROID_DIR, help="Root directory for storing build results.")
        parser.add_argument('--dump-config', dest='dumpConfig', action='store_true', help="Print out all configurations variables")
        parser.add_argument('--java-api', dest='javaApi', default=common.ANDROID_JAVA_API, help="Set the API signature for the java build.")
        parser.add_argument('-p', '--parallel-build', dest='parallelBuild', action="store_true", help="Build native libraries in parallel.")
+       parser.add_argument('--skip-config-check', dest='skipConfigCheck', action="store_true", default=False, help="Skips config check. Warranty void.")
 
        args = parser.parse_args()
 
        if args.dumpConfig:
                dumpConfig()
 
-       build(buildRoot=os.path.abspath(args.buildRoot), isRelease=args.isRelease, nativeBuildType=args.nativeBuildType, javaApi=args.javaApi, doParallelBuild=args.parallelBuild)
+       if not args.skipConfigCheck and not checkConfig():
+               print "Config check failed, exit"
+               exit(-1)
+
+       build(buildRoot=os.path.abspath(args.buildRoot), androidBuildType=args.androidBuildType, nativeBuildType=args.nativeBuildType, javaApi=args.javaApi, doParallelBuild=args.parallelBuild)