1 # -*- coding: utf-8 -*-
3 #-------------------------------------------------------------------------
4 # drawElements Quality Program utilities
5 # --------------------------------------
7 # Copyright 2015 The Android Open Source Project
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
13 # http://www.apache.org/licenses/LICENSE-2.0
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.
21 #-------------------------------------------------------------------------
24 from build.common import *
25 from build.build import *
26 from argparse import ArgumentParser
27 import multiprocessing
28 from build_android_mustpass import *
30 class LaunchControlConfig:
31 def __init__ (self, buildArgs, checkMustpassLists):
32 self.buildArgs = buildArgs
33 self.checkMustpassLists = checkMustpassLists
35 def getBuildArgs (self):
38 def getCheckMustpassLists (self):
39 return self.checkMustpassLists
41 COMMON_GCC_CFLAGS = ["-Werror"]
42 COMMON_CLANG_CFLAGS = COMMON_GCC_CFLAGS + ["-Wno-error=unused-command-line-argument"]
43 X86_64_GCC_CFLAGS = COMMON_GCC_CFLAGS + ["-m64"]
44 X86_64_CLANG_CFLAGS = COMMON_CLANG_CFLAGS + ["-m64"]
46 def makeCflagsArgs (cflags):
47 cflagsStr = " ".join(cflags)
48 return ["-DCMAKE_C_FLAGS=%s" % cflagsStr, "-DCMAKE_CXX_FLAGS=%s" % cflagsStr]
51 "gcc-x86_64-x11_glx": LaunchControlConfig(["-DDEQP_TARGET=x11_glx"] + makeCflagsArgs(X86_64_GCC_CFLAGS), False),
52 "clang-x86_64-x11_glx": LaunchControlConfig(["-DDEQP_TARGET=x11_glx", "-DCMAKE_C_COMPILER=clang", "-DCMAKE_CXX_COMPILER=clang++"] + makeCflagsArgs(X86_64_CLANG_CFLAGS), False),
53 "gcc-x86_64-null": LaunchControlConfig(["-DDEQP_TARGET=null"] + makeCflagsArgs(X86_64_GCC_CFLAGS), True)
56 def buildWithMake (workingDir):
57 pushWorkingDir(workingDir)
58 # CMake docs advised this to be the best magic formula...
59 threadCount = multiprocessing.cpu_count() + 1
60 print "Invoke make with %d threads" % threadCount
61 execute(["make", "-j%d" % threadCount])
64 def checkForChanges ():
65 pushWorkingDir(DEQP_DIR)
66 # If there are changed files, exit code will be non-zero and the script terminates immediately.
67 execute(["git", "diff", "--exit-code"])
71 parser = ArgumentParser()
73 parser.add_argument("-d",
77 help="Temporary build directory")
78 parser.add_argument("-c",
81 choices=BUILD_CONFIGS.keys(),
83 help="Build configuration name")
84 parser.add_argument("-t",
87 choices=["Debug", "Release"],
90 return parser.parse_args()
92 if __name__ == "__main__":
93 options = parseOptions()
95 print "\n############################################################"
96 print "# %s %s BUILD" % (options.config.upper(), options.buildType.upper())
97 print "############################################################\n"
99 launchControlConfig = BUILD_CONFIGS[options.config]
100 buildDir = os.path.realpath(os.path.normpath(options.buildDir))
101 config = BuildConfig(buildDir, options.buildType, launchControlConfig.getBuildArgs())
102 initBuildDir(config, MAKEFILE_GENERATOR)
103 buildWithMake(buildDir)
105 if launchControlConfig.getCheckMustpassLists():
106 genMustpassLists(MUSTPASS_LISTS, MAKEFILE_GENERATOR, config)
109 print "\n--- BUILD SCRIPT COMPLETE"