blob: 676487adbb52db8444904f97239c04ebb278e9fe [file] [log] [blame]
Kalle Raita77f71592014-10-20 12:22:44 -07001# -*- coding: utf-8 -*-
2
Jarkko Pöyry3c77ed42015-01-06 12:54:34 -08003#-------------------------------------------------------------------------
4# drawElements Quality Program utilities
5# --------------------------------------
6#
7# Copyright 2015 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
Kalle Raita77f71592014-10-20 12:22:44 -070023import os
24from build.common import *
25from build.build import *
26from argparse import ArgumentParser
27import multiprocessing
Kalle Raitaad8bdbb2015-07-10 13:54:54 -070028from build_android_mustpass import *
29
30class LaunchControlConfig:
31 def __init__ (self, buildArgs, checkMustpassLists):
32 self.buildArgs = buildArgs
33 self.checkMustpassLists = checkMustpassLists
34
35 def getBuildArgs (self):
36 return self.buildArgs
37
38 def getCheckMustpassLists (self):
39 return self.checkMustpassLists
Kalle Raita77f71592014-10-20 12:22:44 -070040
41# This is a bit silly, but CMake needs to know the word width prior to
42# parsing the project files, hence cannot use our own defines.
43X86_64_ARGS = ["-DDE_CPU=DE_CPU_X86_64", "-DCMAKE_C_FLAGS=-m64", "-DCMAKE_CXX_FLAGS=-m64"]
44
45BUILD_CONFIGS = {
Kalle Raitaad8bdbb2015-07-10 13:54:54 -070046 "gcc-x86_64-x11_glx": LaunchControlConfig(X86_64_ARGS + ["-DDEQP_TARGET=x11_glx"], False),
47 "clang-x86_64-x11_glx": LaunchControlConfig(X86_64_ARGS + ["-DDEQP_TARGET=x11_glx", "-DCMAKE_C_COMPILER=clang", "-DCMAKE_CXX_COMPILER=clang++"], False),
48 "gcc-x86_64-null": LaunchControlConfig(X86_64_ARGS + ["-DDEQP_TARGET=null"], True)
Kalle Raita77f71592014-10-20 12:22:44 -070049}
50
51def buildWithMake (workingDir):
52 pushWorkingDir(workingDir)
53 # CMake docs advised this to be the best magic formula...
54 threadCount = multiprocessing.cpu_count() + 1
55 print "Invoke make with %d threads" % threadCount
56 execute(["make", "-j%d" % threadCount])
57 popWorkingDir()
58
Kalle Raitaad8bdbb2015-07-10 13:54:54 -070059def checkForChanges ():
60 pushWorkingDir(DEQP_DIR)
61 # If there are changed files, exit code will be non-zero and the script terminates immediately.
62 execute(["git", "diff", "--exit-code"])
63 popWorkingDir()
64
Kalle Raita77f71592014-10-20 12:22:44 -070065def parseOptions ():
66 parser = ArgumentParser()
67
68 parser.add_argument("-d",
69 "--build-dir",
70 dest="buildDir",
71 default="out",
72 help="Temporary build directory")
73 parser.add_argument("-c",
74 "--config",
75 dest="config",
76 choices=BUILD_CONFIGS.keys(),
77 required=True,
78 help="Build configuration name")
79 parser.add_argument("-t",
80 "--build-type",
81 dest="buildType",
82 choices=["Debug", "Release"],
83 default="Debug",
84 help="Build type")
85 return parser.parse_args()
86
87if __name__ == "__main__":
88 options = parseOptions()
89
90 print "\n############################################################"
91 print "# %s %s BUILD" % (options.config.upper(), options.buildType.upper())
92 print "############################################################\n"
93
Kalle Raitaad8bdbb2015-07-10 13:54:54 -070094 launchControlConfig = BUILD_CONFIGS[options.config]
Kalle Raita77f71592014-10-20 12:22:44 -070095 buildDir = os.path.realpath(os.path.normpath(options.buildDir))
Kalle Raitaad8bdbb2015-07-10 13:54:54 -070096 config = BuildConfig(buildDir, options.buildType, launchControlConfig.getBuildArgs())
Kalle Raita77f71592014-10-20 12:22:44 -070097 initBuildDir(config, MAKEFILE_GENERATOR)
98 buildWithMake(buildDir)
99
Kalle Raitaad8bdbb2015-07-10 13:54:54 -0700100 if launchControlConfig.getCheckMustpassLists():
101 genMustpassLists(MUSTPASS_LISTS, MAKEFILE_GENERATOR, config)
102 checkForChanges()
103
Kalle Raita77f71592014-10-20 12:22:44 -0700104 print "\n--- BUILD SCRIPT COMPLETE"